通过子帖子内容显示父帖子

时间:2018-07-31 05:27:04

标签: mysql

我想通过过滤子帖子/父帖子的内容来显示其子帖子中的父帖子。我有一张桌子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

表说明:

  • m_id是自动递增
  • m_parent_post_id父帖子的m_id,0表示该行是 家长帖子
  • m_topic如果为子帖子,则为null
  • m_status是父帖子的状态,如果其newreplied由用户或answered由管理员则表示。 na仅用于儿童发布。
  • 如果m_by_admin为0,则表示该行的状态,这表示用户是添加该行的用户;为1表示管理员答复,而2表示创建该消息的管理员。

所以在这里,我试图选择m_message包含 second 字符串或单词的所有消息,并且该消息(不是父ID的行)应仅由用户创建。选择后,它应仅显示其m_statusreplied的父帖子。

SELECT * FROM message where m_message LIKE '%second%' WHERE m_by_admin = 0 AND

...。不知道下一步是什么。

这将仅显示子帖子,而不显示父帖子。应该将m_id 15显示为预期输出。

 1           0               1234      t1       first..    replied      0
 5           0               2222      t2       first..    replied      2

 7           0               1111      t3       second     new          0

需要帮助。如果可能的话,任何更快的查询,我都有几百行父子帖子。

1 个答案:

答案 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);