Kodları lütfen aşağıdaki butonları kullanarak renklendirin. Örnek: <php> echo "Selam Dünya"; </php>
Yardım
karakter kaldı

mysql left joinde eşit olmayan sonuçları alıyorum

iki tablom var blocks ve settings adında. (ekte tablonun içeriği var.)

SELECT blocks.id, blocks.title, blocks.content, blocks.show, blocks.cat, settings.name, settings.value
FROM `blocks`
LEFT JOIN settings ON blocks.cat = settings.name AND settings.owner = 'block_category'
ORDER BY blocks.id ASC
LIMIT 0 , 30


sorgusunu çalıştırıyorum bu tabloda ve fotoğrafta da görebileceğiniz gibi id'si 35 name'i ise 2U olan satır kategorisi 2 olan block satırına eşitleniyor. aynı şekilde başında ki numara eşitse devamına bakmadan eşitleniyor satırlar. localhost'ta hata olma ihtimaline karşı 3 server'da da denedim ama aynı sonucu aldım.
aynı şekilde settings tablosunun name sutununda başka 1 ve 2 numarasına eşit olmayan satır olmamasına rağmen AND settings.owner = 'block_category' kısmını sql sorgusundan sildiğimde sonuç olarak NULL değeri vermesi gerekmesine rağmen id'lere göre mi bilmiyorum ama rasgele satırlar eşitleniyor sorgu sonucuna. left join'in mantığını mı çözemedim yoksa hata denediğim server'larda mı anlamadım. yardımcı olursanız sevinirim.

Ekli Dosyalar

+0
-0
Cevaba KatılıyorumKatılmıyorum
Cevap Yaz Yorum Yaz Arşivime Ekle Takip Et

Doğru Cevap

  • HaylazNef adlı üyenin fotoğrafı
    10 yıl önce yazılmış
    38 cevap - 14 soru
    and yerine where kullanırsan sorun çözülebilir bi dene istersen :)
    • drengarc adlı üyenin fotoğrafı drengarc
      where'i her yerde kullanmayı denemiş olmama rağmen hata veriyordu, hatta bu kalıbı bile en başta kullandım sanıyordum ama yanlış kullanmışım sanırsam. :) dediğiniz gibi yaptım sorun çözüldü teşekkür ederim ilginiz için. ancak de yine anlam veremediğim bir olay var: setting_name sutununda setting_owber'ı block_category olmayan ve yine de herhangi bir block_cat değerine eşit olan satır yok. buna rağmen neden WHERE setting_owner = 'block_category' sorgusunu da istiyor?
      10 yıl önce yazılmış
    • HaylazNef adlı üyenin fotoğrafı HaylazNef
      kullanım jıinlerin mantığına tersti şunu söyleyeyim on dedikten sonra join ettiğiniz tablonun hangi sütünları ortak onlşarı belirtiyorsunuz onun dışında bir kısıtlama varsa where kullanmalısınız muhtemelen joinnin kullanımına ters bir ifade olduğundan saçmalıyordu :)
      10 yıl önce yazılmış

Cevaplar

  • zugur adlı üyenin fotoğrafı
    10 yıl önce yazılmış
    21 cevap - 0 soru
    left outer join i deneyebilirmisin
    • drengarc adlı üyenin fotoğrafı drengarc
      sonuç gene aynı. :(
      10 yıl önce yazılmış
  • sky adlı üyenin fotoğrafı
    10 yıl önce yazılmış
    7 cevap - 0 soru
    sornunu tam anlayamadım ama eşitlik sağlamadığı halde veriler geliyor ise left join yerine inner join kullanabilirsin. Böylelikle sadece eşitliği olanları getirebilirsin. umarım yanlış anlamamışımdır.
    • buremba adlı üyenin fotoğrafı buremba
      inner joinde ortak sonuçları yazdırıyor bildiğiniz gibi. benim istediğim settings tablosunda setting_owner kısmı block_category olan sonuçların çekilmesi, her sonucun setting_name (idsi) kısmı ile blocks tablosunun block_cat kısmı karşılaştırılıp bütün o block_cat'a sahip sonuçların yazdırılması.
      ama dediğim gibi hem ON değerindeki block_cat ve setting_name değerini karşılaştırırken alakası olmayan değerler getiriyor ve block_cat diyelim 2 setting_name 2uu ise bile onu doğru kabul ediyor.
      10 yıl önce yazılmış