[英]How to order a subquery in MySQL?
我正在开发一个程序,该程序允许用户创建事件,并让其他用户对这些事件进行回复。 在获取这些事件时,我希望能够按参与者接受RSVP的时间(已接受和已拒绝的参与者)进行排序。 我将用户RSVP的时间存储在数据库中。 这些是相关的表:
CREATE TABLE users (
username VARCHAR(50) NOT NULL,
server_id VARCHAR(40) NOT NULL,
role VARCHAR(10),
PRIMARY KEY (username, server_id),
FOREIGN KEY (server_id) REFERENCES servers(server_id)
ON DELETE CASCADE
);
CREATE TABLE events (
server_id VARCHAR(40) NOT NULL,
start_time DATETIME NOT NULL,
time_zone VARCHAR(5) NOT NULL,
title VARCHAR(256) NOT NULL,
description VARCHAR(1000),
PRIMARY KEY (server_id, title),
FOREIGN KEY (server_id) REFERENCES servers(server_id)
ON DELETE CASCADE
);
CREATE TABLE user_event (
username VARCHAR(50) NOT NULL,
server_id VARCHAR(40) NOT NULL,
title VARCHAR(256) NOT NULL,
attending BOOLEAN NOT NULL,
last_updated DATETIME NOT NULL,
PRIMARY KEY (username, server_id, title),
FOREIGN KEY (server_id, title) REFERENCES events(server_id, title)
ON DELETE CASCADE,
FOREIGN KEY (server_id, username) REFERENCES users(server_id, username)
ON DELETE CASCADE
);
在想按用户RSVP的时间进行排序之前,我使用的是此查询,并且效果很好。
SELECT title, description, start_time, time_zone, (
SELECT GROUP_CONCAT(DISTINCT username)
FROM user_event
WHERE user_event.server_id = %s
AND user_event.title = %s
AND user_event.attending = 1)
AS accepted, (
SELECT GROUP_CONCAT(DISTINCT username)
FROM user_event
WHERE user_event.server_id = %s
AND user_event.title = %s
AND user_event.attending = 0)
AS declined
FROM events
WHERE server_id = %s
AND title = %s;
但是,将ORDER BY last updated
子句添加到两个嵌套的SELECT语句中似乎没有任何效果。 这是MySQL的局限性吗,还是还有一种方法可以做到这一点?
您可能希望在GROUP_CONCAT
ORDER BY
:
SELECT title, description, start_time, time_zone, (
SELECT GROUP_CONCAT(DISTINCT username ORDER BY last updated)
FROM user_event
WHERE user_event.server_id = %s
AND user_event.title = %s
AND user_event.attending = 1)
AS accepted, (
SELECT GROUP_CONCAT(DISTINCT username ORDER BY last updated)
FROM user_event
WHERE user_event.server_id = %s
AND user_event.title = %s
AND user_event.attending = 0)
AS declined
FROM events
WHERE server_id = %s
AND title = %s;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.