Вопрос по сортировке

iNfantry

Новичок
Вобщем столкнулся с такой проблемой...

Есть условно таблица аккаунтов.

CREATE TABLE `users`(
`id` INT AUTO_INCREMENT NOT NULL PRIMARY KEY,
`user_id` INT,
`name` VARCHAR(40) NOT NULL,
...
)

user_id служит для организации иерархии, содержит ид "хозяина" данного акаунта.

Уровень вложенности только 1, у "хозяина" user_id='0', а у субаккаунта там соответствнно всегда НЕ 0.

Вопрос - как выбрать ВСЕХ пользователей и отсортировать их в виде

Аккаунт 1
Субаккаунт 1 1
Субаккаунт 1 2
Субаккаунт 1 3
Аккаунт 2
Субаккаунт 2 1
Субаккаунт 2 2
Субаккаунт 2 3
Аккаунт 3
...

Вобщем вопрос простой, может выражаюсь криво. ;)
Ситуация для многих думаю стандартная.
 

iNfantry

Новичок
Я понимаю что тут с джойнами надо, но так ниче и не придумал, надо чтобы вывелись все, и те у кого есть субаккаунты и те у ково нет.
 

С.

Продвинутый новичок
Заменить 0 на user_id=id и просто отсортировать.
 

iNfantry

Новичок
А какие поля выбрать?

SELECT m.id, m.name, FROM users AS m LEFT JOIN users AS s ON m.id = s.user_id

Так неправильно сортирует.
 

iNfantry

Новичок
А вот и новая проблема возникла, напишу здесь чтоб не плодить одноименные темы.

Допустим есть список чего-то там... Пофигу чего, таблица имеет вид:

`id` INT AUTO_INCREMENT NOT NULL PRIMARY KEY,
`item` VARCHAR(255),
`ctime` VARCHAR(12)

И есть таблица групп (категорий) в которую входят записи из первой таблицы.

`id` INT AUTO_INCREMENT NOT NULL PRIMARY KEY,
`group` VARCHAR(255),
`ctime` VARCHAR(12)

И простейшая таблица связей:

`id` INT AUTO_INCREMENT NOT NULL PRIMARY KEY,
`track_id` INT,
`group_id` INT,
`ctime` VARCHAR(12)

Один итем может входить только в одну группу, в группе их может быть сколько угодно, но 1 итем не может числиться в более чем 1 группе.

Думаю всем понятно что случай самый банальный, теперь суть проблемы...
Необходимо получить из базы список всех итемов с соответствующими группами.
Задача решается легко с помощью лефт джойна, для тех итемов которые состоят в группах берется соответствующий им гроуп_ид, для тех которые не состоят - NULL.
Требуется отсортировать в виде:

итем из группы 3
итем из группы 3
итем с гроуп_ид=NULL 3
итем из группы 2
итем из группы 2
итем из группы 2
итем с гроуп_ид=NULL 2
итем с гроуп_ид=NULL 1
итем из группы 1
итем из группы 1

Тоесть одновременно отсортировано по дате создания группы и по дате итемов.
Самое главное - чтобы было именно вразнобой, тоесть чтобы не шли сначала
те итемы которые есть в группах а те что с гроуп_ид=NULL - последние, пока у меня получилось сделать только так...

ЗЫ: ctime - везде таймстамп добавления записи в таблицу.
 
Сверху