我在 mysql数据库的选择查询中使用 distinct ,就像这样
$query=mysql_real_escape_string($_GET['query']);
$query_for_result=mysql_query("SELECT DISTINCT *
FROM vendor
LEFT JOIN branches ON branches.vendor_id = vendor.vendor_id
WHERE
(vendor.name LIKE '%".$query."%'
OR vendor.description LIKE '%".$query."%'
OR branches.city LIKE '%".$query."%')");
$qrow=mysql_fetch_array($query_for_result);
if(empty($qrow)){
while($qrow=mysql_fetch_array($query_for_result)){
Some Code to display result
<?php
}
mysql_close();
}
?>
问题是这个,它多次显示每个结果,它从分支表中显示每个结果和它喜欢的城市,(意味着:如果供应商表中的结果在分支表中有5个城市它将显示5次)< / p>
答案 0 :(得分:6)
它正在发挥作用。您返回的是两个表中的所有列值。因此,如果供应商有5个城市,那么有5个不同的结果:
Vendor City
A London
A New York
B London
C London
这些行都不相同,因此,它们是查询的不同结果。
假设您需要不同的供应商列表,那么您需要这样的内容:
SELECT DISTINCT vendor.*
FROM vendor
LEFT JOIN branches ON branches.vendor_id = vendor.vendor_id
WHERE
(vendor.name LIKE '%".$query."%'
OR vendor.description LIKE '%".$query."%'
OR branches.city LIKE '%".$query."%')");
答案 1 :(得分:2)
DISTINCT
有效 - 但您的期望是错误的:SELECT DISTINCT
只会从结果集中删除完全相同的元组,并且因为您请求*
表示所有表中的所有字段,得到元组,在连接表中有差异。
您可以通过减少已归还的列来解决此问题:要么命名它们,要么只使用vendor.*