Сложная сортировка, как лучше составить запрос

Leonid

PHP? нет, не слышал...
Сложная сортировка, как лучше составить запрос

Есть таблица catalog - каталог фирм , у нее

id
parent - id родительского раздела (в котором данный раздел или фирма находится)
parent1, parent2 - 2 доп. раздела, к которым данный "привязан"
title, description..... еще много полей.
is_firm = 1|0 1 - фирма в каталоге, 0 - раздел каталога
order_p = 0,1,2,3..... порядок вывода (сортировка)

Надо вывести список всех фирм из данного раздела $ID, упорядоченных по order_p причем сначала выводятся все фирмы, у которых parent = $ID, а затем parent1 или parent2 = $ID

Все еще усложняется тем, что вывод постраничный, т.е. в конце запроса еще limit $start $end
 

Leonid

PHP? нет, не слышал...
число фирм:
select count(*) as cnt from catalog where (parent = $ID or parent1 = $ID or parent2 = $ID) and publish = 1

$limit = " limit $from, $to " - вычисляется на основе общего количества подходящих компаний cnt, числа фирм на странице, текущей страницы

select * from catalog where (parent = $ID or parent1 = $ID or parent2 = $ID) and publish = 1 order by order_p $limit

-~{}~ 14.02.07 12:16:

Например, имеем в основном разделе 3 фирмы, упорядочены по 1, 2,3
1. Фирма 1.1
2. Фирма 1.2
3. Фирма 1.3

В доп. разделе имеем 2 фирмы, тоже упорядоченных:

1. Фирма 2.1
2. Фирма 2.2

Вот. мой запрос вернет

1. Фирма 1.1
1. Фирма 2.1
2. Фирма 1.2
2. Фирма 2.2
3. Фирма 1.3

А надо

1. Фирма 1.1
2. Фирма 1.2
3. Фирма 1.3
1. Фирма 2.1
2. Фирма 2.2

-~{}~ 14.02.07 12:19:

т.е. запрос должен быть вроде если по русски:

выбрать все фирмы, у которых parent = ID, упорядочить по order_p

к результату добавить все фирмы, у которых parent1 = ID, этот список тоже должен быть упорядочен по order_p

то же для parent2

А из общего списка выбрать $limit
 

Dovg

Продвинутый новичок
в Юнионе можно сделать сортировку по частям, а потом лимит для всей совокупности
 

Leonid

PHP? нет, не слышал...
ага, спасибо, я в принципе к этому же и пришел...

-~{}~ 14.02.07 14:33:

просто раньше не пользовался, синтакксиса union не знаю, разбираюсь
 
Сверху