2011-06-07 71 views
0

比方说,有10个职位,而我已经派人到职位的7响应。当其他用户发送回复帖子时,系统必须检查并告诉我是否有任何帖子收到新回复。系统不会检查其他3个帖子,它会检查我仅回复的7个帖子。如何检查用户之前回复的帖子是否收到新回复?

第1步 - SELECT post-id FROM responsesLive WHERE username='{$myUsername}'; //这会输出很多重复的-ID后,如果我发送多个响应到特定职位。如何防止重复的后ID?

第2步 - 我得到这个职位的编号,7后,我需要在每个7个帖子的最后响应响应ID。我是否需要使用数组来存储7个后ID?或者,我只需要编写,而像以前的查询循环中此查询:

$query3 = "SELECT id FROM responseslive WHERE username='{$myUsername}'"; 
$result3 = mysql_query($query3,$connection) or die (mysql_error()); 
confirm_query($result3); 
while($postinfo = mysql_fetch_array($result3)){ 
    $post-id= $postinfo['post-id']; 

    $query4 = "SELECT rsp-id FROM responseslive WHERE postid='{$post-id}' ORDER BY rsp-id DESC LIMIT 1"; 
    $result4 = mysql_query($query4,$connection) or die (mysql_error()); 
    confirm_query($result3); 
    while($rspinfo = mysql_fetch_array($result4)){ 
     $last-rsp-id= $rspinfo['rsp-id']; 
    } 

} 

第3步 - 当时的$last-post-id比较以前$last-post-id,如果目前的$last-post-id比以前$last-post-id大,然后告诉用户有他之前回复的帖子上的新回复。

回答

1

对于步骤1:

SELECT DISTINCT post-id FROM responsesLive WHERE username='{$myUsername}'; 

这将只返回不同的IDS交。

对于第2步:

SELECT 
    postid, max(rsp-id) 
FROM 
    responseslive 
WHERE postid in (
    SELECT DISTINCT post-id FROM responsesLive WHERE username='{$myUsername}'); 
GROUP BY 
    postid 

这会给你和阵列的帖子ID和他们最后的答复的ID。

+0

哇,看起来非常简单,漂亮的编码。非常感谢。 – zac1987 2011-06-07 15:54:23

+0

如果我删除“GROUP BY postid”,可以吗?人们说当你有或者可以使用GROUP BY不要使用DISTINCT,因为它会减慢查询... HTTP:如果你想删除“GROUP BY帖子ID” //forge.mysql.com/wiki/Top10SQLPerformanceTips – zac1987 2011-07-05 03:18:19

+0

那么你将不得不从SELECT删除postid。取决于您的结果中是否需要此字段。 – CristiC 2011-07-05 08:07:05

相关问题