Подскажите почему два запроса выдают разные результаты?
1-ый запрос:
SELECT date, text, topic_id
FROM forum_msgs
ORDER BY topic_id,date DESC
и 2-ой запрос:
SELECT *
FROM (SELECT date, text, topic_id
FROM forum_msgs
ORDER BY topic_id,date DESC
) t1
2-ой запрос выдаёт неотсортированную таблицу и поэтому запрос, который приведен ниже уже не имеет смысла.
SELECT *
FROM (SELECT date, text, topic_id
FROM forum_msgs
ORDER BY topic_id,date DESC
) t1
GROUP BY topic_id
Спасибо Mike - подсказал то что и было нужно. Итоговый запрос конечно немного сложнее, но основа легла на ура.
SELECT t1.parent_id, t1.id id,
t1.name,
t2.*
FROM forum_dirs t1 LEFT JOIN (
SELECT
forum_topics.title,
forum_topics.dir_id,
forum_topics.id topic_id,
forum_topics.date topic_date,
forum_topics.user_id topic_user_id,
users.logo topic_user_logo,
users.name topic_user_name,
users.login topic_user_login,
t3.*
FROM forum_topics LEFT JOIN users ON users.id=forum_topics.user_id
LEFT JOIN (
SELECT
forum_msgs.text,
forum_msgs.user_id msg_user_id,
forum_msgs.date msg_date,
forum_msgs.topic_id msg_topic_id,
users.logo msg_user_logo,
users.name msg_user_name,
users.login msg_user_login
FROM forum_msgs
LEFT JOIN users ON users.id=forum_msgs.user_id
WHERE (topic_id, date) IN (SELECT topic_id, max(date) FROM forum_msgs GROUP BY topic_id)
) t3 ON t3.msg_topic_id=forum_topics.id
WHERE (dir_id, date) IN (SELECT dir_id, max(date) FROM forum_topics GROUP BY dir_id)
) t2 ON t2.dir_id=t1.id
Наверное потому, что во втором случае вы делаете выборку из выборки. выборка идет опять в том порядке, как удобно оптимизатору. А почему не использовать group by в том же выражении, что и order by? Они вполне могут сосуществовать в одной выборке.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Мне надо выводить числа типа double в файл, а также читать их оттудаОднако при попытке чтения выведенных чисел у меня возникает ошибка:
Подписываю текстовое сообщение на закрытом RSA ключе, потом перевожу эту подпись в Base64, потом обратно и проверяю её на открытом ключеПочему...