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

Поиск:

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


Опытный
**


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

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



Помогите составить sql запрос выводящий все сообщения которыми обменивались 2 пользователя
PM MAIL   Вверх
Zloxa
Дата 2.9.2009, 10:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


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

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



Код

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



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


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


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

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



Цитата(MrDmitry @  2.9.2009,  11:14 Найти цитируемый пост)
которыми обменивались 2 пользователя 

Видимо, всё-таки AND




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

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


Чо?
****


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

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



Цитата(Akina @  2.9.2009,  10:41 Найти цитируемый пост)
Видимо, всё-таки AND

Да, спасибо, исправляюсь:
Код

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



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


Опытный
**


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

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



написал так 
Код

SELECT m.id, u.name,u.lastname,m.recipient_id as speaker,m.date_send as date,m.theme,m.message,m.state
             FROM messages m,users u WHERE u.id='.$id_send.' and m.recipient_id='.$id_send.' 



где $id_send id пользователя

Правильно?
PM MAIL   Вверх
Zloxa
Дата 2.9.2009, 11:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


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

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



Цитата(MrDmitry @  2.9.2009,  11:22 Найти цитируемый пост)
Правильно? 

нет. так Вы получаете только список сообщений адресованных одному пользователю


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


Опытный
**


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

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



хм 

Код

SELECT m.id, u.name,u.lastname,m.recipient_id as speaker,m.date_send as date,m.theme,m.message,m.state
             FROM messages m,users u WHERE u.id=:user_id and m.recipient_id='.$id_send.' 


:user_id наш пользователь $id_send другой пользователь
Значит так?? 
PM MAIL   Вверх
Akina
Дата 2.9.2009, 11:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Нет, так будут получены все сообщения, отправленные юзеру id_send, и с какого-то боку примазанные к ним данные юзера user_id - таблицы-то ты не связал.


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

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


Опытный
**


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

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



сорри я плохо знаю sql 
а как правильно составить запрос? ((
PM MAIL   Вверх
Zloxa
Дата 2.9.2009, 12:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


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

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



Цитата(MrDmitry @  2.9.2009,  12:11 Найти цитируемый пост)
как правильно составить запрос? 

так


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


Опытный
**


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

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



блин ну не в какую у меня этот запрос не дается (((
PM MAIL   Вверх
MrDmitry
Дата 3.9.2009, 01:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



пишу так ни чего не выводится ((
Код


SELECT m.message, u.id as speaker, u.name, u.lastname, m.date_send 
             FROM messages m, users u WHERE m.user_id in (:user_id, '.$id_send.') AND
             m.recipient_id in (:user_id, '.$id_send.')

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


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


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

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



Цитата(MrDmitry @  2.9.2009,  23:54 Найти цитируемый пост)
блин ну не в какую у меня этот запрос не дается (((


Цитата(MrDmitry @  3.9.2009,  01:52 Найти цитируемый пост)
пишу так ни чего не выводится ((


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


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


Опытный
**


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

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



да ###

Код

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


Sender - таблица с отпровителями 
У меня это m.user_id
Recipient -  таблица с получателями у меня это m.Recipient_id
user1: user2 - получатель отправитель

со знанием всего этого напрашивается следующий вопрос

Код

SELECT m.message, u.id as speaker, u.name, u.lastname, m.date_send 
             FROM messages m, users u WHERE m.user_id in (:user_id, m.recipinet_id) AND
             m.recipient_id in (:user_id, m.user_id)


но такой запрос тоже не верен (((((((((

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


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


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

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



Конечно неверен. Где связь таблиц messages и users?


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

PM MAIL WWW ICQ Jabber   Вверх
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   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Составление SQL-запросов | Следующая тема »


 




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


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

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