当我使用group by时,cdte的这个顺序有问题,顺序不是最后一个创建日期,但我认为是随机的
SELECT vedio_files.ID vedio_files.mCat, vedio_files.sCat,vedio_files.smalltitle, vcategories.Name,vcategories2.Name as subcat
FROM vedio_files
INNER JOIN `vcategories` ON vedio_files.mCat = vcategories.ID
LEFT JOIN vcategories vcategories2 ON vedio_files.sCat = vcategories2.ID
GROUP BY vedio_files.sCat ORDER BY vedio_files.cdate DESC LIMIT 10
有什么建议吗? 感谢
答案 0 :(得分:1)
正确。
最后应用ORDER BY
。 GROUP BY
折叠行后,该操作为。
行上cdate
的值是不确定的。该值来自组中的某些行,但不一定是最低的。
MySQL允许查询运行,因为GROUP BY的非标准扩展。 (其他关系数据库会抛出“不在GROUP BY中的非聚合表达式”中的错误。如果我们在sql_mode中包含ONLY_FULL_GROUP_BY
,我们可以让MySQL抛出错误。
此处记录的行为:docs
我们可以对cdate
中的每个sCat
使用内联视图至少vedio_files
,并将内联视图中的结果连接回vedio_files
以获取匹配sCat
和cdate
的行。
这样的事情:
SELECT vf.ID
, vf.mCat
, vf.sCat
, vf.smalltitle
, vc.Name
, c2.Name AS subcat
FROM ( SELECT cd.sCat
, MIN(cd.cdate) AS min_cdate
FROM vedio_files cd
GROUP
BY cd.sCat
ORDER
BY MIN(cd.cdate) DESC
LIMIT 10
) mn
JOIN vedio_files vf
ON vf.sCat = mn.sCat
AND vf.cdate = mn.min_cdate
JOIN vcategories vc
ON vf.mCat = vc.ID
LEFT
JOIN vcategories c2
ON c2.ID = vf.sCat
ORDER
BY ...
如果vedio_files
中的多行与sCat的最小日期相同,则此查询将返回所有这些行。