0

このようにmysqlデータベースのselectクエリで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 回表示されます)

4

2 に答える 2

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."%')");
于 2012-12-20T12:12:09.760 に答える
2

結果セットから完全に同一DISTINCTタプルSELECT DISTINCTのみを削除し、すべてのテーブルのすべてのフィールドを意味するように要求するため、結合されたテーブルで異なるタプルを取得します。*

返された列を減らすことでこれを解決できます。名前を付けるか、単に使用しますvendor.*

于 2012-12-20T12:14:06.300 に答える