folder Tahribat.com Forumları
linefolder Database - Veritabanı
linefolder Mysql Sorguda Bir Gariplik



Mysql Sorguda Bir Gariplik

  1. KısayolKısayol reportŞikayet pmÖzel Mesaj
    MhmdAlmz
    MhmdAlmz's avatar
    Kayıt Tarihi: 09/Ağustos/2015
    Erkek

    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.


    Andolsun kuşluk vaktine ve dindiği zaman o geceye ki, Rabbin sana veda etmedi ve darılmadı! Ve kesinlikle senin için sonu önünden (ahiret dünyadan) daha hayırlıdır. ileride Rabbin sana verecek de hoşnut olacaksın! O, seni bir yetim iken barındırmadı mı? Seni, yol bilmez iken (doğru) yola koymadı mı? Seni bir yoksul iken zengin etmedi mi? Öyle ise, sakın yetime kahretme (onu horlama)! El açıp isteyeni de azarlama! Fakat Rabbinin nimetini anlat da anlat!
  2. KısayolKısayol reportŞikayet pmÖzel Mesaj
    tagext
    tagext's avatar
    Üstün Hizmet Madalyası Başarı Madalyası
    Kayıt Tarihi: 25/Temmuz/2002
    Erkek

    tablorenk tablosundaki kayıtlar eksik o yüzden left join kayıt döndürüyor.


    ftw
  3. KısayolKısayol reportŞikayet pmÖzel Mesaj
    MhmdAlmz
    MhmdAlmz's avatar
    Kayıt Tarihi: 09/Ağustos/2015
    Erkek

    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.


    Andolsun kuşluk vaktine ve dindiği zaman o geceye ki, Rabbin sana veda etmedi ve darılmadı! Ve kesinlikle senin için sonu önünden (ahiret dünyadan) daha hayırlıdır. ileride Rabbin sana verecek de hoşnut olacaksın! O, seni bir yetim iken barındırmadı mı? Seni, yol bilmez iken (doğru) yola koymadı mı? Seni bir yoksul iken zengin etmedi mi? Öyle ise, sakın yetime kahretme (onu horlama)! El açıp isteyeni de azarlama! Fakat Rabbinin nimetini anlat da anlat!
  4. KısayolKısayol reportŞikayet pmÖzel Mesaj
    emirhan-exp
    emirhan-exp's avatar
    Kayıt Tarihi: 10/Ocak/2010
    Erkek

       

    emirhan-exp tarafından 25/Ağu/18 23:50 tarihinde düzenlenmiştir
  5. KısayolKısayol reportŞikayet pmÖzel Mesaj
    SinusX
    SinusX's avatar
    Kayıt Tarihi: 14/Aralık/2010
    Erkek
    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?


    Si vis pacem para bellum.
  6. KısayolKısayol reportŞikayet pmÖzel Mesaj
    MhmdAlmz
    MhmdAlmz's avatar
    Kayıt Tarihi: 09/Ağustos/2015
    Erkek
    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.


    Andolsun kuşluk vaktine ve dindiği zaman o geceye ki, Rabbin sana veda etmedi ve darılmadı! Ve kesinlikle senin için sonu önünden (ahiret dünyadan) daha hayırlıdır. ileride Rabbin sana verecek de hoşnut olacaksın! O, seni bir yetim iken barındırmadı mı? Seni, yol bilmez iken (doğru) yola koymadı mı? Seni bir yoksul iken zengin etmedi mi? Öyle ise, sakın yetime kahretme (onu horlama)! El açıp isteyeni de azarlama! Fakat Rabbinin nimetini anlat da anlat!
  7. KısayolKısayol reportŞikayet pmÖzel Mesaj
    SinusX
    SinusX's avatar
    Kayıt Tarihi: 14/Aralık/2010
    Erkek
    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

     


    Si vis pacem para bellum.
  8. KısayolKısayol reportŞikayet pmÖzel Mesaj
    MhmdAlmz
    MhmdAlmz's avatar
    Kayıt Tarihi: 09/Ağustos/2015
    Erkek
    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.


    Andolsun kuşluk vaktine ve dindiği zaman o geceye ki, Rabbin sana veda etmedi ve darılmadı! Ve kesinlikle senin için sonu önünden (ahiret dünyadan) daha hayırlıdır. ileride Rabbin sana verecek de hoşnut olacaksın! O, seni bir yetim iken barındırmadı mı? Seni, yol bilmez iken (doğru) yola koymadı mı? Seni bir yoksul iken zengin etmedi mi? Öyle ise, sakın yetime kahretme (onu horlama)! El açıp isteyeni de azarlama! Fakat Rabbinin nimetini anlat da anlat!
Toplam Hit: 1270 Toplam Mesaj: 8
mysql pdo