Форум программистов, компьютерный форум, киберфорум
MySQL
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
0 / 0 / 0
Регистрация: 01.04.2014
Сообщений: 9
1

Можно ли сделать такую выборку одним запросом или как их обьеденить?

02.04.2014, 02:47. Показов 1379. Ответов 1
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
В продолжении темы Выборка уникальных записей с максимальными датами, и затем выборка по найденому.

Есть у меня таблицы: Message(id, fromUserId, toUserId, sendDate) и User(id, login), нужно было выбрать пользователей у которых есть переписка сообщениями например с пользователем с id=3, при этом они должны быть упорядочены по убыванию, в зависимости от того кто последний присылал сообщение.
Это классно выполняет этот запрос:
SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
SET @id=3;
 
SELECT g.id, u.login, MAX(g.sendDate) last_sendDate
FROM(
    SELECT m.toUserId AS id, MAX(m.sendDate) sendDate
        FROM Message m
        WHERE m.fromUserId = @id
        GROUP BY m.toUserId
    UNION ALL
    SELECT n.fromUserId AS id, MAX(n.sendDate)
        FROM Message n
        WHERE n.toUserId = @id
        GROUP BY n.fromUserId
    )g
NATURAL JOIN USER u
 
GROUP BY g.id
ORDER BY last_sendDate DESC;
Но теперь встала задача получать в итоге еще и столбец с количеством сообщений в переписке.
Отдельно можно подсчитать вот таким запросом:
SQL
1
2
3
4
5
6
7
8
9
SELECT user_id, COUNT(*) num_mes
FROM
(
  (SELECT `fromUserId` AS user_id, sendDate FROM `Message` WHERE `toUserId`=@id)
    UNION
  (SELECT `toUserId` AS user_id, sendDate FROM `Message` WHERE `fromUserId`=@id)
    ORDER BY `sendDate` DESC
) AS m
GROUP BY user_id
Реально ли сделать это в одном запросе? Или как их объединить можно?
То есть нужно теперь, что бы в результате первого запроса выводился еще и столбец кол-ва сообщений отправленных пользователем с g.id к заданому (@id=3).
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.04.2014, 02:47
Ответы с готовыми решениями:

Как сделать такую выборку?
Добрый день! Есть большая база Access, нужно отобрать из всех записей те, в которых в MEMO поле...

Как сделать выборку из таблицы которая формируется запросом
Здравствуйте, мне нужно выбрать некие столбцы из двух таблиц по нескольким критериям, в результате...

Как выполнить одним запросом, или объединить запросы!?
SELECT , Дата, , sum() AS Количество_мест, sum() AS Платный_вес, INTO Адреса FROM ОТчет GROUP BY...

Как можно одним запросом редактировать предыдущую строку и добавить новый?
Как можно одним запросом редактировать предыдущую строку и добавить новый? Если можно на...

1
1313 / 945 / 144
Регистрация: 17.01.2013
Сообщений: 2,348
02.04.2014, 08:43 2
Лучший ответ Сообщение было отмечено MaksT как решение

Решение

MySQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
SELECT 
  g.id, u.login, MAX(g.sendDate) last_sendDate, 
  sum(g.qty_send) received, sum(g.qty_receive) sended
FROM(
    SELECT m.toUserId AS id, MAX(m.sendDate) sendDate, count(*) qty_send, 0 qty_receive
        FROM Message m
        WHERE m.fromUserId = 3
        GROUP BY m.toUserId
    UNION ALL
    SELECT n.fromUserId AS id, MAX(n.sendDate), 0, count(*)
        FROM Message n
        WHERE n.toUserId = 3
        GROUP BY n.fromUserId
    )g
JOIN USER u ON u.id=g.id
 
GROUP BY g.id
ORDER BY last_sendDate DESC;
1
02.04.2014, 08:43
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.04.2014, 08:43
Помогаю со студенческими работами здесь

Как сделать одним запросом в бд SQL чтобы сложить все столбцы?
Мне необходимо сложить все значения столбца summ. Как это сделать? это можно сделать одним запросом...

Можно ли обойтись одним запросом
Добрый вечер, помогите дописать sql , и можно ли уложится одним как-то запросом ... SELECT...

Можно ли блок кода заменить одним запросом LINQ?
Здравствуйте. Можно ли этот код: string result = ""; var vals = from val...

Можно ли выполнить одним запросом ALTER после DELETE
Здравствуйте. Порывшись в интернете, нигде не нашёл как выполнить удаление, а после него...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru