3

私のアプリケーションには、発行元とカテゴリがあります。1 つのパブリッシャーが複数のカテゴリに属する​​ことができます。mysql トランザクションを作成すると、属するカテゴリごとに同じ発行者レコードが返されます。クエリは次のとおりです。

選択する
    grdirect_publisher.name、
    grdirect_publisher.short_description,
    grdirect_publisher.thumb_image、
    grdirect_publisher.url、
    grdirect_category.name AS catname
から
    grdirect_publisher
加入
    grdirect_publisher_categories
    オン
    grdirect_publisher.id = grdirect_publisher_categories.publisher_id
加入
    grdirect_category
    オン
    grdirect_publisher_categories.category_id = grdirect_category.id

戻り値:

名前 short_description thumb_image url catname
-------------------------------------------------- ----------
Foo Lorem Ipsum... images/pic.png d.com ビデオ ゲーム
Foo Lorem Ipsum... images/pic.png d.com 音楽
Bar Blah Blah ... images/tic.png e.com 音楽

基本的に、Foo は結果に 1 回だけ表示されます。

4

1 に答える 1

4

使用できますDISTINCTが、結果セットのいずれかの列に個別の値がある場合、行が強制的に複製されます。リストを ごとに 1 行に減らしたい場合nameは、使用する必要があり、列DISTINCTを省略する必要があります。catname

SELECT DISTINCT
    grdirect_publisher.name,
    grdirect_publisher.short_description,
    grdirect_publisher.thumb_image,
    grdirect_publisher.url
FROM
. . .

使用する代わりの別の解決策は、グループ内の複数の値を取り、カンマ区切りのリストを生成できるようにするDISTINCTMySQL の集計関数です。GROUP_CONCAT()

SELECT
    grdirect_publisher.name,
    grdirect_publisher.short_description,
    grdirect_publisher.thumb_image,
    grdirect_publisher.url,
    GROUP_CONCAT(grdirect_category.name) AS catname
. . .
GROUP BY grdirect_publisher.id;

したがって、正しい解を得るには、結果セットをどのように表示するかを決定する必要があります。

于 2008-11-07T23:11:50.163 に答える