Php MySQL,GroupBy OrderBy
你可能会问的第一个问题是,有多少分组/按顺序提问?很多这些都不符合我的具体情况。下面是我的SQL查询 目标是在$teamArr中为每个团队获取最新的媒体,以及一组唯一的ID 我面临的问题是,它不会为每一个团队获得最新的媒体,而是基于团队的顺序,即媒体独立于团队的时间 下面是MySQL命令和PHP的sprintf命令,以便于使用团队IDPhp MySQL,GroupBy OrderBy,php,mysql,group-by,sql-order-by,greatest-n-per-group,Php,Mysql,Group By,Sql Order By,Greatest N Per Group,你可能会问的第一个问题是,有多少分组/按顺序提问?很多这些都不符合我的具体情况。下面是我的SQL查询 目标是在$teamArr中为每个团队获取最新的媒体,以及一组唯一的ID 我面临的问题是,它不会为每一个团队获得最新的媒体,而是基于团队的顺序,即媒体独立于团队的时间 下面是MySQL命令和PHP的sprintf命令,以便于使用团队ID sprintf("SELECT M.*, T.name, T.has_image FROM media AS M JOIN teams A
sprintf("SELECT M.*, T.name, T.has_image
FROM media AS M
JOIN teams AS T
ON T.team_uid = M.team_uid
WHERE M.team_uid IN (%s)
GROUP BY T.team_uid
ORDER BY M.time DESC", implode(", ", $teamArr));
情景:
团队A有一个3小时前的媒体项目,团队B有两个6小时前和2天前的项目,团队C有一个9小时前的媒体项目
如果选择的顺序是团队A、C、B,那么媒体项将如下所示
TeamA 3小时前的媒体项目
TeamC 9小时前的媒体项目
TeamB 2天前的媒体项目
可能会有一些愚蠢的评论说
只需按队名订购即可!这么简单的问题。这个答案将获得大约+4票
但这显然对我毫无帮助。如果任何自然或非自然的顺序能够处理3个以上的案例,我不知道哪个团队会有最佳顺序。是否有一种方法可以在1SQL查询中实现这一点。我听说循环中的MySQL是一个糟糕的决定,因此我希望它能在1个SQL调用中工作。这种查询通常被标记为最大n个组以供将来参考 您需要每个团队的最长时间和相应的列,对吗 解决这一问题的典型方法是将要获得最大值的表左键连接到案例介质中: 这些变化: 左键将媒体连接到每个团队中,通过变量对组进行uid,使M.time
SELECT M.*, T.name, T.has_image
FROM media AS M
LEFT JOIN media AS M2 -- new: join media to itself
ON M.team_uid = M2.team_uid -- within each team_uid (GROUP BY var)
AND M.time < M2.time -- and a sort on time (ORDER BY var)
JOIN teams AS T -- same as before.
ON T.team_uid = M.team_uid
WHERE M.team_uid IN (%s)
AND M2.time IS NULL -- new: this selects the MAX M.time for each team.