我想通过过滤子帖子/父帖子的内容来显示其子帖子中的父帖子。我有一张桌子message
。这就是它的样子:
m_id m_parent_post_id m_user_id m_topic m_message m_status m_by_admin
1 0 1234 t1 first.. replied 0
2 1 1234 null second.. na 0
3 1 1234 null third.. na 1
4 1 1234 null fourth.. na 0
5 0 2222 t2 first.. replied 2
6 5 2222 null second na 0
7 0 1111 t3 second new 0
表说明:
new
,replied
由用户或answered
由管理员则表示。 na仅用于儿童发布。所以在这里,我试图选择m_message
包含 second 字符串或单词的所有消息,并且该消息(不是父ID的行)应仅由用户创建。选择后,它应仅显示其m_status
为replied
的父帖子。
SELECT * FROM message where m_message LIKE '%second%' WHERE m_by_admin = 0 AND
...。不知道下一步是什么。
这将仅显示子帖子,而不显示父帖子。应该将m_id 1
和5
显示为预期输出。
1 0 1234 t1 first.. replied 0
5 0 2222 t2 first.. replied 2
7 0 1111 t3 second new 0
需要帮助。如果可能的话,任何更快的查询,我都有几百行父子帖子。
答案 0 :(得分:1)
SELECT `P`.* FROM message P WHERE
`P`.`m_id` IN (SELECT `C`.`m_parent_post_id` FROM message C
WHERE `C`.`m_message` LIKE '%second%' AND `C`.`m_by_admin` = 0)
OR (`P`.`m_message` LIKE '%second%' AND `P`.`m_by_admin` = 0 AND `P`.`m_parent_post_id` = 0);
将用户表加入为:
SELECT `P`.*, `U`.`user_id` FROM message P
JOIN user U ON (`U`.`user_id` = `P`.`m_user_id`)
WHERE `P`.`m_id` IN
(SELECT `C`.`m_parent_post_id` FROM message C
WHERE `C`.`m_message` LIKE '%second%' AND `C`.`m_by_admin` = 0)
OR (`P`.`m_message` LIKE '%second%' AND `P`.`m_by_admin` = 0 AND `P`.`m_parent_post_id` = 0);