Сохранение возвращенных записей из MySQL уникальным - PullRequest
0 голосов
/ 05 ноября 2011

Есть ли быстрый способ убедиться, что записи, возвращаемые вами из запроса MySQL JOIN, уникальны?

Приведенный ниже код потенциально может вернуть одну и ту же категорию дважды.Это идентификатор категории, который должен быть отличным!

SELECT 
   exp_categories.cat_name, exp_categories.cat_id, exp_categories.cat_url_title
  ,exp_category_posts.entry_id, exp_channel_titles.status 
FROM (exp_categories 
LEFT JOIN exp_category_posts 
       ON exp_categories.cat_id = exp_category_posts.cat_id) 
LEFT JOIN exp_channel_titles 
       ON exp_category_posts.entry_id = exp_channel_titles.entry_id 
WHERE exp_categories.group_id = 2 
  AND exp_category_posts.entry_id IS NOT NULL 
  AND exp_channel_titles.status = 'open' 
ORDER BY RAND() 
LIMIT 2

Ответы [ 3 ]

1 голос
/ 05 ноября 2011

Если я понимаю, что вам нужно, вы можете закрыть свой запрос:

GROUP BY exp_categories.cat_id
ORDER BY RAND() 
LIMIT 2
1 голос
/ 05 ноября 2011

Проблема в том, что вы объединяете один-ко-многим, поэтому вы увидите столько строк, сколько записей в таблице «многие».Если вы хотите вернуть только одну строку для каждой категории, вам нужно либо запросить только категории, либо решить, какие критерии вы хотите использовать, чтобы выбрать отдельные значения из exp_category_posts.

Один из примеров - запрос самого последнегоопубликовать в категории и присоединиться к этому набору результатов вместо exp_category_posts.

0 голосов
/ 05 ноября 2011
    SELECT 
   exp_categories.cat_name, exp_categories.cat_id, exp_categories.cat_url_title
  ,exp_category_posts.entry_id, exp_channel_titles.status 
FROM (exp_categories 
LEFT JOIN exp_category_posts 
       ON exp_categories.cat_id = exp_category_posts.cat_id) 
LEFT JOIN exp_channel_titles 
       ON exp_category_posts.entry_id = exp_channel_titles.entry_id 
WHERE exp_categories.group_id = 2 
  AND exp_category_posts.entry_id IS NOT NULL 
  AND exp_channel_titles.status = 'open' 
  GROUP BY exp_categories.cat_id
ORDER BY RAND() 
LIMIT 2

edit: добавление столбца, который вы хотите выделить в предложении GROUP BY, обеспечит возвращение только 1. Кроме того, ORDER BY RAND () сильно не рекомендуется, см .: http://www.titov.net/2005/09/21/do-not-use-order-by-rand-or-how-to-get-random-rows-from-table/

...