下面的输入按反向时间顺序按名为“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>";
答案 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),你可以在最后说出一次。查询将按列表中的第一列和下一列的顺序进行排序,以便按组进行排序。