[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Сортировка данных
solib
Ситуация следующая
есть 2 таблицы
money и users
Нужно вывести список юзеров
запрос примерно такой

SELECT users.*,audit_money.* FROM users
JOIN audit_money ON audit_money.uid = users.id
WHERE audit_money.zadanie=(SELECT MAX(zadanie) FROM audit_money)
ORDER BY users.id DESC

Теперь встала задача отсортировать данные
но есть поле referal в котором id юзера который пригласил человека на сайт
колличество рефералов можно узнать простым запросом
select COUNT(*) from `users` where `referal`='".$user['id']."'

Какнибуть можно сделать вложенный запрос чтобы order by мог сделать сортировку по колличеству рефералов? или нужно писать костыли на php?
Спасибо за внимание к вопросу.

_____________
kaww
SELECT users.*,audit_money.*, count(*) as count_ref FROM   users
JOIN audit_money ON audit_money.uid = users.id
join users as t1 on t1.referal=users.id
WHERE audit_money.zadanie=(SELECT MAX(zadanie) FROM audit_money)
group by users.id
ORDER BY count_ref DESC
solib
Спасибо, но тех кто ни кого еше не пригласил в выборку не добавляет

_____________
kaww
join left users as t1 on t1.referal=users.id , при этом будет count_ref = 1 даже у тех кто никого не пригласил, если критично то можно как-нибудь так : (t1.id, count(*), 0) as count_ref
solib
SELECT users.*,audit_money.*, (t1.id, count(*), 0) as count_ref FROM   users
JOIN audit_money ON audit_money.uid = users.id
join users as t1 on t1.referal=users.id
WHERE audit_money.zadanie=(SELECT MAX(zadanie) FROM audit_money)
group by users.id
ORDER BY count_ref DESC

так я понял? что то не хочет так работать.
пишет
Цитата
operand should contain 1 column(s)

да к сожалению критично
ЗЫ ток не join left а наоборот left join =) так поправка для будущих поколений

_____________
kaww
Какая ошибка? и почему join users as t1 on t1.referal=users.id а не left join users as t1 on t1.referal=users.id ?
Не (t1.id, count(*), 0) as count_ref а if(t1.id, count(*), 0) as count_ref
Цитата (solib @ 22.05.2013 - 04:17)
ЗЫ ток не join left а наоборот left join =)

во всем виноват Zend_Db_Select с именами своих методов ))
solib
SELECT users.*,audit_money.*,  if(t1.id, count(*), 0) as count_ref FROM   users
JOIN audit_money ON audit_money.uid = users.id
left join users as t1 on t1.referal=users.id
WHERE audit_money.zadanie=(SELECT MAX(zadanie) FROM audit_money)
group by users.id
ORDER BY count_ref DESC

вот конечный вариант который заработал как надо
спасибо

_____________
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.