Şimdi Ara

MySQL sorgusu tutarsız çalışıyor

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
2 Misafir - 2 Masaüstü
5 sn
10
Cevap
0
Favori
697
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • Merhaba Arkadaşlar,
    Php ile otomasyon sistemi tarzı bir uygulama yapıyorum. Sistemde kayıtlı olan kişileri bir tablo üzerinde listeliyorum. Bu tablo için bir de detayı arama tarzı bir sistem yaptım. Başta güzel çalışıyordu ama sonradan eksik çalışmaya başladı. Mesela kullanıcı veritabanında bulunmasına rağmen id si ile arattığımda bazı kullanıcıları listeliyor bazılarını listelemiyor. Resimler ve sql sorgum alttadır. Yardımlarınız için şimdiden teşekkürler...
    1. Resim Tüm kullanıcılar
     MySQL sorgusu tutarsız çalışıyor
    2. Resim id si 6 olan kullanıcı
     MySQL sorgusu tutarsız çalışıyor
    3. Resim id si 55 olan kullanıcı aslında var ama listelemiyor
     MySQL sorgusu tutarsız çalışıyor
    SQL sorgum
     $query = $db->query("SELECT * FROM members  WHERE ID like '%" . $_POST["kisiID"] . "%' 
    and isim like '%" . $_POST["kisiAdi"] . "%'
    and soyad like '%" . $_POST["kisiSoyadi"] . "%'
    and meslek like '%" . $_POST["Meslek"] . "%'
    and unvan like '%" . $_POST["Unvan"] . "%'
    and mesleki_unvan like '%" . $_POST["MeslekiUnvan"] . "%'
    and kan_grubu like '%" . $_POST["KanGrubu"] . "%'
    and cinsiyet like '%" . $_POST["Cinsiyet"] . "%'
    and il like '%" . $_POST["il"] . "%'
    and ilce like'%" . $_POST["ilce"] . "%'
    and memleket like '%" . $_POST["memleket"] . "%'
    and ID IN(Select mID From members_groups where gName like '%".$_POST["Grup"]."%')", PDO::FETCH_ASSOC);

     MySQL sorgusu tutarsız çalışıyor MySQL sorgusu tutarsız çalışıyor MySQL sorgusu tutarsız çalışıyor







  • like yerine = kullanınca da aynı sonuç mu oluyor?
  • Evet hocam
  • Peki sadece 11 ve 12 idleri ile arama yapınca sonuçlar çıkıyor mu?
  • Evet Çıkıyor hocam
  • İlginç gerçekten. Peki neden boş bırakılan alanları da mysql sorgusuna dahil ediyorsunuz? Hangileri doluysa onlar çalışsın sadece?
    Sadece id için sorgulandığında da sonuç gelmiyor mu? select * from members where id = 55;
  • Öyle sonuç dönüyor ama koşullu sorgu yapmam lazım. Yani grubu seçilen kişiler içinden belli bir ildekileri aramam lazım ve o ilde ve grupta olanlardan ali ismindekileri bulmam gerek bunu nasıl sağlayabilirim. 12! if else yazamam aklıma bir yöntem gelmiyor....

    birde diğer selectboxların ilk değerleri boş hiç bir sorgu yapmasam bile boş post oluyor :D



    < Bu mesaj bu kişi tarafından değiştirildi frknkntr -- 6 Aralık 2015; 2:39:07 >
  • Anladım.
    Aslında burada bir başka sorun daha var; tablo yapısı. Sanırım members isminde tek bir tablo kullanıyorsunuz. Bunu normalleştirmeniz faydanıza olacaktır. (http://beltslib.net/veri-tabanlarinda-normalizasyon.html)

    Sorgular ise dinamik şekilde önceden ayarlanmış şekilde çalışabilir. Buna prepared statement deniyor. Ancak o kadar mysql bilginiz yoksa php ile 12 tane if yazmanız en kolayı olacaktır. Performans olarak bir sıkıntı olacağını sanmıyorum çok. Her durumda boş alanları filtre etmek gerekeceği için bu if koşulları ya PHP içinden, ya da mysql içinden çalışmak zorunda.

    Ben PHP bilmiyorum ama bakın burada bir örnek var. (http://patrickallaert.blogspot.se/2007/09/building-dynamic-sql-queries-elegant.html)
    Mantık basit; her kutuyu boş mu dolu mu diye test ettikten sonra, eğer doluysa kutunun getireceği ek mysql sorgusunu, sorgulanacak öğeye dahil etmekten ibaret. Bu durumda sadece dolu olanlar çalışacaktır.




  • Hocam ilginiz için çok teşekkürler, sorunu çözdüm. Normalizasyon konusunda gelince bu sorgudan biraz anlaşılsa da veri tabanım BCNF / 3.5NF normalizasyon seviyesinde... açıklamam gerekirse grupları "groups" tablosunda, üyeleri "members" tablosunda ve many to many ilişkileri olması hasebiyle üyelerin dahil olduğu grupları "members_groups" tablosunda tutuyorum. İller, ilçeler, meslekler, unvanlar gibi kısımları farklı tablelarda tutuyorum ama burada many to one ilişkisi olduğu için bu kısmları her üye için "members" tablosunda açmış olduğum kısımlara ekliyorum...

    PreparedStatement kavramını tam bilmiyordum ama 6000 satır verim olunca cacheleme ihtiyacı duymuştum demek PreparedStatement sayesinde bu işlemi yapabiliyormuşuz. Çok teşşekkürler. Basit bir hata sayesinde yeni bir şey öğrenmiş oldum.

     $query = $db->query("SELECT * FROM members  WHERE (ID like '%" . $_POST["kisiID"] . "%' 
    and ID IN(Select mID From members_groups where gName like '%".$_POST["Grup"]."%'))
    and isim like '%" . $_POST["kisiAdi"] . "%'
    and soyad like '%" . $_POST["kisiSoyadi"] . "%'
    and meslek like '%" . $_POST["Meslek"] . "%'
    and unvan like '%" . $_POST["Unvan"] . "%'
    and mesleki_unvan like '%" . $_POST["MeslekiUnvan"] . "%'
    and kan_grubu like '%" . $_POST["KanGrubu"] . "%'
    and cinsiyet like '%" . $_POST["Cinsiyet"] . "%'
    and il like '%" . $_POST["il"] . "%'
    and ilce like'%" . $_POST["ilce"] . "%'
    and memleket like '%" . $_POST["memleket"] . "%'
    ", PDO::FETCH_ASSOC);



    sormgumu bu şekile getirince sorun halloldu... Tekrardan ilginize teşekkürler



    < Bu mesaj bu kişi tarafından değiştirildi frknkntr -- 7 Aralık 2015; 2:23:48 >




  • Düzeldiğine sevindim. Kolay gelsin.

    < Bu ileti mobil sürüm kullanılarak atıldı >
  • 
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.