Доброго времени суток уважаемые форумчане! В программировании MySQL совсем новичок. Нужно написать SQL-запрос к СУБД MySQL, который выбрал из базы данных пользователей и их последние комментарии (по одному комментарию на каждого пользователя), при следующих таблицах:
CREATE TABLE `db_user`
( `db_user_id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`name` VARCHAR(255) NOT NULL,
`balance` DECIMAL(10,2) NOT NULL,
PRIMARY KEY (`db_user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;
CREATE TABLE `db_comment` (
`db_comment_id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`db_user_id` INT(10) UNSIGNED NOT NULL,
`text` text NOT NULL,
PRIMARY KEY (`db_comment_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;
Запрос, который мне удалось написать:
SELECT MAX(com.text), us.name FROM `db_comment` AS com, `db_user` AS us ;
WHERE com.db_user_id=us.db_user_id ORDER com.text;
не учитывает ситуацию, когда есть пользователи, у которых комментариев нет вообще - они не выведутся, а должны. Помогите пожалуйста исправить.
Вам понадобится MAX(), но применить его надо к db_comment_id
— это лучший кандидат на определение "последнего комментария" в вашей структуре, где нет поля с датой-временем.
Если сгруппировать по пользователю (т.е. по db_user_id
), то MAX(db_comment_id
) вычислит соответственно последние комментарии каждого пользователя, если они писали комментарии.
Чтобы учесть возможность отсутствия комментария, используйте LEFT JOIN, а чтобы обойти любимую новичками ошибку группировки, примените JOIN дважды: один раз для вычисления MAX(), второй для получения любых полей из таблицы комментариев.
SELECT u.db_user_id, u.name, u.balance, c2.text FROM db_user AS u
LEFT JOIN (
SELECT db_user_id, MAX(db_comment_id) AS db_comment_id
FROM db_comment
GROUP BY db_user_id
) AS c1 ON u.db_user_id = c1.db_user_id
LEFT JOIN db_comment AS c2 ON c2.db_comment_id = c1.db_comment_id
ORDER BY u.name ASC
http://sqlfiddle.com/#!9/f8992d/46
Такой:
SELECT users.*, comments.text FROM db_user AS users
LEFT JOIN
(SELECT * FROM
(SELECT * FROM
db_comment AS c
ORDER BY c.db_comment_id DESC
) AS cs
GROUP BY db_user_id DESC
) AS comments
ON comments.db_user_id = users.db_user_id
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Можно ли это сделать с помощью LIMIT? Или можно ли извлечь запись у которой самый большой id, так как у каждой строки он автоинкемируемый, а значит...
Всем добра и мира! Знаете в чем может быть ошибка? Функция editPrompt при вызывании выдает undefined
Делаю валидацию полей в VueПодключен bootstrap-vue, который имеет встроенную кривую валидацию, которая работает не так как нужно, то есть высвечивает...