Делается мультиязычность сайта путем вывода более популярных, собравших большее кол-во голосов, значений из mysql базы данных.
Таблица состоит:
|id|text_id|module|lang| text |voices|uid|
------------------------------------------
|1 | 1 |anketa| ru |Ашибка| 1 | 1 |
------------------------------------------
|2 | 1 |anketa| ru |Ошибка| 2 | 2 |
У меня получился запрос:
SELECT *
FROM `langs`
WHERE `module`='anketa'
AND `lang`='ru'
GROUP BY `text_id`
ORDER BY `voices` DESC
Но он выводит значение первое которое по списку с минимальным количеством voices, а должно выводить только с наибольшим количеством voices.
Помогите составить правильный запрос.
Решение вопроса:
SELECT
`l`.`text_id`, `l`.`text`, `l`.`voices`
FROM `langs` `l`
INNER JOIN (
SELECT
`text_id`, MAX(`voices`) AS `MaxVoice`
FROM `langs`
GROUP BY `text_id`
) `lm`
ON `l`.`text_id` = `lm`.`text_id` AND
`l`.`voices` = `lm`.`MaxVoice` AND
`l`.`module` = 'anketa' AND
`l`.`lang` = 'ru'
GROUP BY `l`.`text_id`
ORDER BY `l`.`text_id` ASC
По стандарту SQL в запросе с группировкой в части перечисления полей (то, что идет после SELECT) можно указывать ТОЛЬКО те поля, по которым идет группировка, или которые используются с групповыми функциями (sum, max, group_concat, ...). MySQL допускает выполнение запросов, не удовлетворяющих данному правилу. При этом для полей без групповых функций и не указанных в части GROUP BY выбирается произвольная строка из группы. Примеры см Группировка в MySQL
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости