Php 按两个字段排序
下面的输入通过名为“datesubmitted”的时间戳字段按相反的时间顺序对提交进行排序。此字段位于名为“submission”的MySQL表中 另一个MySQL表“comment”有另一个称为“datecommented”的时间戳字段 每个提交只有一个“datesubmitted”,但可以有多个注释,每个注释都有不同的“datecommented” 如何按“datesubmitted”和每个人最后的“datecommented”对提交的内容进行排序?换句话说,我希望列表顶部显示最近提交的条目或带有最近注释的条目,以最近发生的为准 提前感谢, 约翰Php 按两个字段排序,php,mysql,Php,Mysql,下面的输入通过名为“datesubmitted”的时间戳字段按相反的时间顺序对提交进行排序。此字段位于名为“submission”的MySQL表中 另一个MySQL表“comment”有另一个称为“datecommented”的时间戳字段 每个提交只有一个“datesubmitted”,但可以有多个注释,每个注释都有不同的“datecommented” 如何按“datesubmitted”和每个人最后的“datecommented”对提交的内容进行排序?换句话说,我希望列表顶部显示最近提交的条目
$sqlStr=“选择
s、 罗吉尼
,s.title
,s.url
,s.displayurl
,s.date提交
,l.username
,s.submissionid
,COUNT(c.commentid)countComments
从…起
意见书
内部的
参加
登录名l
在…上
s、 loginid=l.loginid
左外
参加
评论c
在…上
s、 submissionid=c.submissionid
团体
通过
s、 提交人
命令
通过
s、 提交日期描述
极限
10";
$tzFrom=新日期时区(“美国/纽约”);
$tzTo=新日期时区(“美国/凤凰城”);
//echo$dt->格式(日期\u RFC822);
$result=mysql\u查询($sqlStr);
$arr=array();
回声“;
而($row=mysql\u fetch\u数组($result)){
$dt=新日期时间($row[“datesubmitted”],$tzFrom);
$dt->setTimezone($tzTo);
回声';
回显'.$row[“displayurl”].';
回声';
回声';
echo“提交人在.$dt->格式('F j,Y&\nb\sp&\nb\sp g:ia');
回声';
回声';
回声';
回声';
}
回声“;
您可以通过用逗号分隔多列来排序。所以你可以按s.datesubmitted DESC,c.datecommented DESC下单。此外,如果两个方向相同(asc/desc),您可以在结尾说一次。查询将按列表中的第一列排序,然后按下一列排序,以便分组排序 听起来你想有条件地订购,这取决于哪个日期更高。包括此订购人
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
ORDER BY CASE WHEN datesubmitted > datecommented
THEN datesubmitted
ELSE datecommented END DESC
您缺少
左侧
和外部
之间的换行符;-)我试过了,但没用。但我感谢你为我所做的努力。
ORDER BY CASE WHEN datesubmitted > datecommented
THEN datesubmitted
ELSE datecommented END DESC