Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/241.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php MySQL选择条件帮助_Php_Mysql_Select_Conditional Statements - Fatal编程技术网

Php MySQL选择条件帮助

Php MySQL选择条件帮助,php,mysql,select,conditional-statements,Php,Mysql,Select,Conditional Statements,每个评论可以有多个回复,但无法回复回复。因此,当某人回复评论时,他们插入的行将在父ID列中具有他们回复的评论的ID 我想检索所有评论,如果评论有回复,我想检索最后一个回复 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 '

每个评论可以有多个回复,但无法回复回复。因此,当某人回复评论时,他们插入的行将在父ID列中具有他们回复的评论的ID

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

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
这可以在一个查询中实现吗?还是最好在php循环语句期间再次调用数据库,以获取对注释的最后回复

提前感谢,请原谅我的无知,因为我仍在学习。

尝试一个子选择:

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;

您可以将表连接回自身:

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;

这种方法很有效,但它不会检索最后一个回复,而总是第一个回复。例如:注释(ID 1,父ID 0,文本“Hello”)第一个回复(ID 2,父ID 1,文本“回复注释1”)第二个回复(ID 3,父ID 1,文本“回复注释1的另一个回复”),即使MAX返回3,它也返回第一个回复中的ID和文本。尝试向WHERE子句添加一个子句,将MAX()与c2.comment\u ID进行比较。
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