我有MySQL查询我想更快

时间:2015-01-11 20:43:35

标签: php mysql

$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'];
    }
}

所以在数据库记录中看起来像这样:

---------------------
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
---------------------

并且有更多城市和地区分配到这些城市。

所以,我想要获得的是 不同的城市的列表,但对我来说重要的是我获得了两个{{1}的行ID }和city是一样的??

这个查询可以正常运行,但有点慢,我相信有更好的方法可以达到相同的效果吗?

我希望我能清楚地解释清楚。

非常感谢你!

2 个答案:

答案 0 :(得分: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)上的索引才能获得最佳效果。

答案 1 :(得分: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.可见的性能提升。工作得那么快。

谢谢你们。