【问题标题】:SELECT 3 tables in one query with condition在一个带有条件的查询中选择 3 个表
【发布时间】:2012-09-11 11:45:00
【问题描述】:

如何在一个查询中选择 3 个表并显示所有产品的价格?

下面是我的数据库结构(MySql):

类别

+-------------+------------+
 category_id  | parent_id  |
+-------------+------------+
  1           |      0     
  2           |      1
  3           |      1
  4           |      1
  5           |      2
  6           |      3

products_to_categories

+-------------+------------+
 product_id   | category_id|
+-------------+------------+
  54          |      0     
  55          |      2
  56          |      2
  57          |      2
  58          |      3
  59          |      3
  60          |      4

产品

+-------------+------------+
 product_id   |    price   |
+-------------+------------+
  54          |      10.50     
  55          |      11.20
  56          |      1.00
  57          |      22.20
  58          |      32.0
  59          |      32.0
  60          |      22.0

以下是我的情况;

1. table categories : parent_id = '1'  
(result : 2,3,4)

2. table products_to_categories : category_id = result categories(result : 2,3,4) 
(result : 55,56,57,58,59,60)

3. table products : inner join or left join table product to display price where product_id = result products_to_categories(result : 55,56,57,58,59,60)

最终输出

  55 - 11.20
  56 - 1.00
  57 - 22.20
  58 - 32.0
  59 - 32.0
  60 - 22.0

在我发布这个问题之前,这是我之前的查询(我卡住了如何继续条件 2)

$sql_all = mysql_query("SELECT cat.parent_id,cat.category_id FROM categories cat WHERE cat.parent_id='1' ");
while($row = mysql_fetch_array($sql_all)) {
echo $row['categories_id'].'<br/>'; 
}

谢谢。

【问题讨论】:

  • 谢谢大家,我现在试试你的答案。

标签: php mysql sql


【解决方案1】:

试试这个,

SELECT  c.*
FROM    categories a
        INNER JOIN products_to_categories b
            ON a.category_id = b.category_id
        INNER JOIN products c
            ON b.product_id = c.product_id
WHERE  a.parent_id = 1

这将显示products 表中具有parent_id = 1 的所有记录。

【讨论】:

    【解决方案2】:

    看看下面的查询:

    SELECT pro.product_id, SUM(pro.price) 
    FROM categories cat 
    JOIN products_to_categories ptc USING(category_id)
    JOIN products pro ON ptc.product_id = pro.product_id
    WHERE cat.parent_id='1'
    

    使用上述解决方案,您可以在未来轻松扩展,以防您希望按特定产品分组...

    【讨论】:

      【解决方案3】:

      下面的查询应该会带来你想要的结果。

      SELECT p.product_id, p.price
      FROM products p
      JOIN products_to_categories pc ON (pc.product_id = p.product_id)
      JOIN categories c ON ((c.category_id = pc.category_id) AND (c.parent_id = "1"))
      

      当然,您可以将parent_id1更改为任何其他值,并获得相应的结果。

      注意:我相信在这种情况下,通过在 JOIN 子句而不是 WHERE 子句中声明 parent_id 条件,您将获得更好的性能。

      【讨论】:

        猜你喜欢
        • 2020-01-14
        • 1970-01-01
        • 2017-04-07
        • 2019-07-21
        • 1970-01-01
        • 1970-01-01
        • 2021-11-24
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多