我可以用SQL做到这一点吗?

时间:2010-03-22 20:27:41

标签: php sql mysql codeigniter

目前我有两张表productsoptions

产品包含

  1. ID
  2. 标题
  3. 描述
  4. 选项包含

    1. ID
    2. PRODUCT_ID
    3. SKU
    4. 标题
    5. 示例数据可能是:

      Products
      id:1
      标题:'测试'
      描述:'我的描述'

      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 个答案:

答案 0 :(得分: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 *是一种很好的做法。

答案 1 :(得分:1)

您需要加入产品和选项。试试这个问题:

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

答案 2 :(得分:1)

从产品a中选择*,选项b,其中a.id = b.product_id;

你可以使用

从product中选择*,其中product_id =(从产品中选择ID)