Дубли записей при нескольких условия order by

274
16 декабря 2017, 04:41

Собственно вот запрос:

SELECT 
  p.id, 
  p.autor, 
  p.date, 
  p.short_story, 
  CHAR_LENGTH(p.full_story) as full_story, 
  p.xfields, 
  p.title, 
  p.category,
  p.alt_name, 
  p.comm_num, 
  p.allow_comm, 
  p.fixed, 
  p.tags, 
  e.news_read, 
  e.allow_rate, 
  e.rating, 
  e.vote_num, 
  e.votes, 
  e.view_edit, 
  e.editdate, 
  e.editor, 
  e.reason, 
  f.dcount 
FROM dle_post p 
LEFT JOIN dle_post_extras e ON (p.id=e.news_id) 
LEFT JOIN dle_files f ON (p.id=f.news_id) 
WHERE category NOT REGEXP '[[:<:]](3)[[:>:]]' 
AND approve=1 
ORDER BY rating DESC, news_read DESC, comm_num DESC, dcount DESC 
LIMIT 0,100

Если оставить только ORDER BY rating DESC то все нормально и дублей нет.

Answer 1

Вам нужно дописать в конце запроса:

GROUP BY p.id

Проблема возникает потому что в других таблицах есть по нескольку записей для одной записи из таблицы dle_post. Соответственно MySQL выводит все возможные сочетания записей из первой таблицы записям из других таблиц.

READ ALSO
Диалоги по типу ВК. Структура БД?

Диалоги по типу ВК. Структура БД?

С двумя собеседниками вроде просто

275
Коллекция из БД в MVVM

Коллекция из БД в MVVM

Есть как я думаю стандартный подход к получению данных из БД

263