MySQL UNION - удаляйте дубликаты записей хорошим способом - PullRequest
0 голосов
/ 12 февраля 2019

Я использую этот SQL-код для объединения двух результатов поиска.Один с И, а другой - поиск ИЛИ.

Есть определенные результаты, которые, конечно, могут быть одинаковыми .. как в этом случае это post_id 1186. Таким образом, в результате он отображается в 2 раза.

Есть ли какой-нибудь хороший способ избавиться от дубликата.Я видел несколько решений, чтобы обернуть его в другой SELECT, но это приведет к ошибке из-за повторяющихся записей.Может быть, есть лучший способ узнать?

SELECT pt.post_text, pt.bbcode_uid, pt.post_subject, p.*, f.forum_id, f.forum_name, t.*, u.username, u.user_id, u.user_sig, u.user_sig_bbcode_uid, 1 sortby  
            FROM phpbb_forums f, phpbb_topics t, phpbb_users u, phpbb_posts p, phpbb_posts_text pt 
            WHERE p.post_id IN (1186)
                AND pt.post_id = p.post_id
                AND f.forum_id = p.forum_id
                AND p.topic_id = t.topic_id
                AND t.topic_id <> 3765
                AND p.poster_id = u.user_id

                GROUP BY t.topic_id
                UNION
                SELECT pt.post_text, pt.bbcode_uid, pt.post_subject, p.*, f.forum_id, f.forum_name, t.*, u.username, u.user_id, u.user_sig, u.user_sig_bbcode_uid, 2 sortby  
            FROM phpbb_forums f, phpbb_topics t, phpbb_users u, phpbb_posts p, phpbb_posts_text pt 
            WHERE p.post_id IN (8885, 12013, 1186, 4362, 4451, 4059, 8957, 10121, 11553, 11554, 12130, 12201, 4573, 4543, 4721, 5142, 5157, 5557, 5736, 5745, 5783, 5862, 6058, 6076, 6077, 6153, 6180, 6191, 6236, 6357, 6358, 6495, 6586, 6670, 4856, 6745, 6872, 7009, 7052, 7094, 7106, 7164, 7194, 4625, 4585, 4242, 4589, 4014, 4450, 4454, 4015, 4841, 7416, 7447, 7552, 4017, 4427, 7938, 8002, 8201, 8241, 8306, 8371, 8429, 8474, 8494, 8546, 8713, 8771, 8804, 9031, 9065, 9140, 9178, 9249, 9385, 9466, 9892, 10016, 10308, 10495, 10636, 10753, 10815, 10859, 11485, 11688, 11767, 11830, 12155, 12250)
                AND pt.post_id = p.post_id
                AND f.forum_id = p.forum_id
                AND p.topic_id = t.topic_id
                AND t.topic_id <> 3765
                AND p.poster_id = u.user_id

                GROUP BY t.topic_id ORDER BY sortby, rankscore DESC LIMIT 0, 1000
...