SQL запрос (связь таблиц) - MySQL

Узнай цену своей работы

Формулировка задачи:

Здравствуйте

, не могу сообразить, как составить запрос. Есть 2 таблицы:
Листинг программы
  1. CREATE TABLE `users` (
  2. `user_id` INT(11) NOT NULL AUTO_INCREMENT,
  3. `user_name` VARCHAR(45) NOT NULL,
  4. PRIMARY KEY (`user_id`)
  5. ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=latin1
  6. CREATE TABLE `events` (
  7. `event_id` INT(11) NOT NULL AUTO_INCREMENT,
  8. `event_name` VARCHAR(45) NOT NULL,
  9. `user_id` INT(11) DEFAULT NULL,
  10. PRIMARY KEY (`event_id`),
  11. KEY `fk_events_1_idx` (`user_id`),
  12. CONSTRAINT `fk_events_1` FOREIGN KEY (`user_id`) REFERENCES `users` (`user_id`) ON DELETE NO ACTION ON UPDATE NO ACTION
  13. ) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=latin1
Таблица пользователей, и связанная с ней по user_id таблица событий по пользователям. У одного пользователя может быть много событий или не быть не одного. Нужно вывести ВСЕХ пользователей, и ТОЛЬКО ПОСЛЕДНЕЕ его событие. Т.е. за основу можно взять простой запрос:
Листинг программы
  1. SELECT * FROM test.users
  2. LEFT JOIN `events` ON events.user_id=users.user_id
и как-то добавить сюда условие MAX(event_id), потому что этот запрос выводит одного пользователя столько раз сколько у него событий.

Буду благодарен за любую подсказку.

Решение задачи: «SQL запрос (связь таблиц)»

textual
Листинг программы
  1. SELECT u.user_id, u.user_name, ee.event_name, ee.event_id FROM
  2. (
  3.     SELECT MAX(event_id) AS id, user_id, event_name
  4.     FROM events
  5.     GROUP BY user_id
  6. ) AS e
  7. INNER JOIN users u ON e.user_id = u.user_id
  8. INNER JOIN `events` ee ON ee.event_id = e.id

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 3.714 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут