2013-11-28 74 views
0

我有一个查询,我尝试检索的行数,但在我的情况下,每次结果1下降。我想这是一个连接的问题,我不kniw如何处理这种左加入选择计数(*)

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 
+3

什么是'WHERE 1 = 1'的呢? 'COUNT(feeds。*)'或'COUNT(cp。*)'? – zkanoca

+0

我使用php进行动态查询,其中1 = 1是为了避免流程 – fefe

+0

上的复杂问题,我们也总是使用PHP进行动态查询。但我们从不使用WHERE 1 = 1这不会影响结果。 – zkanoca

回答

0

试试这个,不知道如果你使用的是MySQLMSSQL。由于您LEFT JOIN有可能值为NULL。在MSSQL中,如果计入NULL值,结果将为NULL始终使用像COUNT这样的聚合函数。

对于MySQL

SELECT 
    COUNT(IFNULL(cp.Procuct_id,0)) 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') 
+0

谢谢我正在尝试mysql版本,但丢弃了相同的结果 – fefe

+0

你想计算cp.Product_Id? –

+0

是的,我想数cp.product_id,删除GROUP BY作为@ \t Jan Zeiseweis建议比它的工作 – fefe