2
$query="SELECT a.pk_i_id,a.i_price,b.s_title,c.pk_i_id AS img_id,c.s_extension,d.s_city,d.s_city_area from zl_t_item a, zl_t_item_description b, zl_t_item_resource c, zl_t_item_location d where a.fk_i_category_id=$cat_id and a.pk_i_id=b.fk_i_item_id and a.pk_i_id=c.fk_i_item_id and a.pk_i_id=d.fk_i_item_id ORDER BY a.dt_pub_date DESC";

この上記のクエリでは、このc.pk_i_id AS img_id ??の前に DISTINCT を追加する必要があります。

以下のようにしたときにエラーが表示されます

$query="SELECT a.pk_i_id,a.i_price,b.s_title,DISTINCT c.pk_i_id AS img_id,c.s_extension,d.s_city,d.s_city_area from zl_t_item a, zl_t_item_description b, zl_t_item_resource c, zl_t_item_location d where a.fk_i_category_id=$cat_id and a.pk_i_id=b.fk_i_item_id and a.pk_i_id=c.fk_i_item_id and a.pk_i_id=d.fk_i_item_id ORDER BY a.dt_pub_date DESC";

問題は何ですか?

4

5 に答える 5

2

DISTINCT キーワードの使用は無効です。一連の列にのみ適用でき、他の列をスキップする特定の列には適用できません

于 2013-09-16T10:02:38.597 に答える
1

DISTINCT列間でSELECT使用できない列または列のセットの直後に適用する必要がありますDISTINCT

SELECT  DISTINCT c.pk_i_id AS img_id, 
a.pk_i_id,a.i_price,b.s_title,c.s_extension,d.s_city,d.s_city_area 
from zl_t_item a, zl_t_item_description b, zl_t_item_resource c,
 zl_t_item_location d where a.fk_i_category_id=$cat_id 
and a.pk_i_id=b.fk_i_item_id and a.pk_i_id=c.fk_i_item_id 
and a.pk_i_id=d.fk_i_item_id ORDER BY a.dt_pub_date DESC
于 2013-09-16T10:05:33.547 に答える
0

一般に、DISTINCT を使用するとパフォーマンスが低下します。DISTINCT は、実際には重複を削除するためのフィルターです。したがって、複数の列を選択するときは、DISTINCT 句を単一の列ではなく完全なセットに適用する必要があります。したがって、エラーが表示されます。

クエリは、要件に基づいて書き直すことができます。重複を除外する場合は、行ランクを適用するか、group by と having 句を適用して、意図した結果を得ることができます。

于 2013-09-16T09:59:46.563 に答える
0

DISTINCT は常にすべての列で機能するため、SELECT の直後に配置する必要がある場合があります。

MySQL には、img_id ごとに 1 つの行のみを取得する簡単な方法があり、GROUP BY img_id を追加します。

SELECT
  a.pk_i_id
  ,a.i_price
  ,b.s_title
  ,c.pk_i_id AS img_id
  ,c.s_extension
  ,d.s_city
  ,d.s_city_area
from
  zl_t_item a
  ,zl_t_item_description b
  ,zl_t_item_resource c
  ,zl_t_item_location d
where
  a.fk_i_category_id = $cat_id
  and a.pk_i_id = b.fk_i_item_id
  and a.pk_i_id = c.fk_i_item_id
  and a.pk_i_id = d.fk_i_item_id
GROUP BY img_id
ORDER BY
  a.dt_pub_date DESC

もちろん、これは独自の MySQL 構文であり、リレーショナル データベースのすべての規則に違反しており、他の RDBMS では機能しません。

于 2013-09-16T10:03:56.907 に答える
0

SELECT DISTINCT <columns>またはSELECT <columns>(実際にはデフォルトで) のいずれかを指定できます。特定の列にSELECT ALL <columns>適用することはできません。DISTINCT

したがって、次のとおりです。

SELECT a.pk_i_id ,a.i_price, b.s_title, DISTINCT c.pk_i_id ...

は無効な SQL です。

于 2013-09-16T10:04:10.353 に答える