在选择查询mysql数据库时,我使用了,如下所示
$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次)。
发布于 2012-12-20 12:12:09
起作用了。返回的是两个表中的所有列值。因此,如果一个供应商有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."%')");发布于 2012-12-20 12:14:06
DISTINCT可以工作--但是您的期望是错误的:SELECT DISTINCT将只从结果集中删除完全相同的元组,并且由于您请求* (这意味着来自所有表的所有字段),您将得到元组,即连接表中的差异。
您可以通过减少返回的列来解决这个问题:要么命名它们,要么只使用vendor.*
https://stackoverflow.com/questions/13971916
复制相似问题