【问题标题】:MySQL SELECT with a condition help带有条件帮助的 MySQL SELECT
【发布时间】:2010-11-01 21:25:10
【问题描述】:
CREATE TABLE `comments` (
  `comment_id` int(11) NOT NULL AUTO_INCREMENT,
  `comment_parent_id` int(11) NOT NULL DEFAULT '0',
  `user_id` int(11) NOT NULL DEFAULT '0',
  `comment_text` varchar(200) NOT NULL DEFAULT '',
  `comment_created` int(20) NOT NULL DEFAULT '0',
  `comment_updated` int(20) NOT NULL DEFAULT '0',
  `comment_replies_count` int(11) NOT NULL DEFAULT '0',
  PRIMARY KEY (`comment_id`)
) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=latin1

每个评论可以有多个回复,但是,回复不能被回复。因此,当有人回复评论时,他们插入的行将在父 ID 列中包含他们回复的评论的 ID。

我想检索所有的 cmets,如果评论有回复,我想检索最后一个回复。

SELECT c1.* 
FROM comments c1 
WHERE comment_parent_id = '0' 
ORDER BY comment_created DESC;

So if c1.comment_replies_count > 0 I would like to... 

SELECT c2.* 
FROM comments c2 
WHERE comment_parent_id = c1.comment_id 
ORDER BY comment_created DESC Limit 1;

这可以在 1 个查询中实现吗?还是最好在 php 循环语句期间再次调用数据库以获取对评论的最后回复?

先谢谢了,请原谅我的无知,因为我还在学习。

【问题讨论】:

    标签: php mysql select conditional-statements


    【解决方案1】:

    您可以将表格重新连接到自身:

    SELECT c1.*, c2.*, MAX(c2.comment_id)
    FROM comments c1 LEFT JOIN comments c2 ON c1.comment_id = c2.comment_parent_id
    WHERE c1.comment_parent_id = '0' 
    GROUP BY c1.comment_id
    ORDER BY c1.comment_created DESC
    

    【讨论】:

    • 这有点工作,但它不是检索最后一个回复 - 总是第一个。例如:评论(ID 1,父ID 0,文本“Hello”)第一个回复(ID 2,父ID 1,文本“回复评论1”)第二个回复(ID 3,父ID 1,文本“另一个回复评论1") 即使 MAX 返回 3,它也会返回第一个回复的 ID 和文本。
    • 尝试在 WHERE 子句中添加一个子句,将 MAX() 与 c2.comment_id 进行比较。
    【解决方案2】:

    尝试子选择:

    SELECT * FROM comments WHERE comment_parent_id in (
    SELECT c1.comment_id 
    FROM comments c1 
    WHERE c1.comment_parent_id = '0' 
    AND c1.comment_replies_count > 0
    ORDER BY comment_created DESC)
    ORDER BY comment_created DESC Limit 1;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-06-30
      • 2011-02-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-21
      • 1970-01-01
      相关资源
      最近更新 更多