簡體   English   中英

在mysql的選擇查詢中不同無法正常工作

[英]Distinct in select query of mysql is not working

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

這是工作。 您返回的是兩個表中的所有列值。 因此,如果供應商有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."%')");

DISTINCT有效-但是您的期望被誤導了: SELECT DISTINCT將僅從結果集中刪除完全相同的元組,並且由於您請求* ,這意味着所有表中的所有字段,您將得到元組,該元組在聯接表中有所不同。

您可以通過減少返回的列來解決此問題:命名它們或僅使用vendor.*

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM