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')代码>-更简单更优雅的解决方案顺便说一句,欢迎使用堆栈溢出!