MySQL在PHP中从多个表中选择计数

MySQL在PHP中从多个表中选择计数,php,mysql,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 '

我在一个不同产品品牌的数据库中有两个表,我正试图获取它们的数量,以便在给定描述搜索的情况下将两者的数量结合起来。到目前为止,我得到的是:

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

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


谢谢。

A
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


作为一个补充说明,像
品牌
一样,每个事物都有单独的表不是典型的数据库实践。相反,您可能应该将这些组合到一个表中,该表有一列标识品牌。如果你现在能够做出这样的改变,那么这可能会大大简化你的生活。

当你合并时,你会为每个计数创建一行。你必须得到这两行的总和

顺便说一句,您选择了COUNT(“产品编号”)——这与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) ;

非常感谢。我知道你在这里做了什么,而且效果很好。非常感谢。这是一个有效的解决方案(so+1),但我更喜欢@MichaelBerkowski的答案。这里你加了两次。+1-我也更喜欢@MichaelBerkowski的答案。把我的留给列名信息。领先你几秒钟,但我喜欢你的解决方案,所以请投你一票。谢谢,但实际上我比你早几秒钟。按最老的排序:)+1对你的也一样。+1在这种情况下是最干净的方式。在其他情况下,你可能更喜欢一个总数,就像@TheSmose建议的那样。@MichaelBerkowski啊哈,你说得对!:)为一个优雅的解决方案干杯。@TheSmose感谢您的帮助。我将对我的数据库进行建议的更改。也谢谢你的热情欢迎。我希望有一天我也能做出有益的贡献!Michael,注意下面Michael Berkowski答案底部的信息。您应该将
产品
合并到一个表中,并将
品牌
作为一列。然后,您的查询将是
从产品中选择COUNT(*),其中的描述如“%coven%”和brand IN('brand1','brand2')-更简单更优雅的解决方案顺便说一句,欢迎使用堆栈溢出!