![]() |
Модераторы: skyboy |
![]() ![]() ![]() |
|
MrDmitry |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 556 Регистрация: 10.11.2006 Репутация: нет Всего: нет |
Помогите составить sql запрос
Есть 2 таблицы в одной хронятся пользователи (id,name,email и тд) в другой хронятся сообщения (id, user_id(кто отправил), recipient_id(кому отправил),messages,data ) нужно сделать контактный лист. Тоесть чтобы выводились все с кем переписывался user_id с сортировкой по дате Использую mysql |
|||
|
||||
Gluttton |
|
|||
![]() Начинающий ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1170 Регистрация: 28.8.2008 Где: Феодосия Репутация: 24 Всего: 54 |
Что то вроде такого...
где t1 и t2 это таблицы с информацией о пользователях и сообщениях соответственно, а 'user' - пользователь, "для которого" формируется запрос. Это сообщение отредактировал(а) Gluttton - 31.8.2009, 23:15 -------------------- Слава Україні! |
|||
|
||||
MrDmitry |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 556 Регистрация: 10.11.2006 Репутация: нет Всего: нет |
написал так
и не катит. или я где то ошибся??? PS :user_id глобальная переменная определяющая нашего текущего пользователя Это сообщение отредактировал(а) MrDmitry - 31.8.2009, 23:37 |
|||
|
||||
Gluttton |
|
|||
![]() Начинающий ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1170 Регистрация: 28.8.2008 Где: Феодосия Репутация: 24 Всего: 54 |
Выполняется с ошибкой или возвращает не те данные, которые ожидаються? -------------------- Слава Україні! |
|||
|
||||
MrDmitry |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 556 Регистрация: 10.11.2006 Репутация: нет Всего: нет |
не каких визуальных ошибок нет. Возвращается пустая страница без данных. Вывожу правельно
|
|||
|
||||
Gluttton |
|
|||
![]() Начинающий ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1170 Регистрация: 28.8.2008 Где: Феодосия Репутация: 24 Всего: 54 |
В таком случае, прошу показать на каких тестовых данных тестируется запрос (можно не все, а часть ![]() 1. Содержимое таблицы пользователей. 2. Содержимое таблицы сообщений. 3. Ожидаемые данные. 4. Полученые даные. -------------------- Слава Україні! |
|||
|
||||
MrDmitry |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 556 Регистрация: 10.11.2006 Репутация: нет Всего: нет |
messages
user i
ожидалось что выведется следующий список 1 1 2 2 3 3 4 4 не вывелось ни чего PS цыфры это фамилии Имя Отчество ![]() |
||||
|
|||||
MrDmitry |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 556 Регистрация: 10.11.2006 Репутация: нет Всего: нет |
так все разобрался sql работает но выводит не то что нужно.
Вот предствате себе записную книжку в телефоне. Там вить редко когда бывают повторяющиеся сообщения. Мне нужно вывести список всех с кем пользователь обменивался сообщениями. Каждый кто поподает в список выводится 1 раз (в это скрипте выводились те с кем пользователь переписывался. при чем пользователи повторялись в списки :() |
|||
|
||||
Akina |
|
|||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 45 Всего: 454 |
В синтаксисе. Двоеточие убери. Но чтобы каждый абонент был в списке только 1 раз - нужно в запрос добавить группировку по абонентам, и брать соотв. дату связи (первую либо последнюю). -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
DimW |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1330 Регистрация: 24.2.2005 Где: Орёл Репутация: 4 Всего: 44 |
вслучае если у пользователя нет сообшений то результат будет 0 строк, что бы этого избежать, замените INNER JOIN на LEFT JOIN. если вы про это ":user_id", то это параметр запроса, только не глобальный как выразился ТС - область его видимости не выходит за пределы данного запроса. Это сообщение отредактировал(а) DimW - 1.9.2009, 08:37 |
|||
|
||||
Akina |
|
|||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 45 Всего: 454 |
Зависит от диалекта - который не указан. -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
DimW |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1330 Регистрация: 24.2.2005 Где: Орёл Репутация: 4 Всего: 44 |
||||
|
||||
MrDmitry |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 556 Регистрация: 10.11.2006 Репутация: нет Всего: нет |
снова не то
в бд
выводит Имя Фамилия 4 4 5 5 Нужно Имя Фамилия 4 4 5 5 6 6 То есть грубо говоря выводится список исходящих сообщений а не контакты ( |
|||
|
||||
Zloxa |
|
|||
![]() Чо? ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3473 Регистрация: 12.9.2008 Репутация: 53 Всего: 161 |
Хотя я бы сказал зависит от способа доступа. -------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка ![]() |
|||
|
||||
Gluttton |
|
||||
![]() Начинающий ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1170 Регистрация: 28.8.2008 Где: Феодосия Репутация: 24 Всего: 54 |
Так всё таки, что же требуется? -------------------- Слава Україні! |
||||
|
|||||
MrDmitry |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 556 Регистрация: 10.11.2006 Репутация: нет Всего: нет |
Я наверное не правильно выразился
Сейчас постараюсь обьяснить есть 2 списка в одном выводится список всех сообщений которые пришли нам (Входящие) в другом выводится список сообщений которые отправил пользователь (Исходящие) так вот нужно вывести всех пользователей из спиков Входящие,Исходящие, чтоб выводились все пользователи которые попали в эти списки, но выводились 1 раз, тоесть формируется список контактов вот sql запрос списка "Входящие"
вот sql запрос списка "Исходящие"
Это сообщение отредактировал(а) MrDmitry - 1.9.2009, 11:09 |
||||
|
|||||
Gluttton |
|
|||
![]() Начинающий ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1170 Регистрация: 28.8.2008 Где: Феодосия Репутация: 24 Всего: 54 |
Ну дык, и UNION тебе в руки
![]() (Между запросами, для объединения их результатов необходимо поместить UNION - в тех случаях, когда необходимо, что бы результаты не повторялись (т.е. отображались только уникальные записи) или UNION ALL - когда необходимо, что бы отображались все данные). -------------------- Слава Україні! |
|||
|
||||
Akina |
|
|||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 45 Всего: 454 |
-------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
DimW |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1330 Регистрация: 24.2.2005 Где: Орёл Репутация: 4 Всего: 44 |
Akina, в данном случае distinct это излишество. |
|||
|
||||
MrDmitry |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 556 Регистрация: 10.11.2006 Репутация: нет Всего: нет |
щас попробую
Добавлено через 12 минут и 54 секунды Сообвственно вот что выдалось The used SELECT statements have a different number rof colomns Это сообщение отредактировал(а) MrDmitry - 1.9.2009, 11:34 |
|||
|
||||
DimW |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1330 Регистрация: 24.2.2005 Где: Орёл Репутация: 4 Всего: 44 |
||||
|
||||
Akina |
|
|||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 45 Всего: 454 |
Угу. Но на время выполнения это не повлияет, а направление мысли покажет. -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
MrDmitry |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 556 Регистрация: 10.11.2006 Репутация: нет Всего: нет |
вот так писал |
|||
|
||||
DimW |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1330 Регистрация: 24.2.2005 Где: Орёл Репутация: 4 Всего: 44 |
ну и зря, направление мысли у Akina, было оптемальней, т.к. он в таблицу с юзерами приходит уже со смердженными сообшениями. можно было бы проверить и поспорить, но что то лениво ![]() Это сообщение отредактировал(а) DimW - 1.9.2009, 13:05 |
|||
|
||||
MrDmitry |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 556 Регистрация: 10.11.2006 Репутация: нет Всего: нет |
я из его примера не понел что есть
sender_id и mess |
|||
|
||||
Zloxa |
|
|||
![]() Чо? ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3473 Регистрация: 12.9.2008 Репутация: 53 Всего: 161 |
В общем случае повлияет. Лишь в частном, когда на users.id имеет ограничение уникальности, это ограничение включено и валидно, оптимизатор будет иметь основания опустить distinct. -------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка ![]() |
|||
|
||||
DimW |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1330 Регистрация: 24.2.2005 Где: Орёл Репутация: 4 Всего: 44 |
||||
|
||||
Zloxa |
|
|||
![]() Чо? ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3473 Регистрация: 12.9.2008 Репутация: 53 Всего: 161 |
Кстати, пытаясь это продемонстрировать, наткнулся на багу в 11g ![]() DimW, можешь прогнать на десятке, девятке (у меня дома не стоит)?
-------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка ![]() |
|||
|
||||
DimW |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1330 Регистрация: 24.2.2005 Где: Орёл Репутация: 4 Всего: 44 |
есть мысли почему так? |
|||
|
||||
Zloxa |
|
|||
![]() Чо? ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3473 Регистрация: 12.9.2008 Репутация: 53 Всего: 161 |
Баг, не иначе... ;) ЦБО обязан был выполнить дистинкт если ограничение уникальности активно но не валидировано. (я однажды на поиск причины по какой мне давался не правильный план убил безумно много времени, пока не выяснил что констрейнты были включены без валидации). Собсно я пытался покзать результат работы этого скрипта, но на 11м он мне вернул одинаковые планы, ввиду бага. На десятке, девятке, уверен планы будут разные:
Это сообщение отредактировал(а) Zloxa - 1.9.2009, 13:50 -------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка ![]() |
|||
|
||||
DimW |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1330 Регистрация: 24.2.2005 Где: Орёл Репутация: 4 Всего: 44 |
||||
|
||||
MrDmitry |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 556 Регистрация: 10.11.2006 Репутация: нет Всего: нет |
блин я туплю жестко
У меня же нет столбца sender_id что за место этого подставлять? (((( Добавлено через 3 минуты и 53 секунды и еще на что заменить ORDER BY чтоб сортировка была не по убыванию а возростанию Тоесть чтоб сначало выводилось самое ранне сообщение затем меннее ранее и т.д |
|||
|
||||
MrDmitry |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 556 Регистрация: 10.11.2006 Репутация: нет Всего: нет |
сорри глюканула 2 раза наверно отправить сообщение нажал
Это сообщение отредактировал(а) MrDmitry - 1.9.2009, 14:28 |
|||
|
||||
DimW |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1330 Регистрация: 24.2.2005 Где: Орёл Репутация: 4 Всего: 44 |
||||
|
||||
MrDmitry |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 556 Регистрация: 10.11.2006 Репутация: нет Всего: нет |
Все всем огромное спасибо
![]() |
|||
|
||||
![]() ![]() ![]() |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Составление SQL-запросов | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |