Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Как правильно составить запрос из множества таблиц?

45K
18 января 2012 года
Shaienn
4 / / 06.02.2009
Добрый день.
Есть таблица lot_1, в ней есть список товаров с уникальными id
------------------------------
| desc | id |
------------------------------
| Носки | 1 |
| Трусы | 2 |
------------------------------
Есть таблица lot_2, в ней список других товаров с уникальными id

Есть таблица заказов user_cart, в которой заказанные товары представляются столбцами:
1) Таблица заказанного товара
2) id заказанного товара в таблице

Заказов может быть много из разных таблиц, то есть возникает таблица
------------------------------
| tablename | itemId |
------------------------------
| lot_1 | 1 |
| lot_2 | 3 |
------------------------------

Чтобы мне забрать информацию о товаре (при выводе корзины), мне нужно обратиться в соответствующую таблицу, а потом вывести полученные данные.

Вопрос в том, можно ли это делать в одном запросе? Мне же, при выводе каждой строки нужно обращаться к другой (и каждый раз разной) таблице.

И как это делать? Создавая временную таблицу или как-то JOINами можно?

Спасибо
277
18 января 2012 года
arrjj
1.7K / / 26.01.2011
Есть UNION
Есть create procedure/create function

Хотя задача изначально неправильная. Самый простой (имхо правильный) способ - избавится от нескольких таблиц.
45K
18 января 2012 года
Shaienn
4 / / 06.02.2009
От таблиц, наверное не уйти...

Я не очень силен в MySQL.
Читаю по вашей ссылке пример:
 
Код:
(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;


Как во втором селекте использовать значения, полученные по первому селекту?
79K
18 января 2012 года
LazyPiG
3 / / 18.01.2012
Я так понимаю, что id автоматическое и не забивается вручную. если от множества таблиц не уйти, то может использовать другой способ выдачи уникальных идентификаторов? (Для mssql допустим uniqueidentifier, хз есть ли он в 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]


Адля использования значения из селекта помоему сделай в первом запросе так:
 
Код:
(Select example=a FROM table_name WHERE a=10 AND B=1 ORDER BY a LIMIT 10)

B во втором запросе где нужно, вставляй example
385
18 января 2012 года
SomewherSomehow
477 / / 25.07.2004
Самый правильный ответ вам дал arrjj. Лучше слейте все данные в одну таблицу, обеспечите себе гораздо меньший геморрой и более высокую производительность на будущее.
Но если есть желание поизвращаться, тогда можете сделать один вью в который объединить все ваши таблицы товаров. А в таблице заказ, добавить поле 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

А так бы тогда выглядел сам запрос:
 
Код:
select
    *
from
    orders o
    join lots l on o.id = l.id and o.tablename = l.tablename

Но лучше, сделать одну таблицу.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог