单个查询中的多个select语句

我正在生成一个报告在PHP(MySQL)中,

例如:

`select count(id) as tot_user from user_table select count(id) as tot_cat from cat_table select count(id) as tot_course from course_table` 

像这样我有12张桌子。

我可以在单个查询中做到吗? 如果我做到了? 进程变慢?

 SELECT ( SELECT COUNT(*) FROM user_table ) AS tot_user, ( SELECT COUNT(*) FROM cat_table ) AS tot_cat, ( SELECT COUNT(*) FROM course_table ) AS tot_course 

如果使用MyISAM表,最快的方法是直接查询统计信息:

 select table_name, table_rows from information_schema.tables where table_schema='databasename' and table_name in ('user_table','cat_table','course_table') 

如果你有InnoDB,你必须用count()来查询,因为information_schema.tables中的报告值是错误的。

 select RTRIM(A.FIELD) from SCHEMA.TABLE A where RTRIM(A.FIELD) = ('10544175A') UNION select RTRIM(A.FIELD) from SCHEMA.TABLE A where RTRIM(A.FIELD) = ('10328189B') UNION select RTRIM(A.FIELD) from SCHEMA.TABLE A where RTRIM(A.FIELD) = ('103498732H') 

您当然可以使用Ben James提出的Select Agregation语句,但是这将导致您有表格的列数更多。 另一种方法可能如下:

 SELECT COUNT(user_table.id) AS TableCount,'user_table' AS TableSource FROM user_table UNION SELECT COUNT(cat_table.id) AS TableCount,'cat_table' AS TableSource FROM cat_table UNION SELECT COUNT(course_table.id) AS TableCount, 'course_table' AS TableSource From course_table; 

关于这种方法的好处在于,你可以明确地写出联合声明并生成一个视图,或者创build一个临时表来保存从代码中使用variables代替表名连续添加的值。 我倾向于更多的与后者,但它确实取决于个人的喜好和应用。 如果您确定表格永远不会改变,您希望数据为单行格式,并且不会添加表格。 坚持本詹姆斯的解决scheme。 否则,我会build议灵活性,你总是可以黑客交叉选项卡结构。