![]() |
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]() ![]() ![]() |
|
donion |
|
||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 77 Регистрация: 18.12.2007 Где: Запорожье Репутация: нет Всего: нет |
Есть таблица пользовательских логотипов:
Есть таблица пользовательских сообщений, друг другу:
В распоряжение есть user_id, С помощью этого user_id нужно запросить из базы последнее сообщение двух людей + логотип пользователя, который принадлежит оппоненту user_id (т.е. в данном случае если user_id = 1, то пользователю с user_id - 2). Это вообще возможно сделать одним запросом? Если да, то хоть какие-то зацепки подскажите, у меня на данный момент получается 3 запроса. Это сообщение отредактировал(а) donion - 19.2.2011, 13:16 |
||||
|
|||||
patap |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 893 Регистрация: 7.5.2005 Где: Украина, Зп Репутация: 3 Всего: 40 |
можешь немного пояснить
у нас есть $user_id, который во второй таблице соответствует sender нам нужно из второй таблицы достать последнее сообщение, которое отослал sender (т.е. sender = $user_id) и из этой же строки по recipient ид достать logo из таблицы 1 (т.е. в результате логотип должен быть для юзера с ид recipient ) верно ? Добавлено @ 23:16 ну в общем, если примерно так как я описал, то вот, думаю должно сработать
Это сообщение отредактировал(а) patap - 18.2.2011, 23:17 -------------------- На боку кобура болталась, сзади шашка отцовская звякала. Впереди меня все хохотало, а позади все плакало (с) |
|||
|
||||
donion |
|
||||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 77 Регистрация: 18.12.2007 Где: Запорожье Репутация: нет Всего: нет |
Ох, действительно, самого главного не объяснил:
sender и recipient - это айди пользователей, те самые user_id. Получается, что поскольку есть только один user_id, то нужно: - найти все поля где sender(отправитель) или recipient(получатель) являются пользователем (наш user_id); - сгруппировать по последнему сообщению; - join'ом запросить логотип, c cоседней таблицы, при этом логотип должен быть не пользователя user_id, а его оппонента. Ну, это в идеале,а сейчас у меня получаются три запроса, вот они:
- так я получил массив айдишек последних диалогов, сохранил их в $ids
- так я получил все последние сообщения, в полном формате (т.е. с текстом и прочей информацией), сохранил в $rows и далее приходится делать циклические запросы к логотипам, что вообще никуда не годится. на этом этапе вычисляется айди пользователя (оппонента user_id) запросы эти типа:
p.s. немного изменил структуру таблиц, в первом сообщении. |
||||||
|
|||||||
patap |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 893 Регистрация: 7.5.2005 Где: Украина, Зп Репутация: 3 Всего: 40 |
это действительно нужно? интересует именно recipient, нужно ли делать проверку по recipient? ведь по логике, нам нужны сообщения, которые юзер отправлял... кто такой оппонет? это есть recipient? в итоге запрос должен вернуть одно сообщение, последнее? -------------------- На боку кобура болталась, сзади шашка отцовская звякала. Впереди меня все хохотало, а позади все плакало (с) |
|||
|
||||
donion |
|
||||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 77 Регистрация: 18.12.2007 Где: Запорожье Репутация: нет Всего: нет |
Да, получается, что наш user_id может быть и recipient, и sender.
оппонентом может быть и recipient, и sender. Приведу пример: - я написал сообщение другому пользователю, мой айдишник записался в базу как sender, а другого пользователя как recipient; - и наоборот, кто-то написал мне сообщение, мой айдишник записался в recipient, а id отправителя в sender; Так вот нужны все записи, где мой айди фигурирует либо в sender, либо в recipient.
В итоге должно вернуть все последние сообщения, в которых фигурировал user_id, при этом лого должен быть оппонента (того, с кем он разговаривал). |
||||||
|
|||||||
patap |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 893 Регистрация: 7.5.2005 Где: Украина, Зп Репутация: 3 Всего: 40 |
тут не совсем ясно по какому признаку возвращать последние сообщения. Сейчас возвращает все сообщения, в которых фигурировал юзер с заданным ИД. Предполагаю что нужно учитывать created, если да - то добавишь в WHERE нужное условие Добавлено через 1 минуту и 29 секунд если я что-то опять не догнал - говори) -------------------- На боку кобура болталась, сзади шашка отцовская звякала. Впереди меня все хохотало, а позади все плакало (с) |
|||
|
||||
donion |
|
||||||||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 77 Регистрация: 18.12.2007 Где: Запорожье Репутация: нет Всего: нет |
по created или pmid.
Да, но логотип все равно будет браться только по recipient, а наш оппонент может быть и sender.
Да, можно и по created, только WHERE не подойдет, оно выдаст либо последнее сообщение, либо все сообщения, в зависимости от того, что будет в WHERE условием. К примеру у нас может быть такая таблица:
Если наш user_id =1, то нам нужны 2,3,4,6 записи. при этом, нужно запросить во второй записи, логотип пользователя 2, в 3 - 3, в 4-4, в 6-5. т.е. так как нужно в условии,
|
||||||||||
|
|||||||||||
patap |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 893 Регистрация: 7.5.2005 Где: Украина, Зп Репутация: 3 Всего: 40 |
как вернуть последнее сообщение...пока нет идей это, я так понял если к примеру есть следующие данные
то нужно вернуть из этих двух сообщений одно, более позднее? -------------------- На боку кобура болталась, сзади шашка отцовская звякала. Впереди меня все хохотало, а позади все плакало (с) |
||||
|
|||||
donion |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 77 Регистрация: 18.12.2007 Где: Запорожье Репутация: нет Всего: нет |
Да, верно. За запрос - спасибо! Убирает циклические запросы и это замечательно. Вот бы еще с группировкой что-то решить. |
|||
|
||||
Photon |
|
|||
![]() Злобный программер ![]() ![]() Профиль Группа: Участник Сообщений: 282 Регистрация: 27.2.2009 Где: Таганрог Репутация: 1 Всего: 12 |
Это сообщение отредактировал(а) Photon - 22.2.2011, 23:13 -------------------- With best regards.. |
|||
|
||||
patap |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 893 Регистрация: 7.5.2005 Где: Украина, Зп Репутация: 3 Всего: 40 |
Photon, ну это ясно, там в другом причина
нужно вернуть:
Это сообщение отредактировал(а) patap - 24.2.2011, 16:02 -------------------- На боку кобура болталась, сзади шашка отцовская звякала. Впереди меня все хохотало, а позади все плакало (с) |
||||
|
|||||
patap |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 893 Регистрация: 7.5.2005 Где: Украина, Зп Репутация: 3 Всего: 40 |
думаю группировать надо по logotypes.user_id
Это сообщение отредактировал(а) patap - 24.2.2011, 18:00 -------------------- На боку кобура болталась, сзади шашка отцовская звякала. Впереди меня все хохотало, а позади все плакало (с) |
|||
|
||||
![]() ![]() ![]() |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | PHP: Базы Данных | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |