我正在开发一个允许用户创建事件并让其他用户回复这些事件的程序。在获取这些事件时,我希望能够根据参与者收到 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
);
在想要按用户回复的时间进行排序之前,我一直在使用这个查询,而且效果很好。
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;
但是,在两个嵌套的 SELECT 语句中添加一个 ORDER BY last updated
子句似乎没有任何效果。这是 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;
关于mysql - 如何在 MySQL 中排序子查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45553395/