Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Запрос сортировки по трем таблицам

Сообщения:  [1-9] 

 
 автор: alizze   (09.12.2012 в 05:49)   письмо автору
 
   для: Igorek   (09.12.2012 в 04:41)
 

Большое спасибо за помощь. Не знал про ISNULL ))

  Ответить  
 
 автор: Igorek   (09.12.2012 в 04:41)   письмо автору
 
   для: alizze   (09.12.2012 в 03:59)
 

SELECT u.* FROM users u 
JOIN friends f ON f.friend_id = u.user_id 
LEFT JOIN online o ON o.user_id = f.friend_id 
WHERE f.user_id = 1
ORDER BY ISNULL(o.user_id), u.last_vizit DESC


http://sqlfiddle.com/#!2/c0c35/7

  Ответить  
 
 автор: alizze   (09.12.2012 в 03:59)   письмо автору
 
   для: Igorek   (09.12.2012 в 02:41)
 

Таблица friends:
_____________________
user_id  | friend_id
_____________________
1        |  2
1        |  3
1        |  4
1        |  5
_____________________


Таблица users:
______________________________________________
user_id  |  login    |  password  |  last_visit
______________________________________________
2        |  User2    |  pass2     |  1355005632
3        |  User3    |  pass3     |  1355003318
4        |  User4    |  pass4     |  1355008572
5        |  User5    |  pass5     |  1355006636
______________________________________________


Таблица online:
_________
user_id
_________
3        
5       
_________


Из моего примера должен выведен такой список:
User5 (находится в таблице online + отсортировано по полю last_visit)
User3 (находится в таблице online + отсортировано по полю last_visit)
User4 (отсортировано по полю last_visit)
User2 (отсортировано по полю last_visit) 


Необходимо вывести всех друзей с таблицы friends с сортировкой по онлайн (кто находится в таблице online) и по времени последнего визита (last_visit DESC).

  Ответить  
 
 автор: Igorek   (09.12.2012 в 02:41)   письмо автору
 
   для: alizze   (08.12.2012 в 23:02)
 

по задумке, для тех кого нет из друзей онлайн, left join для поля o.time вернет NULL и сортировка по нему в результате "поднимет" онлайн-друзей на первые места.

Еще раз повторю: Приложите дамп табличек и желаемый результат выборки (на этих данных) - тогда можно будет точнее запрос написать!!!!

  Ответить  
 
 автор: alizze   (08.12.2012 в 23:02)   письмо автору
 
   для: Igorek   (08.12.2012 в 20:32)
 

ORDER BY o.time DESC

Не правильно поняли меня.
Нужно выводить вначале тех, кто имеется в таблице онлайна т.е. поле time не нужно использовать (time для удаления из таблицы онлайна), нужно просто проверять есть или нету записи в таблице онлайна.Выводим вначале друзей, которые есть в таблице онлайна, а потом остальных. Сортируя по последнему времени посещения (last_vizit)

  Ответить  
 
 автор: Igorek   (08.12.2012 в 20:32)   письмо автору
 
   для: alizze   (08.12.2012 в 19:53)
 

если я правильно понял, то примерно так:
<?php
$q 
"SELECT * FROM users u
JOIN friends f ON f.friend_id = u.user_id
LEFT JOIN online o ON o.user_id = f.friend_id
WHERE u.user_id = 
$user_id
ORDER BY o.time DESC, u.last_vizit DESC"


Приложите дамп табличек и желаемый результат выборки - тогда можно будет точнее запрос написать.

  Ответить  
 
 автор: alizze   (08.12.2012 в 19:53)   письмо автору
 
   для: cheops   (08.12.2012 в 19:17)
 

Мне надо в одном запросе сортировку по онлайн и по времени последнего визита.

  Ответить  
 
 автор: cheops   (08.12.2012 в 19:17)   письмо автору
 
   для: alizze   (08.12.2012 в 10:28)
 

Т.е. запроса будет два? Или вы ходите их UNION объединить?

  Ответить  
 
 автор: alizze   (08.12.2012 в 10:28)   письмо автору
 
 

Доброго времени суток.
Имеется небольшой движок, где имеется функция списка друзей.

Имеется 3 таблицы:
1. Таблица друзей (user_id, friend_id).
2. Таблица онлайн (user_id, time).
3. Таблица пользователей (user_id, ..., last_vizit).

Вывожу список друзей таким запросом:

SELECT * FROM friends WHERE user_id=$user_id LIMIT $start, $page


Необходимо сделать запрос с сортировкой по онлайн и по последнему визиту т.е.
вначале вывести где user_id=friend_id в таблице онлайн
после выводить user_id=friend_id ORDER BY last_vizit DESC в таблице пользователей

  Ответить  

Сообщения:  [1-9] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования