2015-01-11 2 views
0
$result1 = mysql_query("SELECT distinct city FROM postcodedb WHERE web='ALR' ORDER BY city") or die(mysql_error()); 
while($row1=mysql_fetch_array($result1)) { 
    $city = $row1['city']; 
    $result = mysql_query("SELECT * FROM postcodedb WHERE area='$city' AND city='$city' LIMIT 1") or die(mysql_error()); 
    while($row=mysql_fetch_array($result)) { 
     $city = $row['city']; 
    } 
} 

Таким образом, в записях базы данных выглядит следующим образом:У меня есть MySQL Query Я хотел бы сделать быстрее

--------------------- 
id city  area 
--------------------- 
1 Bromley Bromley <- I need this record 

2 Bromley other1 

3 Bromley other2 

4 Ilford Ilford <- and then this one 

5 Ilford other1 
--------------------- 

и есть больше городов и районов, присвоенные этим городам.

Итак, что я пытаюсь получить это перечисление различных городов, но главное для меня то, что я получаю строку ID, где оба city и area такие же ??

Этот запрос работает так, как будто я хочу, чтобы он работал, но немного медленнее, и я считаю, что есть лучший способ добиться такого же результата?

Надеюсь, я четко объяснил себя.

спасибо, что заблаговременно!

Нита

+1

«город» и «сеть» проиндексированы? –

+0

Индексирование и кеширование - это единственное, что вы можете сделать – Rafael

+0

Как кешировать эти значения? – Nita

ответ

1

Если город и область одни и те же, то, что должно быть условием в запросе:

SELECT distinct city 
FROM postcodedb 
WHERE web = 'ALR' and city = area 
ORDER BY city; 

В идеале, не было бы никаких дубликатов, так что вы можете устранить distinct:

SELECT city 
FROM postcodedb 
WHERE web = 'ALR' and city = area 
ORDER BY city; 

И для этого запроса вы хотите индекс на postcodedb(web, city, area) для оптимальной производительности.

+0

Для производительности у вас будет один запрос вместо двух!?!? – Strawberry

+0

Великий Thx много Гордон, именно то, что я искал. – Nita

0
$result1 = mysql_query("SELECT distinct city FROM postcodedb WHERE web = 'ALR' and city = area ORDER BY city") or die(mysql_error()); 
while($row1=mysql_fetch_array($result1)) { 
$city = $row1['city']; 
} 

1 запрос вместо 2. Видимое увеличение производительности. Работает намного быстрее.

Спасибо, ребята.

Смежные вопросы