2009-11-21 35 views
75

estoy generando un informe en php (MySQL),sentencias de selección múltiple en consulta individual

ejemplo:

`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` 

como no tengo 12 mesas.

¿Puedo hacerlo en una sola consulta. ¿Si lo hice? El proceso se vuelve lento?

+0

Para las tablas MyISAM hay una forma mucho mejor, ver mi respuesta, que es más rápida. – Pentium10

Respuesta

186
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 
+1

Gracias, Funciona – boss

+5

Ah, vaya, nunca supe que la consulta podría funcionar. –

+0

Para las tablas MyISAM hay una forma mucho mejor, ver mi respuesta. – Pentium10

10

Sin duda, nos puede a la declaración Select Agregation como Postulado por Ben James, Sin embargo, esto dará como resultado una vista con tantas columnas como tablas tenga. Un método alternativo puede ser el siguiente:

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; 

Lo bueno de un approch como esto es que se puede escribir de forma explícita las Declaraciones de la Unión y generar una visión o crear una tabla temporal para contener valores que se agregan de forma consecutiva desde una Procesa usar variables en lugar de los nombres de su tabla. Tiendo a ir más con esto último, pero realmente depende de la preferencia personal y la aplicación. Si está seguro de que las tablas nunca cambiarán, querrá los datos en un formato de fila única, y no agregará tablas. quédate con la solución de Ben James. De lo contrario, recomendaría flexibilidad, siempre puede hackear una estructura de tabulación cruzada.

21

Si utiliza tablas MyISAM, la manera más rápida está consultando directamente las estadísticas:

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

Si tiene InnoDB hay que consultar con el recuento() como el valor reportado en INFORMATION_SCHEMA.TABLES es incorrecto.

+1

sí es una mejor, +1 para la buena información – sathish

+0

En caso de que se lo esté preguntando, vea también [estas respuestas sobre la diferencia entre MyISAM e InnoDB] (https://stackoverflow.com/questions/20148/myisam-versus-innodb). –

12
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') 
+8

¿Qué pregunta es respondida por esto? – Oliv

Cuestiones relacionadas