2010-03-22 2 views
0

На данный момент у меня есть две таблицы, products и options.Могу ли я сделать это с помощью только SQL?

Продукция содержит

  1. ID
  2. название
  3. описание

Options содержит

  1. ID
  2. product_id
  3. Код
  4. название

Выборочные данные могут быть:

Products
ID: 1
название: 'тест'
описание: 'мое описание'

Options
ID: 1
product_id: 1
Артикул: 1001
название: 'красный'

ID: 2
product_id: 1
Артикул: 1002
название: 'синий'

Мне нужно, чтобы отобразить каждый элемент , с каждой другой опцией. На данный момент я выбираю строки в products и прокручиваю их, и для каждого выбираем соответствующие строки из options. Затем я создаю массив, похожий на:

[product_title] = 'test'; 
[description] = 'my description'; 
[options][]  = 1, 1001, 'red'; 
[options][]  = 2, 1002, 'blue'; 

Есть ли лучший способ сделать это с помощью только SQL (я использую CodeIgniter, а в идеале хотелось бы использовать активный класс записи)?

+0

Итак, вы предпочитаете ответ в нестандартном SQL или для CodeIgniter ОРМ? – JAL

+0

Либо хорошо, сырой SQL означает, что я узнаю, что происходит на самом деле, CI, чтобы сохранить код в чистоте! – Josh

ответ

5

Старт с

SELECT * FROM products INNER JOIN options ON product.id = options.product_id 

и работать оттуда.

Пример работает только для продуктов с хотя бы одним доступным вариантом (который требуется по вашему дизайну, иначе вам не место для SKU). Но если некоторые продукты не имеют каких-либо опций вообще, вы хотите:

SELECT * FROM products LEFT JOIN options ON product.id = options.product_id 

Наконец, это считается хорошей практикой перечислить фактические столбцы, которые вы хотите, чтобы вернуться вместо SELECT *.

+0

+1 современный синтаксис соединения –

+0

Спасибо. Однако есть ли способ получить его как некоторую таблицу 2d, где у меня есть продукт, и «столбец», содержащий таблицу опций? – Josh

+1

@Josh. Не в стандартном SQL, а не, насколько мне известно (что * не * окончательно) в MySQL. Некоторые СУБД допускают множественные и вложенные наборы результатов, но это очень нестандартно. Кроме того, ORM, вероятно, поддержит это, предполагая, что вы правильно объявляете отношения в DM и ORM, - тогда вы получите доступ к записям параметров через свойство коллекции объекта, представляющего запись продукта. –

1

Вам необходимо присоединиться к продуктам и вариантам. Попробуйте этот запрос:

select * 
from products, options 
where products.id = options.product_id 
1

выбрать * из продуктов a, вариант b где a.id = b.Код товара;

или

вы можете использовать

выберите * от варианта, где product_id = (выберите идентификатор из продуктов)

Смежные вопросы