Mysql Sorguda Bir Gariplik
-
Merhabalar hocalarım çok saçma bir sorun ile karşı karşıyayım. Sorun şu ki;
Şöyle bir Query mevcut.
SELECT * FROM tablosatislar INNER JOIN tablomeyveler ON tablomoyveler.MeyveID = tablosatislar.MeyveID INNER JOIN tablotur ON tablotur.TurID = tablomeyveler.TurID INNER JOIN tablorenk ON tablorenk.RenkID = ( CASE tablomeyveler.TurID WHEN 1 THEN tablomeyveler.Renk1 WHEN 2 THEN tablomeyveler.Renk2 WHEN 3 THEN tablomeyveler.Renk3 ELSE 0 END )
Bu Query bana bazen sonuç verirken bazen vermiyor. Aynı query çalıştırıyorum halbuki. 10 sorgu arasından 2-3 defa verileri veriyor bazen vermiyor. Sorguda sıkıntı yok. Fakat sorguyu şu hale getirince.
SELECT * FROM tablosatislar INNER JOIN tablomeyveler ON tablomoyveler.MeyveID = tablosatislar.MeyveID INNER JOIN tablotur ON tablotur.TurID = tablomeyveler.TurID LEFT JOIN tablorenk ON tablorenk.RenkID = ( CASE tablomeyveler.TurID WHEN 1 THEN tablomeyveler.Renk1 WHEN 2 THEN tablomeyveler.Renk2 WHEN 3 THEN tablomeyveler.Renk3 ELSE 0 END )
Her türlü sonucu veriyor bana Arasındaki fark INNER join'i LEFT Join ile değiştirdim.Normalde INNER JOIN olması gerekiyor çünkü bire bir ilişkili tabloların birbirini karşılamaması imkansız. LEFT Olmaması gerekiyor. Fakat INNER deyince de bazen sorgu geliyor bazen gelmiyor. Muhabbeti çözemedim PDO kullanıyorum PHP de .
ORM falan da yok. Salt PDO. Mysql olarak da çalıştırıyorum Query'i aynı şekilde bazen boş bazen dolu geliyor sonuçlar.
Acaba diyorum Case When şartı Asenkron falan mı çalışıyor. Bu seferde LEFT deyince gelmesi saçmalık ben çözemedim bu işi.
İşin ehli arkadaşlar varsa bir el atabilir mi ?
Şuan LEFT JOIN diyerek çözdüm işi ama data büyük Inner Yapmam gerekiyor LEFT yavaşlatıyor...
INNER ve LEFT JOIN aynı sonucu veriyor bu arada.
Dip Not : Query'i salladım ama query yapısı bu şekilde.
-
tablorenk tablosundaki kayıtlar eksik o yüzden left join kayıt döndürüyor.
-
Yok işte hocam var. INNER JOIN deyince bazen geliyor bazen gelmiyor. Geliyor yani Gelmese hiç gelmez. INNER dediğimde gelen veriler ile LEFT dediğimde gelen veriler eşit. aynı yani. Senin dediğin olsa inner ile joinlediğimde hiç gelmez.
-
-
INNER JOIN tablorenk ON tablorenk.RenkID = ( CASE tablomeyveler.TurID WHEN 1 THEN tablomeyveler.Renk1 WHEN 2 THEN tablomeyveler.Renk2 WHEN 3 THEN tablomeyveler.Renk3 ELSE 0 END )
surada ne yapmaya calistin tam olarak?
-
SinusX bunu yazdı
INNER JOIN tablorenk ON tablorenk.RenkID = ( CASE tablomeyveler.TurID WHEN 1 THEN tablomeyveler.Renk1 WHEN 2 THEN tablomeyveler.Renk2 WHEN 3 THEN tablomeyveler.Renk3 ELSE 0 END )
surada ne yapmaya calistin tam olarak?
Hocam 3 adet meyve rengi var bu renkler türe göre değişiyor o anki tür hangisi ise o rengi alıyor. CASE WHEN (IF ELSE) Kullanıyorum işte.
-
SELECT *, CASE tablomeyveler.TurID WHEN 1 THEN tablomeyveler.Renk1 WHEN 2 THEN tablomeyveler.Renk2 WHEN 3 THEN tablomeyveler.Renk3 ELSE 0 END as renk FROM tablosatislar INNER JOIN tablomeyveler ON tablomoyveler.MeyveID = tablosatislar.MeyveID INNER JOIN tablotur ON tablotur.TurID = tablomeyveler.TurID
şunu bi dener misin
-
SinusX bunu yazdı
SELECT *, CASE tablomeyveler.TurID WHEN 1 THEN tablomeyveler.Renk1 WHEN 2 THEN tablomeyveler.Renk2 WHEN 3 THEN tablomeyveler.Renk3 ELSE 0 END as renk FROM tablosatislar INNER JOIN tablomeyveler ON tablomoyveler.MeyveID = tablosatislar.MeyveID INNER JOIN tablotur ON tablotur.TurID = tablomeyveler.TurID
şunu bi dener misin
Hocam bu kod benim işimi görmüyor malesef.