il_adi,ilce_adi,semt_ad,mahalle_adi sütunlarına index ekleyin.
aynı şehirde yaşasak şunu yazmak için çay ısmarlatırdım.
SELECT SQL_CACHE CONCAT('ilId=',il.id,'&ilceId=0&semtId=0&mahalleId =0') AS s1, il.il_adi AS s2 FROM il WHERE il.il_adi LIKE 'beyoğlu%' LIMIT 2
UNION
SELECT CONCAT('ilId=',il.id,'&ilceId=',ilce.id,'&semtId=0 &mahalleId=0') AS s1, CONCAT_WS(', ',il.il_adi,ilce.ilce_adi) AS s2 FROM ilce INNER JOIN il ON ilce.il_id = il.id WHERE ilce.ilce_adi LIKE 'beyoğlu%' LIMIT 3
UNION
SELECT CONCAT('ilId=',il.id,'&ilceId=',ilce.id,'&semtId=' ,semt.id,'&mahalleId=0') AS s1, CONCAT_WS(', ',il.il_adi,ilce.ilce_adi,semt.semt_adi) AS s2 FROM semt INNER JOIN ilce ON ilce.id = semt.ilce_id INNER JOIN il ON il.id = semt.il_id WHERE semt.semt_adi LIKE 'beyoğlu%' LIMIT 3
UNION
SELECT CONCAT('ilId=',il.id,'&ilceId=',ilce.id,'&semtId=' ,semt.id,'&mahalleId=',mahalle.id) AS s1, CONCAT_WS(', ',il.il_adi,ilce.ilce_adi,semt.semt_adi,mahalle.ma halle_adi) AS s2 FROM mahalle INNER JOIN semt ON mahalle.semt_id=semt.id INNER JOIN ilce ON ilce.id = semt.ilce_id INNER JOIN il ON il.id = ilce.il_id WHERE mahalle.mahalle_adi LIKE 'beyoğlu%' LIMIT 10
Showing rows 0 - 4 ( 5 total, Query took 0.0022 sec)
s1 s2
ilId=34&ilceId=419&semtId=0&mahalleId=0 İstanbul, Beyoğlu
ilId=46&ilceId=640&semtId=2915&mahalleId=0 Kahramanmaraş, Türkoğlu, Beyoğlu
ilId=55&ilceId=733&semtId=3318&mahalleId=37362 Samsun, Tekkeköy, Köyler, Beyoğlu Köyü
ilId=59&ilceId=788&semtId=3486&mahalleId=41023 Tekirdağ, Şarköy, Köyler, Beyoğlu Köyü
ilId=76&ilceId=927&semtId=4024&mahalleId=49568 Iğdır, Tuzluca, Gaziler, Beyoğlu Köyü
---
union birleştirme sorgularına özel SQL_CACHE gibi bir özellik gireceksen ilk sorguya gireceksin. diğerleri otomatik olarak etkilenirler.
limit olayında en son sorguda ki limit toplam limittir.
ben 10 verdim, bu mahallenin limiti değildir. mahallenin limiti 10-2-3-3 = 2 dir.
ayrıca il için sonuç olmadığında limit sondaki kaydırılır. mahalle limiti 4 olur gibi.
sorguyu elimle yazdım birleştirmeleri kontrol edin tekrar.
iyi çalışmalar