Выборка по иерархии, пока не найден `primary` = 1

Luerssen

Новичок
Выборка по иерархии, пока не найден `primary` = 1

И так, есть:
Код:
mysql> desc items;
+---------------+--------------+------+-----+---------+----------------+
| Field         | Type         | Null | Key | Default | Extra          |
+---------------+--------------+------+-----+---------+----------------+
| id            | int(11)      | NO   | PRI | NULL    | auto_increment |
| categories_id | int(11)      | NO   |     |         |                |
| rewrite       | varchar(256) | NO   | UNI |         |                |
| name          | varchar(256) | NO   | MUL |         |                |
| description   | text         | NO   |     |         |                |
| price         | double(7,2)  | NO   |     |         |                |
| available     | tinyint(1)   | NO   |     | 1       |                |
| image         | varchar(256) | NO   |     |         |                |
| primary       | tinyint(1)   | NO   |     | 0       |                |
+---------------+--------------+------+-----+---------+----------------+

mysql> desc smart_join;
+-------------+-------------------------------------------+------+-----+---------+-------+
| Field       | Type                                      | Null | Key | Default | Extra |
+-------------+-------------------------------------------+------+-----+---------+-------+
| object_type | enum('global','category','brand','phone') | NO   | MUL |         |       |
| object_id   | int(11)                                   | NO   |     |         |       |
| items_id    | int(11)                                   | NO   |     |         |       |
+-------------+-------------------------------------------+------+-----+---------+-------+
И задача:
Выбрать все строки из items где primary = 1, идя по такой иерархии: сначла проверяем object_type = phone, потом brand, потом global. При этом items.categories_id = 23.

Могу сделать 3мя запросами, но думаю что будет долго работать, можно ли спасти меня и показать как сделать 1им запросом.

Пример:
Код:
items:
mysql> SELECT * FROM items;
+----+---------------+--------------------------+------------------------------+-----------------------+--------+-----------+--------+---------+
| id | categories_id | rewrite                  | name                         | description           | price  | available | image  | primary |
+----+---------------+--------------------------+------------------------------+-----------------------+--------+-----------+--------+---------+
|  1 |             5 | accumurheiser_x1200      | АккумулZeinheiser X1200      | !list!!/list!         | 150.00 |         1 | 06.jpg |       1 | 
|  2 |             5 | accumurheiser_x1210      | АккумулZeinheiser X1210      | !list!!/list!         | 130.00 |         1 | 06.jpg |       0 | 
|  3 |             5 | accumurheiser_x1230      | АккумулZeinheiser X1230      | !list!!/list!         | 149.52 |         1 | 06.jpg |       0 | 
|  4 |            23 | xen                      | xen21                        | xennn                 | 120.00 |         1 | 04.jpg |       0 | 
|  5 |            23 | xen12                    | xen12                        | xennn                 | 119.00 |         1 | 04.jpg |       1 | 
+----+---------------+--------------------------+------------------------------+-----------------------+--------+-----------+--------+---------+
5 rows in set (0.00 sec)

mysql> SELECT * FROM smart_join
 - +-------------+-----------+----------+
 # | object_type | object_id | items_id |
 - +-------------+-----------+----------+
 1 | brand       |         4 |        1 |
 2 | phone       |      3424 |        1 |
 3 | brand       |         4 |        3 |
 4 | brand       |        24 |        4 |
 5 | brand       |        24 |        5 |
 - +-------------+-----------+----------+
5 rows in set (0.00 sec)
После выборки по categories_id = 5, я должен получить 2ую запись из smart_join
А по categories_id = 24, я должен получить 5ую запись из smart_join
 
Сверху