需要在不同的列上加入3个表

时间:2013-08-20 11:11:10

标签: php mysql

product_to_category p2c包含2列:

category_id product_id

此表格可能包含每个产品的多个条目,因此需要MAX (category_id)

category_to_google c2g包含2列:

category_id google_id

google_category gc包含2列:

google_id name

因此得到MAX(category_id)FROM p2c,

获取google_id FROM c2g WHERE category_id = selected category_id,

最终从gc获取名称WHERE google_id = select google_id

我似乎无法正确加入。

解答:

$query = $this->db->query("
    SELECT name FROM {$this->prefix}google_category 
    WHERE google_id = (
        SELECT google_id FROM {$this->prefix}category_to_google 
        WHERE category_id = (
            SELECT MAX(category_id) FROM {$this->prefix}product_to_category 
            WHERE product_id = '" . (int)$product_id . "'
        )
    )");

这很有效,谢谢RC。

是否可以将其转换为良好的连接,它必须嵌套到现有的查询中?

2 个答案:

答案 0 :(得分:2)

我不确定我的确得到了你想要的东西,但我想:

SELECT name FROM gc WHERE google_id = (
    SELECT google_id FROM c2g WHERE category_id = (
        SELECT MAX(category_id) FROM p2c
    )
);

可能就是您要搜索的内容。

答案 1 :(得分:0)

也许是这样的......

 SELECT name 
   FROM google_category c
   JOIN category_to_google cg
     ON cg.google_id = c.google_id
   JOIN (SELECT MAX(category_id) max_category_id 
           FROM product_to_category 
          WHERE product_id = $product_id) x
             ON x.max_category_id = cg.category_id