#mysql #sql
#mysql #sql
Вопрос:
Рассмотрим следующее:
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, но сначала по одному редактору, а затем все остальное содержимое.
Так что это почти работает с группой 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
Комментарии:
1. Обратите внимание, что мы прекратили писать запросы таким образом примерно в 1992 году. Приходите. ПРИСОЕДИНЯЙТЕСЬ к нам.
2. Ха-ха, да, отредактировано! 😉
3. Почему вы используете a
GROUP BY
? Как вы думаете , что это делает?4. Я знаю, что это не решение. Я использую его, чтобы сначала получить только один контент с помощью редактора.