按两个字段排序

时间:2010-07-26 22:41:29

标签: php mysql

下面的输入按反向时间顺序按名为“datesubmitted”的时间戳字段对提交内容进行排序。该字段位于名为“submission”的MySQL表中。

另一个MySQL表“comment”有另一个名为“datecommented”的时间戳字段。

每次提交只有一个“提交日期”但它可能有几条评论,每条评论都有不同的“日期评论”。

我如何按“datesubmitted”和每个人的最后一次“datecommented”对提交内容进行排序?换句话说,我希望此列表的顶部显示最近提交的条目或最近评论的条目,以最近发生的 most 为准。

提前致谢,

约翰

$sqlStr = "SELECT 
                s.loginid
                ,s.title
                ,s.url
                ,s.displayurl
                ,s.datesubmitted
                ,l.username
                ,s.submissionid
                ,COUNT(c.commentid) countComments
             FROM 
                 submission s
            INNER
             JOIN
                 login l
               ON
                s.loginid = l.loginid
             LEFT OUTER
             JOIN
                 comment c
                ON
                 s.submissionid = c.submissionid
             GROUP
                BY
                 s.submissionid
             ORDER  
                BY 
                 s.datesubmitted DESC
             LIMIT 
                 10";           

$tzFrom = new DateTimeZone('America/New_York'); 
$tzTo = new DateTimeZone('America/Phoenix'); 



// echo $dt->format(DATE_RFC822); 


$result = mysql_query($sqlStr);

$arr = array(); 
echo "<table class=\"samplesrec\">";
while ($row = mysql_fetch_array($result)) { 
    $dt = new DateTime($row["datesubmitted"], $tzFrom); 
    $dt->setTimezone($tzTo);
    echo '<tr>';
    echo '<td class="sitename1"><a href="http://www.'.$row["url"].'" TARGET="_blank">'.$row["title"].'</a>  <div class="dispurl">'.$row["displayurl"].'</div></td>';
    echo '</tr>';
    echo '<tr>';
    echo '<td class="sitename2name">Submitted by <a href="http://www...com/.../members/index.php?profile='.$row["username"].'">'.$row["username"].'</a> on '.$dt->format('F j, Y &\nb\sp &\nb\sp g:i a').'</td>';

    echo '</tr>';
    echo '<tr>';
    echo '<td class="sitename2"><a href="http://www...com/.../comments/index.php?submission='.$row["title"].'&submissionid='.$row["submissionid"].'&url='.$row["url"].'&countcomments='.$row["countComments"].'&submittor='.$row["username"].'&submissiondate='.$row["datesubmitted"].'&dispurl='.$row["displayurl"].'">'.$row["countComments"].' comments</a></td>';
    echo '</tr>';
    }
echo "</table>";    

3 个答案:

答案 0 :(得分:4)

SELECT s.loginid, s.title, s.url, s.displayurl, s.datesubmitted, l.username,
  s.submissionid, COUNT(c.commentid) countComments, 
  GREATEST(s.datesubmitted, COALESCE(MAX(c.datecommented), s.datesubmitted)) AS most_recent
FROM submission s
INNER JOIN login l ON s.loginid = l.loginid
LEFT OUTER JOIN comment c ON s.submissionid = c.submissionid
GROUP BY s.submissionid
ORDER BY most_recent DESC
LIMIT 10

答案 1 :(得分:2)

听起来你有条件地想要ORDER BY,具体取决于哪个日期更高。包含此ORDER BY

ORDER BY CASE WHEN datesubmitted > datecommented 
         THEN datesubmitted 
         ELSE datecommented END  DESC

答案 2 :(得分:0)

您可以使用逗号分隔多个列。所以你可以...... ORDER BY s.datesubmitted DESC, c.datecommented DESC。如果两个方向相同(asc / desc),你可以在最后说出一次。查询将按列表中的第一列和下一列的顺序进行排序,以便按组进行排序。