【问题标题】:Distinct in select query of mysql is not workingmysql的选择查询中的不同不起作用
【发布时间】:2012-12-07 22:59:39
【问题描述】:

我在 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 次)

【问题讨论】:

  • 使用 DISTINCT YOUR_COLUMN
  • 我也使用这个,但是...与我在问题 SELECT DISTINCT (vendor.name, vendor.description,branches.city) 中提到的结果相同
  • 是的,它会的。与其使用 DISTINCT,不如使用 GROUP BY。
  • DISTINCT vendor.* 它现在运行良好...感谢所有人,感谢 stackoverflow

标签: php mysql database select distinct


【解决方案1】:

它正在工作。您返回的是两个表中的所有列值。因此,如果供应商有 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."%')");

【讨论】:

    【解决方案2】:

    DISTINCT 有效 - 但您的期望被误导了:SELECT DISTINCT 只会从结果集中删除 完全相同 元组,并且由于您请求 * 这意味着来自所有表的所有字段,你会得到元组,它们在连接表中是不同的。

    您可以通过减少返回的列来解决此问题:命名它们或仅使用 vendor.*

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多