MySQL SELECT COUNT来自PHP中的多个表

时间:2012-12-03 00:19:04

标签: php mysql

我在不同产品品牌的数据库中有两个表,我正在尝试计算它,以便它结合了描述搜索的两者的数量。到目前为止我所拥有的是:

$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个与此查询匹配的结果。

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

感谢。

2 个答案:

答案 0 :(得分:4)

UNION应该为您提供两个,每个单独计数一个。如果您想要两者的总和,可以在子选择中添加它们:

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这样的东西,单独的表并不是典型的数据库实践。相反,您应该将这些组合成一个单个表,其中有一个标识该品牌的列。如果你现在可以做出这样的改变,它可能会大大简化你的生活。

答案 1 :(得分:3)

当您使用UNION时,您将为每个计数创建一行。你必须获得这两行的SUM。

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

$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) ;