2016-12-29 63 views
1

嗨,大家好,当谈到查询的时候,我有些不知所措。我有一个喜欢评论系统。我想要做的是获得最喜欢的最古老的评论的ID。如何获取SQL中最早日期和最多数量的评论的ID?

这是我的桌子。

CREATE TABLE `wallcomments` (
    `c_id` int(11) NOT NULL, 
    `parent_id` bigint(20) NOT NULL, 
    `userid` int(11) NOT NULL, 
    `comments` text NOT NULL, 
    `date_created` int(11) NOT NULL, 
    `post_id` bigint(20) NOT NULL, 
    `for_image` tinyint(1) NOT NULL DEFAULT '0' COMMENT 'no=post, yes=imagePoPup', 
    `clikes` mediumint(6) NOT NULL, 
    `uip` char(30) NOT NULL, 
    `tagedpersons` mediumtext NOT NULL, 
    `comment_image` varchar(255) NOT NULL 
) ENGINE=MyISAM DEFAULT CHARSET=latin1; 

这是我的PHP函数强大的文本

public function GetMostLovedComments($CommentPostID) 
{ 
    global $DBConnection; 

    $cond = ''; 
    $cond = " AND wallcomments.parent_id = 0"; // only selects comments and not replies 

    $query_pc = "SELECT c_id, MAX(clikes) AS max 
       FROM wallcomments 
       WHERE post_id = '.$CommentPostID. $cond .'"; 

    $result_pc = mysqli_query($DBConnection, $query_pc); 
    $row_pc = mysqli_fetch_array($result_pc); 
    $most_likes = $row_pc['max']; 
    $cc_id = $row_pc['c_id']; 

    $query = "SELECT date_created, MAX(date_created) AS min 
       FROM wallcomments 
       WHERE post_id = '.$CommentPostID. $cond .'"; 

    $result = mysqli_query($DBConnection, $query); 
    $row = mysqli_fetch_array($result); 
    $oldest_c = $row['min']; 

    $query3 = "SELECT c_id 
       FROM wallcomments 
       WHERE date_created = '.$oldest_c'"; 

    $result3 = mysqli_query($DBConnection, $query3); 
    $row3 = mysqli_fetch_array($result3); 
    $com_id = $row3['c_id']; 

    return $oldest_c; 
} 
+1

最clikes的wallcomment所以做你想要的一个拥有最高的喜欢度,如果连在一起,则使用最早的日期...或者你想要最古老的日期,并且如果并列,可以获得最喜欢的日期?你不能做的是获得最喜欢的那个,如果它不是最古老的,这是我认为你所要求的。 – xQbert

+0

你将不得不为100个或更多喜欢的最古老的评论选择一个范围。 – jmarkmurphy

+0

和max(date_created)会返回最新的一个,而不是最早的...也许您希望min(date_Created)为min。 – xQbert

回答

0

取决于你的意思......

返回从最早的日期wallcomment的C_ID和何时缚住返回一个与higest clikes

SELECT wc.c_id 
FROM wallcomments wc 
INNER JOIN (SELECT min(date_created) MDC 
      FROM wallcomments 
      WHERE post_id = YourConditionVariable) wc2 
on WC.date_created = wc2.mdc 
WHERE post_id = YourConditionVariable 
ORDER BY clikes desc 
LIMIT 1 

返回的C_ID与何时缚住返回一个最旧的DATE_CREATED

SELECT wc.c_id 
FROM wallcomments wc 
INNER JOIN (SELECT max(clikes) MDC 
      FROM wallcomments 
      WHERE post_id = YourConditionVariable) wc2 
on WC.clikes = wc2.mdc 
WHERE post_id = YourConditionVariable 
ORDER BY date_created asc 
LIMIT 1 
+0

谢谢你的答案xQbert,我试过你的代码,但函数只返回“1”...我不知道我做错了什么。 –

+0

by“1”您的意思是1条记录?这就是限制,它只返回1条记录。还是只返回两个“1”的wc.C_ID?我想我不知道你想要完成什么。 – xQbert

+0

我的歉意,第二个代码为我工作。非常感谢。 –

相关问题