SQL查询帮助加入(我认为)

时间:2011-11-11 17:42:19

标签: mysql sql

我无法确定只有在products.published,product_types.published和product_cats.published = 1但我的查询无法正常工作时才能获得结果。请帮忙:

SELECT 
  `products`.`title`,
  `products`.`menu_id`,
  `products`.`short_description`,
  `products`.`datasheet_icon`,
  `products`.`datasheet`,
  `products`.`ordering`,
  `products`.`product_type_id`,
  CASE WHEN CHAR_LENGTH(`products`.`alias`)
    THEN CONCAT_WS(':', `products`.`id`, `products`.`alias`) 
    ELSE `products`.`id` 
  END AS slug 
FROM 
  `products`, 
  `product_cats`,
  `product_types`
WHERE 
  `products`.published=1 AND
  `product_cats`.published=1 AND
  `product_types`.published=1 AND
  `products`.`product_cat_id`='42' AND
  `product_types`.`id` IN (1,40,48,49,50)
GROUP BY `products`.`id`
ORDER BY `product_types`.`ordering`, `products`.`ordering`

3 个答案:

答案 0 :(得分:0)

你需要加入表格!

FROM 
`products`, 
`product_cats`,
`product_types`

使用关系字段来完成它,你的问题就会消失!

答案 1 :(得分:0)

我想假设表product_cats和product_types也包含产品ID。我称之为pid:

SELECT 
    p.title,
    p.menu_id,
    p.short_description,
    p.datasheet_icon,
    p.datasheet,
    p.ordering,
    p.product_type_id,
    CASE 
        WHEN CHAR_LENGTH(p.alias)
        THEN CONCAT_WS(':', p.id, p.alias) 
        ELSE p.id 
    END AS slug 
FROM products p
    JOIN product_cats pc ON pc.pid = p.id
    JOIN product_types pt ON pt.pid = p.id
WHERE 
    p.published=1 AND
    pc.published=1 AND
    pt.published=1
GROUP BY p.id
ORDER BY pt.ordering,p.ordering

答案 2 :(得分:0)

我担心你的查询有点混乱。如果没有表结构,我们只能猜测你想要做什么。关键信息是三个表如何相互关联。

请注意以下事项:

  1. 您在SELECT中使用了三个表,但没有加入它们。您需要显式加入您使用的表。缺少明确的JOIN是你获得太多行的原因,并且必须使用GROUP BY来消除重复。您的最终解决方案不应使用GROUP BY。

  2. 如果您只搜索42的product.cat_id,我假设您知道cat_id是否已发布且您不需要涉及product_cats表。这是对的吗?

  3. 据推测,有一列product.type_id或类似的东西。由于您正在搜索有限数量的这些,您是否事先知道该列表中的ID已发布?