Модераторы: skyboy

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> вывод сообщений 
:(
    Опции темы
Gluttton
Дата 3.9.2009, 13:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Начинающий
***


Профиль
Группа: Завсегдатай
Сообщений: 1170
Регистрация: 28.8.2008
Где: Феодосия

Репутация: 24
Всего: 54



Цитата(MrDmitry @  3.9.2009,  12:47 Найти цитируемый пост)
но такой запрос тоже не верен (((((((((


Неверен это как!? Выполняется дольше чем ожидается? Выполняется с ошибкой? Возвращает не детерминированный набор данных?

По сути:
Вместо:
Код

where Sender in (:user1,:user2)
      and Recipient in (:user1,:user2)

в целях отладки, я бы рекомендовал написать:
Код

where Sender in ('Vasji', 'Petja')
      and Recipient in ('Vasji', 'Petja')

где 'Vasji' и 'Petja' - имена пользователей и посмотреть на результат.

Четко поставленный вопрос - залог изчерпывающего ответа smile !
Для этого необходимо:
1. Приветси структуру таблиц.
2. Приветси набор тестовых данных.
3. Приветси запрос (опционально).
4. Приветси ожидаемый результат.
5. Привести полученый результат.


--------------------
Слава Україні!
PM MAIL   Вверх
Zloxa
Дата 3.9.2009, 13:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 53
Всего: 161



Цитата(MrDmitry @  3.9.2009,  12:47 Найти цитируемый пост)
Sender - таблица с отпровителями 
У меня это m.user_id
Recipient -  таблица с получателями у меня это m.Recipient_id
user1: user2 - получатель отправитель

Код

select m.message
          , sender.name s_name
          , sender.last_name s_last_name
          , recipient.name r_name
          , recipient.last_name r_last_name
from  messages m, users sender, users recipient
where  m.user_id = sender.user_id
  and  m.Recipient_id = receipient.user_id
  and  m.user_id in ('.$id_user1.','.$id_user2.')
  and  m.Recipient_id in ('.$id_user1.','.$id_user2.')


Это сообщение отредактировал(а) Zloxa - 3.9.2009, 13:26


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
MrDmitry
Дата 3.9.2009, 13:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 556
Регистрация: 10.11.2006

Репутация: нет
Всего: нет



Структура таблицы 
messages
Код

id user_id recipient_id date_send  message 
3   4          3                     0                     сообщение от друкого пользователя 
5   5          3                     0                         сообщение входящее
6   6          3                     0                         Входящее сообщение 
7   5          3                     0                         сообщение
8   3          2                     0                          32432423 
9   6          3                     0                          сообщение 

структура таблицs users
Код

d name lastname login email date_birth procent 
3  1       1              [email protected]         1930-01-01  
4  2       2              [email protected] 1930-01-01 
5  3       3              [email protected] 1930-01-01
6  4       4              [email protected] 1930-01-01 




Должны вывестись
Сообщения и Имена людей которые переписывались друг с другом
Если велас переписка между пользователями 5 и 3 то должны получится сообщения

id 5 "сообщение входящее" и id 7 "сообщение"

Это сообщение отредактировал(а) MrDmitry - 3.9.2009, 13:37
PM MAIL   Вверх
Gluttton
Дата 3.9.2009, 14:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Начинающий
***


Профиль
Группа: Завсегдатай
Сообщений: 1170
Регистрация: 28.8.2008
Где: Феодосия

Репутация: 24
Всего: 54



Код

SELECT
    users.name AS name_from,
    SUB.message,
    users.name AS name_to
FROM
(
    SELECT
        messages.user_id,
        messages.recipient_id,
        messages.message
    FROM messages
        WHERE messages.user_id=:user_id
)   AS SUB
    INNER JOIN users
    ON users.id=SUB.user_id

UNION ALL
SELECT
    users.name AS name_from,
    SUB.message,
    users.name AS name_to
FROM
(
    SELECT
        messages.recipient_id AS user_id,
        messages.user_id AS recipient_id,
        messages.message
    FROM messages
        WHERE messages.user_id IN
        (
            SELECT
                messages.recipient_id
            FROM messages
                WHERE messages.user_id=:user_id
        )
)   AS SUB
    INNER JOIN users
    WHERE users.id=SUB.user_id 


Не проверял - возможно будут ошибки...

Номер не удался smile ...

Это сообщение отредактировал(а) Gluttton - 3.9.2009, 17:35


--------------------
Слава Україні!
PM MAIL   Вверх
MrDmitry
Дата 3.9.2009, 16:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 556
Регистрация: 10.11.2006

Репутация: нет
Всего: нет



так выводятся всегда сообщение от других 2 пользователей. сообщений наших нет ((
PM MAIL   Вверх
Zloxa
Дата 3.9.2009, 17:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 53
Всего: 161



MrDmitry, что тут не так?


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
Akina
Дата 3.9.2009, 17:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 45
Всего: 454



Цитата(Zloxa @  3.9.2009,  18:15 Найти цитируемый пост)
что тут не так? 

Опечатка. В одном месте не recipient, а receipient 


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Gluttton
Дата 3.9.2009, 17:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Начинающий
***


Профиль
Группа: Завсегдатай
Сообщений: 1170
Регистрация: 28.8.2008
Где: Феодосия

Репутация: 24
Всего: 54



Итак...

Для таблиц:
user posted image

user posted image

Запрос:
Код

SELECT
    u_from.name AS name_from,
    SUB."MESSAGE",
    u_to.name AS name_to
FROM
(
    SELECT
        messages.user_id,
        messages.recipient_id,
        messages."MESSAGE"
    FROM messages
        WHERE messages.user_id=5
)   AS SUB, users AS u_from, users AS u_to
    WHERE u_from.id=SUB.user_id
    AND u_to.id=SUB.recipient_id

UNION ALL
SELECT
    u_from.name AS name_from,
    SUB."MESSAGE",
    u_to.name AS name_to
FROM
(
    SELECT
        messages.recipient_id,
        messages.user_id,
        messages."MESSAGE"
    FROM messages
        WHERE messages.user_id IN
        (
            SELECT
                messages.recipient_id
            FROM messages
                WHERE messages.user_id=5
        )
        AND messages.recipient_id=5
)   AS SUB, users AS u_from, users AS u_to
    WHERE u_from.id=SUB.user_id
    AND u_to.id=SUB.recipient_id


Вернет данные:
user posted image

Примечание:
Запрос выполнялся на Firebird 2.1, message - служебное слово, поэтому оно взято в двойные кавычки.

Запрос выполнялся для пользователя с id=5

Расширил тестовые данные - обнаружил ошибку...

Ошибку устранил, пост обновил smile ... 

Это сообщение отредактировал(а) Gluttton - 3.9.2009, 18:02


--------------------
Слава Україні!
PM MAIL   Вверх
MrDmitry
Дата 3.9.2009, 17:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 556
Регистрация: 10.11.2006

Репутация: нет
Всего: нет



оп сорри как то не заметил тот пост. Кое что подправил и все работает )
PM MAIL   Вверх
Gluttton
Дата 3.9.2009, 18:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Начинающий
***


Профиль
Группа: Завсегдатай
Сообщений: 1170
Регистрация: 28.8.2008
Где: Феодосия

Репутация: 24
Всего: 54



MrDmitry, будь внимателен!
Первая редакция моего запроса, на твоих данных вернет "правильные"  данные!

Ошибку можно выявить, если добавить в таблицу сообщений запись, с сообщением от "обрабатываемого" пользователя "другому", так, что бы к "обробатываему" пользователю сообщений от этого "другого" не приходило...
При этом запрос с ошибкой вернет ко всему прочему и сообщения, которые отправлял "другой" пользователь не "обрабатываемуму" smile ...

Рекомендую обновиться до второй версии smile ...


--------------------
Слава Україні!
PM MAIL   Вверх
Zloxa
Дата 3.9.2009, 18:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 53
Всего: 161



Цитата(Akina @  3.9.2009,  17:26 Найти цитируемый пост)
Опечатка

Спасибо ;) smile 


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
Gluttton
Дата 3.9.2009, 18:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Начинающий
***


Профиль
Группа: Завсегдатай
Сообщений: 1170
Регистрация: 28.8.2008
Где: Феодосия

Репутация: 24
Всего: 54



 smile 
Цитата(MrDmitry @  3.9.2009,  17:48 Найти цитируемый пост)
оп сорри как то не заметил тот пост. Кое что подправил и все работает )


А я то подумал, что это мне  smile ...


Zloxa, Зато у меня запрос с картинками  smile ( smile ) ...


--------------------
Слава Україні!
PM MAIL   Вверх
Zloxa
Дата 3.9.2009, 19:38 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 53
Всего: 161



Цитата(Gluttton @  3.9.2009,  18:59 Найти цитируемый пост)
Зато у меня запрос с картинками  smile ( smile ) ... 

 smile 
Мне всегда нравилось как ты оформляешь свои посты 
Ну и в запросах твоих порой столь замечательные изюминки проскакивают
Любитель ты простые вещи делать сложно/*но ДЕЛАТЬ!!!!*/. Мне это очень импонирует.


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Составление SQL-запросов | Следующая тема »


 




[ Время генерации скрипта: 0.0568 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.