mysql对多对多关系条件进行排序

标签 mysql

我有两张 table

groups:
    id          : integer
    group_title : string

group_sessions:
    id          : integer
    group_id    : integer
    start_time  : timestamp

我需要根据最近即将举行的 session start_time对组进行排序。例如,A 组明天有下一场比赛,B 组今天有下一场比赛。那么B组应该是第一。这是我写的,但显然它不起作用

select g.id, g.group_title
from groups g
left join (
    select group_id, MIN(start_time) as min_session_time
    from group_sessions
    where start_time > now()
    group by group_id
) s on g.id = s.group_id
order by min_session_time asc

最佳答案

首先,您需要一个 INNER JOIN,而不是 LEFT JOIN。 其次,您不需要聚合,例如 MIN。

SELECT g.id, g.group_title, gs.start_time
FROM groups g
    INNER JOIN group_sessions gs ON gs.group_id = g.id
WHERE gs.start_time > NOW()
ORDER BY gs.start_time

关于mysql对多对多关系条件进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49875755/

相关文章:

MYSQL:在 CONCAT() 函数中使用列名给出语法错误 1064

php - 没有索引导出/导入 5000 万行数据库?

mysql - 在关联模型上使用 Ruby on Rails 4 中的命名范围

php - 如何回显列的名称

mysql - 使用 Memcache 设置 MySQL 5.6 失败且没有错误

java - Spring + Hibernate表未生成

php - PDO - 引号正在生成 MySQL 语法错误

mysql - 带有分数因子的评论线程

mysql - 获取两个日期之间的星期一mysql

mysql - 如何替换 MySQL 中多次出现的模式?