|
|
|
|
|
для: Igorek
(09.12.2012 в 04:41)
| | Большое спасибо за помощь. Не знал про ISNULL )) | |
|
|
|
|
|
|
|
для: 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 | |
|
|
|
|
|
|
|
для: 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). | |
|
|
|
|
|
|
|
для: alizze
(08.12.2012 в 23:02)
| | по задумке, для тех кого нет из друзей онлайн, left join для поля o.time вернет NULL и сортировка по нему в результате "поднимет" онлайн-друзей на первые места.
Еще раз повторю: Приложите дамп табличек и желаемый результат выборки (на этих данных) - тогда можно будет точнее запрос написать!!!! | |
|
|
|
|
|
|
|
для: Igorek
(08.12.2012 в 20:32)
| |
Не правильно поняли меня.
Нужно выводить вначале тех, кто имеется в таблице онлайна т.е. поле time не нужно использовать (time для удаления из таблицы онлайна), нужно просто проверять есть или нету записи в таблице онлайна.Выводим вначале друзей, которые есть в таблице онлайна, а потом остальных. Сортируя по последнему времени посещения (last_vizit) | |
|
|
|
|
|
|
|
для: 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"
|
Приложите дамп табличек и желаемый результат выборки - тогда можно будет точнее запрос написать. | |
|
|
|
|
|
|
|
для: cheops
(08.12.2012 в 19:17)
| | Мне надо в одном запросе сортировку по онлайн и по времени последнего визита. | |
|
|
|
|
|
|
|
для: alizze
(08.12.2012 в 10:28)
| | Т.е. запроса будет два? Или вы ходите их UNION объединить? | |
|
|
|
|
|
|
| Доброго времени суток.
Имеется небольшой движок, где имеется функция списка друзей.
Имеется 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 в таблице пользователей | |
|
|
|
|