【发布时间】:2019-07-26 10:33:00
【问题描述】:
我正在运行相当于 MySQL 5.5 的 MariaDB 5.5。
我有以下测试数据。
CREATE TABLE `dev_test` (
`id` INT NOT NULL AUTO_INCREMENT ,
`date` DATE NOT NULL ,
`venue` INT NOT NULL ,
PRIMARY KEY (`id`)
) ENGINE = InnoDB;
INSERT INTO `dev_test` (`id`, `date`, `venue`) VALUES (NULL, '2019-08-01', '2'),
(NULL, '2019-09-01', '1'), (NULL, '2019-10-01', '2');
INSERT INTO `dev_test` (`id`, `date`, `venue`) VALUES (NULL, '2019-11-01', '3');
我希望对场地和活动进行排序,以便首先安排下一个活动的场地,然后是该场地的所有其他活动。然后是下一个尚未全部就绪的事件。
所以我想要这些数据:
Event ID 1 - 2019-08-01 Venue 2
Event ID 3 - 2019-10-01 Venue 2
Event ID 2 - 2019-09-01 Venue 1
Event ID 4 - 2019-11-01 Venue 3
我可以按任意顺序抓取所有事件,然后使用 PHP 对其进行排序。
或者我可以选择
SELECT venue FROM `dev_test` GROUP BY venue ORDER BY date;
然后使用 PHP 获取一个按日期排序的场地
SELECT * FROM `dev_test` WHERE venue = 2 ORDER BY date;
SELECT * FROM `dev_test` WHERE venue = 1 ORDER BY date;
但是在纯 MySQL (MariaDB) 中是否有一个很好的方法来做到这一点?
也许某种方式可以为所有场地提供与该场地最早日期相同的临时日期列?
还是我应该只用 PHP 来做?
对不起标题戈尔。我试图使“按日期排序事件,同时将事件保持在同一位置”更通用。
【问题讨论】:
-
@Strawberry 你能扩展一下吗?
-
日期是唯一的吗?
-
@strawberry 不能保证唯一的日期。但返回哪个订单重复日期并不重要。