mysql - Mysql request group by 将其他结果保留在最后
问题描述
考虑以下:
CREATE TABLE `content` (
`idcontent` int(11) NOT NULL,
`name` varchar(100) NOT NULL,
`creation_date` date DEFAULT NULL,
`user_id` int(11) NOT NULL
) ;
CREATE TABLE `editor` (
`ideditor` int(11) NOT NULL,
`name` varchar(100) NOT NULL,
`plan` int(11) NOT NULL DEFAULT '1'
) ;
CREATE TABLE `user` (
`id` int(11) NOT NULL,
`name` varchar(100) NOT NULL,
`editor_ideditor` int(11) DEFAULT NULL
) ;
CREATE TABLE `plan` (
`id` int(11) NOT NULL,
`name` varchar(100) NOT NULL
) ;
ALTER TABLE `plan`
ADD PRIMARY KEY (`id`);
ALTER TABLE `plan`
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=5;
ALTER TABLE `content`
ADD PRIMARY KEY (`idcontent`),
ADD UNIQUE KEY `idcontent_UNIQUE` (`idcontent`),
ADD KEY `user_id` (`user_id`);
--
-- Index pour la table `editor`
--
ALTER TABLE `editor`
ADD PRIMARY KEY (`ideditor`),
ADD UNIQUE KEY `ideditor_UNIQUE` (`ideditor`);
--
-- Index pour la table `user`
--
ALTER TABLE `user`
ADD PRIMARY KEY (`id`),
ADD UNIQUE KEY `iduser_UNIQUE` (`id`),
ADD KEY `fk_user_editor1_idx1` (`editor_ideditor`);
--
-- AUTO_INCREMENT pour les tables déchargées
--
--
-- AUTO_INCREMENT pour la table `content`
--
ALTER TABLE `content`
MODIFY `idcontent` int(11) NOT NULL AUTO_INCREMENT;
--
-- AUTO_INCREMENT pour la table `editor`
--
ALTER TABLE `editor`
MODIFY `ideditor` int(11) NOT NULL AUTO_INCREMENT;
--
-- AUTO_INCREMENT pour la table `user`
--
ALTER TABLE `user`
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;
--
-- Contraintes pour les tables déchargées
--
--
-- Contraintes pour la table `content`
--
ALTER TABLE `content`
ADD CONSTRAINT `FK_userId_inContent` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`) ON DELETE CASCADE ON UPDATE CASCADE;
--
-- Contraintes pour la table `user`
--
ALTER TABLE `user`
ADD CONSTRAINT `fk_user_editor1_idx1` FOREIGN KEY (`editor_ideditor`) REFERENCES `editor` (`ideditor`);
ALTER TABLE `editor`
ADD CONSTRAINT `editor_ibfk_1` FOREIGN KEY (`plan`) REFERENCES `plan` (`id`);
INSERT INTO `plan` (`id`, `name`) VALUES
(1, 'free'),
(2, 'premium'),
(3, 'gold');
INSERT INTO `editor` (`ideditor`, `name`, `plan` ) VALUES
(1, 'editor_free',1),
(2, 'editor_premium',2),
(3, 'editor_gold1',3),
(4, 'editor_gold2',3);
INSERT INTO `user` (`id`,`name`, `editor_ideditor`) VALUES
(1, 'user_free',1),
(2, 'user_premium',2),
(3, 'user_gold1',3),
(4, 'user_gold2',4);
INSERT INTO `content` (`idcontent`, `name`,`creation_date`,`user_id`) VALUES
(1, 'content_free','2020-12-10',1),
(2, 'content_premium','2020-12-10',2),
(3, 'content1_gold_user_gold1','2020-12-10',3),
(4, 'content2_gold_user_gold1','2020-12-09',3),
(5, 'content1_golduser_gold2','2020-12-08',4),
(6, 'content2_golduser_gold2','2020-12-07',4);
http://sqlfiddle.com/#!9/b6f820/1
我有这些表格: 内容是由拥有编辑(公司)的用户创建的,该编辑器(公司)有一个计划(免费、高级等)
我需要按计划获取所有内容,然后是creation_date,但首先由编辑器排序,然后是所有其他内容。
所以它几乎可以与 group by 一起使用,但它不是因为我没有得到剩余的内容:
select *
from content
LEFT JOIN user ON content.user_id = user.id
LEFT JOIN editor ON user.editor_ideditor = editor.ideditor
group by editor.ideditor
order by editor.plan DESC, content.creation_date DESC
我想给他们这个订单:
3
5
2
1
4
6
我只得到 3 5 2 1
解决方案
推荐阅读
- typescript - ts-jest:模拟内部模块
- linux - 更新软件包时如何修复 GLib 错误?
- javascript - 在 r 中限制输入 selectizeInput 的组合闪亮
- django - Django:找不到带有参数'(3,'')'的'topic_posts'的反向
- php - 如何使用搜索数据过滤日期范围内的数据?
- excel - 获取每个不同单元格值的最大值
- java - 使用一个流从列表中删除奇数,如果它们的总和是奇数,如果总和是偶数,则删除偶数
- r - 如何用前一列中的变量替换变量
- localization - 如何以最佳方式在 SPA 中构建翻译文件?
- node.js - Gitlab CI 未显示 Cobertura 代码覆盖率可视化