(SELECT a FROM table_name WHERE a=10 AND B=1 ORDER BY a LIMIT 10)
UNION
(SELECT a FROM table_name WHERE a=11 AND B=2 ORDER BY a LIMIT 10)
ORDER BY a;
Как правильно составить запрос из множества таблиц?
Есть таблица lot_1, в ней есть список товаров с уникальными id
------------------------------
| desc | id |
------------------------------
| Носки | 1 |
| Трусы | 2 |
------------------------------
Есть таблица lot_2, в ней список других товаров с уникальными id
Есть таблица заказов user_cart, в которой заказанные товары представляются столбцами:
1) Таблица заказанного товара
2) id заказанного товара в таблице
Заказов может быть много из разных таблиц, то есть возникает таблица
------------------------------
| tablename | itemId |
------------------------------
| lot_1 | 1 |
| lot_2 | 3 |
------------------------------
Чтобы мне забрать информацию о товаре (при выводе корзины), мне нужно обратиться в соответствующую таблицу, а потом вывести полученные данные.
Вопрос в том, можно ли это делать в одном запросе? Мне же, при выводе каждой строки нужно обращаться к другой (и каждый раз разной) таблице.
И как это делать? Создавая временную таблицу или как-то JOINами можно?
Спасибо
UNION
Есть create procedure/create function
Хотя задача изначально неправильная. Самый простой (имхо правильный) способ - избавится от нескольких таблиц.
Есть
Есть create procedure/create function
Хотя задача изначально неправильная. Самый простой (имхо правильный) способ - избавится от нескольких таблиц.
Я не очень силен в MySQL.
Читаю по вашей ссылке пример:
Код:
Как во втором селекте использовать значения, полученные по первому селекту?
Если сделать другие id, то примерно таким запросом и пользоваться:
Код:
select [то что нужно вывести] from user_cart uc
inner join lot_1 l1 on l1.id=uc.itemId
inner join lot_2 l2 on l2.id=uc.itemId
[если нужно, то условие WHERE]
inner join lot_1 l1 on l1.id=uc.itemId
inner join lot_2 l2 on l2.id=uc.itemId
[если нужно, то условие WHERE]
Адля использования значения из селекта помоему сделай в первом запросе так:
Код:
(Select example=a FROM table_name WHERE a=10 AND B=1 ORDER BY a LIMIT 10)
B во втором запросе где нужно, вставляй example
Но если есть желание поизвращаться, тогда можете сделать один вью в который объединить все ваши таблицы товаров. А в таблице заказ, добавить поле tablename. После чего в запросе обращаться к вьюшке. В синтаксисе msmsql было бы так
вью:
Код:
create view lots
as
select id, descr, tablename ='lot_1' from lot_1
union all
select id, descr, tablename ='lot_2' from lot_2
as
select id, descr, tablename ='lot_1' from lot_1
union all
select id, descr, tablename ='lot_2' from lot_2
А так бы тогда выглядел сам запрос:
Код:
select
*
from
orders o
join lots l on o.id = l.id and o.tablename = l.tablename
*
from
orders o
join lots l on o.id = l.id and o.tablename = l.tablename
Но лучше, сделать одну таблицу.