【发布时间】:2013-11-28 10:13:40
【问题描述】:
我有一个查询,我尝试检索行数,但在我的情况下,每次都作为结果 1 下降。我想这是一个连接问题,我不知道如何处理这个
SELECT
COUNT(*) AS summe
FROM
feeds
LEFT JOIN cat_product cp
ON cp.product_id = feeds.productid
WHERE 1 = 1
AND cp.price BETWEEN 950
AND 1450
AND cp.ram_cap BETWEEN 5
AND 11
AND feeds.tdcategoryname LIKE '%Laptop%'
AND feeds.brand IN ('Dell', 'Lenovo', 'Acer', 'Asus')
GROUP BY cp.product_id
【问题讨论】:
-
WHERE 1 = 1是干什么用的?COUNT(feeds.*)或COUNT(cp.*)? -
我使用 php 进行动态查询,其中 1=1 是为了避免流程复杂化
-
我们也总是使用 PHP 进行动态查询。但是我们从不使用
WHERE 1=1这不会影响结果。 -
问题是你要数什么?如果您只想计算符合条件的行,请忽略分组...
-
由于
WHERE子句中的条件,您的LEFT JOIN实际上是INNER JOIN。如果您尝试返回feeds中的所有行,无论是否存在cat_product行(即,获取0计数),您将需要将cp.条件向上移动到连接中.此外,您的下一个/上一个范围从哪里开始?请记住,BETWEEN等于cp.price >= 950 AND cp.price <= 1450,因此如果下一个范围从 1450 开始,并且有一行具有该值,它将被包含两次。出于这个和其他原因,请改为使用独占上限 (<)。