|
|
|
Сложное объеденение запросов
|
|||
|---|---|---|---|
|
#18+
Добрый вечер, нужна помощь по выборке из базы данных. Сейчас я делаю 4 выборки из БД в разные массивы, а потом склеиваю их в один. Нельзя ли объединить в 1 запрос? суть склейки мне нужно строго чтобы шли результаты в определенном порядке допустим есть таблица которая содержит 6 столбцов: id, name, a, b, с, d мне нужно чтобы результирующий массива был построен таким образом (по сути так выглядят 4 выборки): сначала: a>0 order by name ASC потом: a=0, b>0 order by name ASC потом: a=0, b=0, c>0 order by name ASC потом: a=0, b=0, c=0, d>0 order by name ASC есть ли способ объединить в один запрос? если я правильно понимаю - при использовании UNION он может смешать результаты в конечном массиве - это мне категорически не подходит ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2016, 22:33 |
|
||
|
Сложное объеденение запросов
|
|||
|---|---|---|---|
|
#18+
RtsAmberесли я правильно понимаю - при использовании UNION он может смешать результаты в конечном массиве - это мне категорически не подходита вы добавьте в каждую выборку ещё одно поле - номер выборки и отсортируйте потом по нему (ну и по name, конечно) хотя... зачем всё это? можно же сразу Код: sql 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.05.2016, 04:01 |
|
||
|
Сложное объеденение запросов
|
|||
|---|---|---|---|
|
#18+
tanglir, спасибо за ответ. Я правильно Вас понял: авторSELECT * FROM `table` ORDER BY `table`.`a` = '0', `table`.`b` = '0', `table`.`c` = '0', `table`.`d` = '0' или через where все условия по или перечислить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.05.2016, 09:47 |
|
||
|
Сложное объеденение запросов
|
|||
|---|---|---|---|
|
#18+
А попробовать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.05.2016, 10:08 |
|
||
|
Сложное объеденение запросов
|
|||
|---|---|---|---|
|
#18+
извините, поспешно ответил, в итоге получился вот такой запрос (сообщение выше отредактировать не могу) авторSELECT * FROM `table` WHERE `table`.`a` > '0' UNION SELECT * FROM `table` WHERE `table`.`a` = '0' AND `table`.`b` > '0' UNION SELECT * FROM `table` WHERE `table`.`a` = '0' AND `table`.`b` = '0' AND `table`.`c` > '0' UNION SELECT * FROM `table` WHERE `table`.`a` = '0' AND `table`.`b` = '0' AND `table`.`c` = '0' AND `table`.`d` > '0' ORDER BY `a` = '0', `b` = '0', `c` = '0', `d`='0' пока для простоты без сортировки по имени сейчас тестирую на БД, отпишусь в теме p.s. БД большая, порядка 20k записей, думаю очевидно что a,b,c,d просто назвал в примере для простоты ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.05.2016, 10:12 |
|
||
|
Сложное объеденение запросов
|
|||
|---|---|---|---|
|
#18+
Для проверки создал простенькую БД как расписал в примере, все работает - большое спасибо tanglir за помощь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.05.2016, 10:28 |
|
||
|
Сложное объеденение запросов
|
|||
|---|---|---|---|
|
#18+
RtsAmber, union all надо, а не просто union. у тебя правда и так будет работать, раз ты добавил колонку с номером выборки, но лишние операции не нужны никому. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.05.2016, 10:50 |
|
||
|
Сложное объеденение запросов
|
|||
|---|---|---|---|
|
#18+
MasterZiv, спасибо. Теперь так и делаю. Не подскажите еще такую вещь: если выполнять запрос, Код: sql 1. запрос выполняется успешно. Когда добавляю UNION ALL Код: sql 1. 2. 3. 4. 5. 6. 7. 8. получаю ошибку, #1054 - Unknown column product_name in 'order clause' подскажите, пожалуйста как лечить product_name входит в таблицу pref_sys_products_ru_ru ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.05.2016, 16:14 |
|
||
|
Сложное объеденение запросов
|
|||
|---|---|---|---|
|
#18+
Добавлю: запросы почти одинаковые, отличается немного WHERE FROM одинаковый для обоих запросов ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.05.2016, 16:25 |
|
||
|
Сложное объеденение запросов
|
|||
|---|---|---|---|
|
#18+
RtsAmberполучаю ошибку, #1054 - Unknown column product_name in 'order clause'Выходной набор состоит из единственного поля sys_product_id. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.05.2016, 16:31 |
|
||
|
Сложное объеденение запросов
|
|||
|---|---|---|---|
|
#18+
AkinaRtsAmberполучаю ошибку, #1054 - Unknown column product_name in 'order clause'Выходной набор состоит из единственного поля sys_product_id. Да, но это поле успешно сортируется с учетом имени другого поля (там соединение через JOIN присутствует, поле product_id и product_name входят в одну таблицу. Сам запрос правильный, когда применяю без UNION ALL. Проблема возникает после склейки запросов. Пробую для второго запроса использовать другие p.,s.,l .... пока без результатно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.05.2016, 16:45 |
|
||
|
Сложное объеденение запросов
|
|||
|---|---|---|---|
|
#18+
Akina, Вы были правы. При использовании UNION ALL и order by приходиться перечислять все переменные, которые входят в order by. Жаль, что в финальную выборку будут входить не нужные поля... Нужен был только id ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.05.2016, 17:09 |
|
||
|
Сложное объеденение запросов
|
|||
|---|---|---|---|
|
#18+
RtsAmber , если подзапросы, входящие в UNION, не обрамляются скобками и не получают имён-алиасов, они от этого не перестают быть подзапросами. RtsAmberЖаль, что в финальную выборку будут входить не нужные поля... Нужен был только id Очень странно, что поле, которое определяет порядок записей, названо "ненужным". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.05.2016, 17:55 |
|
||
|
Сложное объеденение запросов
|
|||
|---|---|---|---|
|
#18+
RtsAmberЖаль, что в финальную выборку будут входить не нужные поля... Нужен был только id В суть вашего обсуждения не вникал, так что могу попасть пальцем в небо, но обычно выделить из результата только нужные поля можно надзапросом: Код: sql 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2016, 02:06 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=39240259&tid=1831770]: |
0ms |
get settings: |
7ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
19ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
50ms |
get tp. blocked users: |
1ms |
| others: | 276ms |
| total: | 378ms |

| 0 / 0 |
