![]() |
Модераторы: skyboy |
![]() ![]() ![]() |
|
NCIAC |
|
||||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 55 Регистрация: 7.2.2009 Репутация: нет Всего: нет |
Доброго времени суток!
Есть задача: в личном кабинете пользователь может зайти на страницу СООБЩЕНИЯ и должен увидеть сообщения в виде слудюющей таблицы: Контакт Сообщений Непрочитанные Последнее Последнее сообщение _________________________________________________________________________________________________ Алексей 6 есть 11.12.2009 Вам пишет Алексей смоленский. Рад соо... Андрей 1 нет 10.12.2008 Уважаемый Андрей, не могли бы вы быть так ... Катерина 8 есть 12.08.2009 Я самая самая красивая и умная на всем б... Контакт - это имя контакта, который написал сообщение мне или которому написал сообщение я. В этом и возникла сложность, если бы сообщения только приходили ко мне, то можно было скруппировать сообщения по адресату, а здесь нужно выводить имя контакта. с которым я контактирую. Например второе сообщение в примере я написал Андрею, но выводится не моё имя, а Андрея. Таблица сообщений:
from_user - id контакта, от кого письмо. to_user - id контакта. кому письмо. read - если еденица, то сообщение прочитано, если 0 - не прочитано. Пример заполнения:
Имя контакта берётся из таблицы users:
Хочется получить данный результат за один запрос. Подскажите, не хочется реализовывать это посредствоь php. |
||||||
|
|||||||
skyboy |
|
|||
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 41 Всего: 260 |
делается два одинаковых по списку возвращаемых полей запроса. и объединяются в один через оператор UNION. Сортируется уже объединенный запрос.
Добавлено через 32 секунды даже лучше "union all" в твоем случае. |
|||
|
||||
Aramor |
|
|||
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 24.9.2009 Репутация: нет Всего: нет |
del
Это сообщение отредактировал(а) Aramor - 11.12.2009, 20:33 |
|||
|
||||
NCIAC |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 55 Регистрация: 7.2.2009 Репутация: нет Всего: нет |
Основная сложность не в том, как объеденить две таблицы, а в том, как сгруппировать таблицу, чтобы вибирались уникальные id контактов. То есть, если в таблице есть такие записи:
from to 180 25 180 25 180 31 180 37 37 180 45 180 , то должны выбраться слкдующие значения: 25,31,37,45 и соответсвенно должно быть подсчитано количество писем в переписке с каждым контактом 25(2), 31(1), 37(2), 45(1) |
|||
|
||||
Akina |
|
|||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 106 Всего: 454 |
Подзапрос
Его join с таблицей для получения остальных данных. -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
NCIAC |
|
||||||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 55 Регистрация: 7.2.2009 Репутация: нет Всего: нет |
к соему великому сожалению этот запрос работает неправильно. Таблица заполнена следущими данными:
делаю запрос:
и получаю результат: from_user to_user cnt last_message cnt_not_read --------------------------------------------------------------------------------------------------- 21 180 2 07.12.2009 23:42 2 25 180 1 11.12.2009 15:33 1 30 180 1 06.12.2009 23:42 1 180 25 2 09.12.2009 23:42 0 180 26 1 08.12.2009 23:42 1 Это сообщение отредактировал(а) NCIAC - 12.12.2009, 06:16 |
||||||||
|
|||||||||
NCIAC |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 55 Регистрация: 7.2.2009 Репутация: нет Всего: нет |
Написал вот таткой запрос, но результат такой же. как и у предыдущего
не понимаю как логически это релизовать |
|||
|
||||
Akina |
|
|||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 106 Всего: 454 |
А потому что не думаешь ни хрена... а повторять влоб обычно бессмысленно. Тем более что тебе явно намякнуто, что надо дорабатывать. Если ты в поле `read`кладёшь 0 или 1 - почему оставил case when TRUE? -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
NCIAC |
|
||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 55 Регистрация: 7.2.2009 Репутация: нет Всего: нет |
Написал вот такой запрос:
Но есть маленькая загвоздка: не могу понять, как взять текст именно последнего собщения данного контакта.
т.е. дата берётся последнего сообщения, а текст сообщения первого попавшегося. А нужно. чтобы текст брался того сообщения, которое последнее. Подскажиет пожалуйсто. |
||||
|
|||||
Akina |
|
|||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 106 Всего: 454 |
Сначала доработай мой подзапрос - чтобы он давал строго то что нужно.
Потом inner join его по всем совпадающим полям с исходной таблицей - и бери из неё недостающие поля. -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
![]() ![]() ![]() |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | MySQL | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |