我无法确定只有在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`
答案 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)
我担心你的查询有点混乱。如果没有表结构,我们只能猜测你想要做什么。关键信息是三个表如何相互关联。
请注意以下事项:
您在SELECT中使用了三个表,但没有加入它们。您需要显式加入您使用的表。缺少明确的JOIN是你获得太多行的原因,并且必须使用GROUP BY来消除重复。您的最终解决方案不应使用GROUP BY。
如果您只搜索42的product.cat_id,我假设您知道cat_id是否已发布且您不需要涉及product_cats表。这是对的吗?
据推测,有一列product.type_id
或类似的东西。由于您正在搜索有限数量的这些,您是否事先知道该列表中的ID已发布?