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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Список контактов 
V
    Опции темы
MrDmitry
Дата 31.8.2009, 22:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Помогите составить sql запрос

Есть 2 таблицы
в одной хронятся пользователи (id,name,email и тд)
в другой хронятся сообщения (id, user_id(кто отправил), recipient_id(кому отправил),messages,data )
нужно сделать контактный лист.
Тоесть чтобы выводились все с кем переписывался user_id с сортировкой по дате

Использую mysql
PM MAIL   Вверх
Gluttton
Дата 31.8.2009, 23:09 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Что то вроде такого...

Код

select
    t1.name,
    t2.data
from t1
    inner join t2
    on t1.id=t2.recipient_id
        where t2.user_id='user'
    order by t2.data


где t1 и t2 это таблицы с информацией о пользователях и сообщениях соответственно, а 'user' - пользователь, "для которого" формируется запрос.

Это сообщение отредактировал(а) Gluttton - 31.8.2009, 23:15


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


Опытный
**


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

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



написал так

Код

SELECT u.name, m.date_send, u.user_id, m.recipient_id FROM user u
             INNER JOIN message m ON u.id=m.recipient_id WHERE u.user_id=:user_id ORDER BY m.date_send

и не катит. или я где то ошибся???

PS :user_id  глобальная переменная определяющая нашего текущего пользователя

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


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


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

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



Цитата

и не катит


Выполняется с ошибкой или возвращает не те данные, которые ожидаються?


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


Опытный
**


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

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



не каких визуальных ошибок нет. Возвращается пустая страница без данных. Вывожу правельно
PM MAIL   Вверх
Gluttton
Дата 1.9.2009, 00:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата

не каких визуальных ошибок нет. Возвращается пустая страница без данных. Вывожу правельно


В таком случае, прошу показать на каких тестовых данных тестируется запрос (можно не все, а часть smile ), в следующем виде:
1. Содержимое таблицы пользователей.
2. Содержимое таблицы сообщений.
3. Ожидаемые данные.
4. Полученые даные.


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


Опытный
**


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

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



messages


Код

id user_id recipient_id date_send theme message state procent 

3 4 3 0   2 сообщение от друкого пользователя N 16 
4 3 3 0   3 сообщение N 16 
5 5 3 0   4 сообщение входящее N 16 
6 6 3 0   5 Входящее сообщение N 16 
12312 5 3 0   7 сообщение N 16 
21312 3 2 0   32432423 
3424234 6 3 0   8 сообщение N 16 


user

i
Код

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 


ожидалось что выведется следующий список

1 1 
2 2
3 3
4 4


не вывелось ни чего

PS цыфры это фамилии Имя Отчество smile
PM MAIL   Вверх
MrDmitry
Дата 1.9.2009, 03:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



так все разобрался sql работает но выводит не то что нужно.
Вот предствате себе записную книжку в телефоне. Там вить редко когда бывают повторяющиеся сообщения. Мне нужно вывести список всех с кем пользователь обменивался сообщениями. Каждый кто поподает в список выводится 1 раз

(в это скрипте выводились те с кем пользователь переписывался. при чем пользователи повторялись в списки :()
PM MAIL   Вверх
Akina
Дата 1.9.2009, 07:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(MrDmitry @  1.9.2009,  00:36 Найти цитируемый пост)
или я где то ошибся???

В синтаксисе. Двоеточие убери.
Но чтобы каждый абонент был в списке только 1 раз - нужно в запрос добавить группировку по абонентам, и брать соотв. дату связи (первую либо последнюю).


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

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


Эксперт
***


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

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



Цитата(MrDmitry @  1.9.2009,  03:18 Найти цитируемый пост)
Каждый кто поподает в список выводится 1 раз

Код

select distinct
       u.name
      ,u.lastname
      ,m.user_id
  from user u
 inner join message m on u.id = m.recipient_id
 where u.user_id = :user_id
 order by m.date_send

вслучае если у пользователя нет сообшений то результат будет 0 строк, что бы этого избежать, замените INNER JOIN на LEFT JOIN.

Цитата(Akina @  1.9.2009,  07:04 Найти цитируемый пост)
В синтаксисе. Двоеточие убери.

если вы про это ":user_id", то это параметр запроса, только не глобальный как выразился ТС - область его видимости не выходит за пределы данного запроса.

Это сообщение отредактировал(а) DimW - 1.9.2009, 08:37
PM MAIL ICQ   Вверх
Akina
Дата 1.9.2009, 08:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(DimW @  1.9.2009,  09:36 Найти цитируемый пост)
если вы про это ":user_id", то это параметр запроса

Зависит от диалекта - который не указан.


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

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


Эксперт
***


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

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



Цитата(Akina @  1.9.2009,  08:55 Найти цитируемый пост)
Зависит от диалекта - который не указан.

ну с этим ни кто и не спорит.

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


Опытный
**


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

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



снова не то

в бд
Код


id user_id recipient_id date_send theme message state procent 
3 4 3 0   2 сообщение от друкого пользователя N 16 
4 3 3 0   3 сообщение N 16 
5 5 3 0   4 сообщение входящее N 16 
6 6 3 0   5 Входящее сообщение N 16 
12312 5 3 0   7 сообщение N 16 
21312 3 2 0   32432423 
3424234 6 3 0   ывавыаыв 
11 6 4 0   ывавыаывавы 
14 4 6 0   выавыавыавы 
17 5 4 0   выавыаываывавы
17 7 4 0   в345
17 8 2 0   выавыаываывавы




выводит 

Имя    Фамилия
 4             4
 5             5

Нужно 

Имя    Фамилия
4            4
5            5
6            6

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


Чо?
****


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

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



Цитата(Akina @  1.9.2009,  08:55 Найти цитируемый пост)
Зависит от диалекта - который не указан. 


Цитата(MrDmitry @  31.8.2009,  22:16 Найти цитируемый пост)
Использую mysql 


Хотя я бы сказал зависит от способа доступа.


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


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


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

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



Цитата

То есть грубо говоря выводится список исходящих сообщений а не контакты (


Цитата

Тоесть чтобы выводились все с кем переписывался user_id с сортировкой по дате


Так всё таки, что же требуется?


--------------------
Слава Україні!
PM MAIL   Вверх
Страницы: (3) Все [1] 2 3 
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Составление SQL-запросов | Следующая тема »


 




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


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

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