Могу ли я сделать это только с SQL? - PullRequest
0 голосов
/ 22 марта 2010

На данный момент у меня есть две таблицы, products и options.

Продукты содержат

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

Опции содержат

  1. ID
  2. product_id
  3. 1022 * ы *
  4. название

Пример данных может быть:

Products
id: 1
title: 'test'
описание: «мое описание»

Options
id: 1
product_id: 1
sku: 1001
название: 'красный'

id: 2
product_id: 1
sku: 1002
название: 'синий'

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

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

Есть ли лучший способ сделать это только с помощью sql (я использую codeigniter и в идеале хотел бы использовать класс Active Record)?

Ответы [ 3 ]

5 голосов
/ 22 марта 2010

Начните с

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 *.

1 голос
/ 08 июля 2015

выберите * из продуктов a, опция b, где a.id = b.product_id;

или

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

select * from option, где product_id = (выберите id из продуктов)

1 голос
/ 22 марта 2010

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

select *
from products, options
where products.id = options.product_id
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...