我在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`
Run Code Online (Sandbox Code Playgroud)
像这样我有12张桌子.
我可以在单个查询中进行.如果我做了?流程变慢了?
sat*_*ish 226
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
Run Code Online (Sandbox Code Playgroud)
Pen*_*m10 24
如果您使用MyISAM表,最快的方法是直接查询统计信息:
select table_name, table_rows
from information_schema.tables
where
table_schema='databasename' and
table_name in ('user_table','cat_table','course_table')
Run Code Online (Sandbox Code Playgroud)
如果您有InnoDB,则必须使用count()进行查询,因为information_schema.tables中的报告值是错误的.
小智 15
你当然可以将Ben Agregation声明作为Ben James的假设,但是这将产生一个包含尽可能多的列的视图.另一种方法可能如下:
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;
Run Code Online (Sandbox Code Playgroud)
关于这样的approch的好处是,您可以显式编写Union语句并生成视图或创建临时表,以保存使用变量代替表名从Proc cals连续添加的值.我倾向于更多地使用后者,但这实际上取决于个人偏好和应用.如果您确定表永远不会更改,那么您希望数据采用单行格式,并且您不会添加表.坚持Ben James的解决方案.否则我建议灵活性,你总是可以破解交叉表结构.
小智 10
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')
Run Code Online (Sandbox Code Playgroud)
SELECT t1.credit,
t2.debit
FROM (SELECT Sum(c.total_amount) AS credit
FROM credit c
WHERE c.status = "a") AS t1,
(SELECT Sum(d.total_amount) AS debit
FROM debit d
WHERE d.status = "a") AS t2
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
323295 次 |
| 最近记录: |