Используйте заказ из другого пункта выбора

dba.stackexchange https://dba.stackexchange.com/questions/2158

  •  16-10-2019
  •  | 
  •  

Вопрос

Так что я на самом деле пытаюсь достичь, так это фильтр наиболее проголосовавших в истории. Истории сохраняются в одном столе, и все голоса в другом.

У меня есть это утверждение, чтобы получить правильный заказ столбца VID:

SELECT vid, COUNT(id) AS votecnt 
  FROM votes 
WHERE status = 1 
GROUP BY vid 
ORDER BY votecnt DESC

А потом я должен сам фильтровать истории, и я хочу, чтобы это было заказано так же, как в первом пункте.

SELECT vid, body, timestamp 
  FROM stories 
WHERE lv = 1 
  AND status = 1

Дело в том, что это порядок, который мне нужен, потому что первое утверждение не возвращает все ряды, которые делает второй. Было бы даже лучше, если первый запрос будет сортировать таблицу по статусу = 1 с подсчетом, а затем общая голоса.

Есть идеи, как присоединиться ко всему этому в запрос SQL? Или я должен использовать PHP между ними?

Это было полезно?

Решение

Если я не понимаю вашу структуру, простое соединение должно работать нормально:

SELECT stories.vid, body, timestamp, COUNT(votes.id) votecnt FROM stories
INNER JOIN votes ON stories.vid=votes.vid
WHERE stories.lv=1 AND stories.status=1
GROUP BY votes.vid
ORDER BY votecnt DESC

Я не уверен, что вы имеете в виду под

Было бы даже лучше, если первый запрос будет сортировать таблицу по статусу = 1 с подсчетом, а затем общая голоса.

Поскольку ваш оператор, который использует только голоса/истории, которые имеют статус = 1.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с dba.stackexchange
scroll top