İki tablo var - incoming tours(id,name)
ve incoming_tours_cities(id_parrent, id_city)
id
ilk tablodaki benzersiz ve ilk tablodan benzersiz her satır için id_city
listesi var - (ikinci tabloda sn yani id_parrent
ikinci tabloda eşittir id
ilk tablodan)
Örneğin
incoming_tours
|--id--|------name-----|
|---1--|---first_tour--|
|---2--|--second_tour--|
|---3--|--thirth_tour--|
|---4--|--hourth_tour--|
incoming_tours_cities
|-id_parrent-|-id_city-|
|------1-----|---4-----|
|------1-----|---5-----|
|------1-----|---27----|
|------1-----|---74----|
|------2-----|---1-----|
|------2-----|---5-----|
........................
İşte first_tour
şehirlerin listesi var demektir - ("4","5","27","74")
VE second_tour
şehirler listesi var - ("1","5")
En i iki değer olduğunu varsayalım - 4
ve 74
:
Şimdi, benim both değerleri şehirleri listesinde olan ilk tablodan tüm satırları almak gerekiyor. yani dönmelidir sadece first_tour (4 ve 74 o şehirlerin listesi var çünkü)
Yani, ben aşağıdaki sorguyu yazdı
SELECT t.name
FROM `incoming_tours` t
JOIN `incoming_tours_cities` tc0 ON tc0.id_parrent = t.id
AND tc0.id_city = '4'
JOIN `incoming_tours_cities` tc1 ON tc1.id_parrent = t.id
AND tc1.id_city = '74'
Ve bu gayet iyi çalışıyor.
Ama dinamik sorgu oluşturmak ve birleştirme sayısı büyük olduğunda (yaklaşık 15) sorgu yavaşlıyor.
i çalıştırmayı denediğinizde, yani zaman
SELECT t.name
FROM `incoming_tours` t
JOIN `incoming_tours_cities` tc0 ON tc0.id_parrent = t.id
AND tc0.id_city = '4'
JOIN `incoming_tours_cities` tc1 ON tc1.id_parrent = t.id
AND tc1.id_city = '74'
.........................................................
JOIN `incoming_tours_cities` tc15 ON tc15.id_parrent = t.id
AND tc15.id_city = 'some_value'
Sorgu (i tablolarda dizinler sette rağmen) 45s
içinde çalışma'nın
I optimaze için, ne yapabilirim?
Çok teşekkürler