我在不同产品品牌的数据库中有两个表,我正在尝试计算它,以便它结合了描述搜索的两者的数量。到目前为止我所拥有的是:
$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个与此查询匹配的结果。
将计数结果添加到一个数字中的最佳方法是什么?
感谢。
答案 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) ;