4

我在不同产品品牌的数据库中有两个表,我试图对其进行计数,以便在描述搜索的情况下结合两者的计数。我到目前为止是这样的:

$pages_query = mysql_query ("SELECT COUNT('Product Number') FROM brand1 WHERE description LIKE '%oven%' UNION ALL SELECT COUNT('Product Number') FROM brand2 WHERE description LIKE '%oven%'") ;

当我回应这一点时,它会吐出 60,这只是brand1 表的结果,并且不添加brand2 表中的计数(我认为 UNION ALL 应该这样做还是我有错误?)结束编号应该是 173,因为另一个表有 113 个结果与此查询匹配。

将计数结果添加到一个数字中的最佳方法是哪种?

谢谢。

4

2 回答 2

3

AUNION应该给你两,一个用于每个单独的计数。如果您想要两者的总和,可以将它们添加到子选择中:

SELECT
  /* Add these two counts together and alias as total_count */
  (SELECT COUNT(*) FROM brand1 WHERE description LIKE '%oven%') 
  + (SELECT COUNT(*) FROM brand2 WHERE description LIKE '%oven%) AS total_count

MySQL 对子句的内容或存在是宽松的FROM,因此您可以省略它并仅使用SELECT.

附带说明一下,对于brand. 相反,您可能应该将这些组合成一个,其中有一列标识品牌。如果您现在能够做出这样的改变,它可能会大大简化您的生活。

于 2012-12-03T00:23:24.777 回答
2

当您使用 UNION 时,您正在为每个计数创建一行。你必须得到这两行的总和。

顺便说一句,您选择的是 COUNT('Product Number') - 这与 COUNT(1) 的所有意图和目的相同。如果要检查特定列的非空值,则应命名该列。如果Product Number是您的列的名称,则应将其封装在反引号 (`) 中。常规单引号 (') 只会定义一个字符串。

$sql = "SELECT SUM(rowcount)
        FROM (
            SELECT COUNT(1) AS rowcount 
            FROM brand1 
            WHERE description LIKE '%oven%' 
            UNION ALL 
            SELECT COUNT(1) 
            FROM brand2 
            WHERE description LIKE '%oven%'
        ) AS counts";
$pages_query = mysql_query ($sql) ;
于 2012-12-03T00:23:26.453 回答