Первый вопрос, который вы, вероятно, задаете, - это то, сколько групп по порядку по вопросам есть на SO? Много. Ни одно из них не соответствует моим конкретным обстоятельствам. Вот мой следующий SQL-запрос.MySQL, GroupBy OrderBy
Цель состоит в том, чтобы получить последние средства массовой информации для каждой команды в $teamArr
(набор уникальных идентификаторов).
Проблема, с которой я сталкиваюсь, заключается в том, что она не будет получать последние медиа для каждого, но она основана на порядке группы, по которой время средств массовой информации не зависит от команды.
Вот команда MySQL (с командой PHP sprintf()
для удобства использования с идентификаторами команды).
sprintf("SELECT M.*, T.name, T.has_image
FROM media AS M
JOIN teams AS T
ON T.team_uid = M.team_uid
WHERE M.team_uid IN (%s)
GROUP BY T.team_uid
ORDER BY M.time DESC", implode(", ", $teamArr));
Сценарий:
Команда А имеет медиа-элемент 3 часов назад, команда Б имеет 2 пунктов 6 часов назад и 2 дней назад, и команда С имеет медиа-элемент 9 часов назад.
Если порядок избранных оказывается Team A, C, B, то элементы медиа будет выглядеть следующим образом ...
- TeamA в 3 часа назад элемента медиа
- TeamC в 9 часов назад элемент медиа
- TeamB в 2 дня назад пункт СМИ
Там, вероятно, будут некоторые глупые высказывания говорят
Закажите только название команды dummy! Такая простая проблема. (этот ответ получит около +4 голосов)
Но это явно не помогает мне вообще. Я не могу знать, какие команды будут иметь оптимальный порядок (если какой-либо естественный или неестественный порядок будет работать даже с более чем тремя случаями). Есть ли способ, которым я могу это сделать в 1 SQL-запросе. Я слышал, что MySQL в цикле является плохим решением, поэтому причина, по которой я хочу, чтобы это работало в 1 SQL-вызове.
Нет, в SQL это не простая задача. Обычно это спрашивают. Обычно достаточно иметь собственный тег: ['[наибольший-n-per-group]'] (http://stackoverflow.com/questions/tagged/greatest-n-per-group). Поиск, нажав на этот тег выше или под заголовком ** Related **, справа. –
вместо дней вы можете превратить 2 дня в 48 часов, чтобы вы использовали одинаковое сравнение для всех? – northpole
его отметка времени unix @northpole. Поэтому сравнение не имеет значения ... Это просто сценарий, чтобы вы могли видеть, что происходит. – Michael