0

質問:

mysql> SELECT DISTINCT (stories.id), stories.news_type, story_keywords.keyword 
FROM (`stories`) LEFT JOIN `story_keywords` ON `stories`.`id`
=`story_keywords`.`story_id` 
WHERE `image_full_url` != '' AND `order` != 0 
AND `news_type` IN ('movie_review', 'movie') 
AND `keyword` IN ('topnews', 'toptablet') 
ORDER BY `created` DESC, `order` DESC LIMIT 5;

結果:(IDが区別されないことに注意してください)

+--------+--------------+-----------+
| id     | news_type    | keyword   |
+--------+--------------+-----------+
| 100895 | movie_review | topnews   |
| 100895 | movie_review | toptablet |
| 100798 | movie_review | toptablet |
| 100060 | movie_review | toptablet |
| 100060 | movie_review | topnews   |
+--------+--------------+-----------+
5 rows in set (0.00 sec)
4

3 に答える 3

4

select distinctフェッチされる行に適用され、その行の個々のフィールドには適用されません。結果セットの各行は個別です。

于 2012-11-14T14:36:57.047 に答える
0

DISTINCTkeyword列には、の基準に一致するさまざまな行の複数の値があるため、は行全体に適用されDISTINCTます。1行を返す場合は、どの値keywordを返すかを決定する必要があります。

値を連結する場合は、次を使用できますGROUP_CONCAT()

SELECT stories.id, stories.news_type, GROUP_CONCAT(story_keywords.keyword)
FROM (`stories`) 
LEFT JOIN `story_keywords` 
  ON `stories`.`id`=`story_keywords`.`story_id` 
WHERE `image_full_url` != '' AND `order` != 0 
  AND `news_type` IN ('movie_review', 'movie') 
  AND `keyword` IN ('topnews', 'toptablet') 
GROUP BY stories.id, stories.news_type
ORDER BY `created` DESC, `order` DESC LIMIT 5;

データは次のように返されます。

| id     | news_type    |   keyword           |
+--------+--------------+---------------------+
| 100895 | movie_review | topnews,toptablet   |
| 100798 | movie_review | toptablet           |
| 100060 | movie_review | toptablet, topnews  |
于 2012-11-14T14:41:05.230 に答える
0

DISTINCTオプションは、フィールド値ではなく、重複したレコードを削除します。個別のIDを選択する場合は、このクエリを使用できます-

SELECT
  stories.id,
  GROUP_CONCAT(stories.news_type),
  GROUP_CONCAT(story_keywords.keyword)
FROM (`stories`)
LEFT JOIN `story_keywords`
ON `stories`.`id` = `story_keywords`.`story_id`
WHERE
  `image_full_url` != ''
  AND `order` != 0
  AND `news_type` IN ('movie_review', 'movie')
  AND `keyword` IN ('topnews', 'toptablet')
GROUP BY
  stories.id
ORDER BY
  `created` DESC
, `order` DESC
LIMIT
  5;
于 2012-11-14T14:41:10.397 に答える