0

我有 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;
4

2 回答 2

0

不知道我得到你的目标是什么。无论如何,不​​建议在同一个查询中使用"select *"and 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在其上使用...

希望这可以解决您的问题。

于 2013-07-13T15:46:28.303 回答
-1

代替

SELECT *

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

SELECT COUNT(*)

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

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


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

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

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

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

于 2013-07-13T02:33:34.287 回答