Моя проблема более ясна на этом посту: Select all categories with latest post, user, and topic informationРезультат запроса MySQL колеблется
----------------------------- -------------
У меня есть запрос, который вытаскивает список категорий для моего форума вместе с последним сообщением в этой категории. Результаты возвращаются, как ожидалось, за исключением того, что информация sub_post, которая вытягивается в LEFT JOIN fp1, изменяется, если вы выполняете запрос несколько раз.
Я впервые заметил эту проблему при просмотре моей веб-страницы и обновлении несколько раз. Сообщение, которое он вытаскивает, колеблется между 3 сообщениями. Я не уверен, как это возможно, если в запросе нет чего-то неправильного.
Пожалуйста, взгляните на мой запрос ниже и дайте мне знать, есть ли что-то, что я делаю неправильно, что может объяснить это странное поведение.
Cheers.
SELECT fc1.id AS cat_id, fc1.cat_name AS cat_name,
fc1.cat_description AS cat_description, fc1.cat_views as cat_views, fp1.*
FROM forum_categories as fc1
LEFT JOIN (SELECT fp2.id AS sub_post_id,
fp2.post_date as sub_post_date,
fp2.post_topic as sub_post_topic,
u2.id as sub_user_id, u2.username as sub_username,
ft2.topic_subject as sub_topic_subject, ft2.topic_cat as sub_topic_cat
FROM forum_posts as fp2
LEFT JOIN users as u2 on fp2.post_by = u2.id
LEFT JOIN forum_topics as ft2 on ft2.id = fp2.post_topic
LEFT JOIN forum_categories as fcats on fcats.id = ft2.topic_cat
ORDER BY fp2.id DESC)
as fp1 on fp1.sub_topic_cat = fc1.id
GROUP BY fc1.id;
EXPLAIN SELECT:
+----+-------------+------------+--------+-------------------------+-------------+---------+--------------------+------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+------------+--------+-------------------------+-------------+---------+--------------------+------+-------------+
| 1 | PRIMARY | fc1 | index | PRIMARY,cat_name_unique | PRIMARY | 8 | NULL | 3 | Using where |
| 1 | PRIMARY | <derived2> | ref | <auto_key0> | <auto_key0> | 9 | tpw.fc1.id | 9 | NULL |
| 2 | DERIVED | fp2 | index | NULL | PRIMARY | 8 | NULL | 92 | NULL |
| 2 | DERIVED | u2 | eq_ref | PRIMARY | PRIMARY | 8 | tpw.fp2.post_by | 1 | NULL |
| 2 | DERIVED | ft2 | eq_ref | PRIMARY | PRIMARY | 8 | tpw.fp2.post_topic | 1 | NULL |
| 2 | DERIVED | fcats | eq_ref | PRIMARY | PRIMARY | 8 | tpw.ft2.topic_cat | 1 | Using index |
+----+-------------+------------+--------+-------------------------+-------------+---------+--------------------+------+-------------+
У меня есть 3 таблицы: forums_categories, forums_topics и forums_posts. Я пытаюсь перечислить категории вместе с последним сообщением в этой категории. Форум forums_post связан с forum_topics по post_topic, а forum_topics связан с topic_categories с topic_cat.
При использовании 'GROUP BY', он просто выбирает случайную строку из группы. – Barmar
Если вы хотите получить первую или последнюю строку в группе, используйте http: // stackoverflow.com/questions/1313120/retrieve-the-last-record-in-each-group – Barmar
Не уверен, но почему бы не так: выберите «ANY_COL» из категории слева слева. Включите any_condition (добавьте больше левых соединений в соответствии с требованиями) потому что в нашем случае наша главная цель - выбрать пост, а не категории – parveen