【问题标题】:How do I write a My(SQL) query that counts from multiple tables based on specific WHERE clause criteria如何编写基于特定 WHERE 子句条件从多个表中计数的 My(SQL) 查询
【发布时间】:2013-07-13 02:13:28
【问题描述】:

我有 5 个表:a、b、c、d 和 e。

每个表都通过 id 字段上的 INNER JOIN 连接。

我的查询工作正常,但我需要增强它以计算结果,以便将其回显到屏幕上。我无法让计数工作。

我正在查询非常具体的字段:

state_nm
status
loc_type

这些都是我手动输入查询的参数,如下所示:

$_POST["state_nm"] = 'AZ'; ... // and for all other below values..

SELECT *
FROM main_table AS a
INNER JOIN table_1 AS b ON a.id = b.id
INNER JOIN table_2 AS c ON b.id = c.id
INNER JOIN blm table_3 AS d ON c.id = d.id
INNER JOIN table_4 AS e ON d.id = e.id
WHERE a.trq != ''
   AND b.state_nm = '".$_POST["state_nm"]."'
   AND b.loc_type LIKE \ "%".$_ POST ["loc_type"]."%\"
   AND b.STATUS = '".$_POST["status"]."'
GROUP BY b.NAME
ORDER BY c.county ASC;

【问题讨论】:

标签: mysql sql join count


【解决方案1】:

我不确定你的目标是什么。 无论如何,不​​建议在同一查询中使用"select *"group by,并且在某些数据库中会引发错误 我会做的是这样的:

select a.name, count(*) from (
SELECT * FROM main_table as a 

INNER JOIN table_1 as b 

ON a.id=b.id

INNER JOIN table_2 as c

ON b.id=c.id 

INNER JOIN blm table_3 as d 

ON c.id=d.id 

INNER JOIN table_4 as e

ON d.id=e.id  

WHERE a.trq != '' 

AND b.state_nm = '".$_POST["state_nm"]."'  

AND b.loc_type LIKE \"%".$_POST["loc_type"]."%\"  

AND  b.status = '".$_POST["status"]."' 
)a
group by a.name

基本思想是添加一个外部查询并在其上使用group by...

希望这能解决您的问题。

【讨论】:

    【解决方案2】:

    代替

    SELECT *
    

    在您的查询中,您可以将其替换为

    SELECT COUNT(*)
    

    该查询应返回使用 SELECT * 进行查询的结果集中的行数。很容易测试和比较结果。

    我认为这回答了您提出的问题。如果不是,我不明白你的问题。


    我没有注意到您查询中的 GROUP BY。

    如果您想获取该查询返回的行数,请将其包装在外部查询中。

    SELECT COUNT(1) FROM (
      /* your query here */
     ) c
    

    这将为您提供查询返回的行数。

    【讨论】:

    • 我会试一试,然后告诉你。谢谢。
    • 我的回答收到了反对票。如果这不能回答 OP 提出的问题,并且对 OP 没有用,那么我将删除这个答案。对于收到反对票的这个答案有任何问题,我深表歉意。
    • 不给出理由而拒绝投票无助于改善答案,没人知道你不同意什么。
    猜你喜欢
    • 2018-08-14
    • 1970-01-01
    • 2022-01-17
    • 1970-01-01
    • 2021-08-06
    相关资源
    最近更新 更多