2009-11-21 17 views
75

sto generazione di un report in php (mysql),più istruzioni SELECT nella query Singolo

es:

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

come non ho 12 tavoli.

Posso farlo in una singola query. Se avessi fatto? Il processo si rallenta?

+0

Per i tavoli MyISAM c'è anche un modo molto migliore, vedere la mia risposta, che è più veloce. – Pentium10

risposta

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

Grazie, le sue opere – boss

+5

Ah wow, non ho mai saputo che la query potesse funzionare. –

+0

Per le tabelle MyISAM c'è anche un modo molto migliore, vedere la mia risposta. – Pentium10

10

Si può certamente noi la dichiarazione Select Agregation come postulata da Ben James, tuttavia ciò si tradurrà in una vista con tante colonne quante sono le tabelle. Un metodo alternativo può essere la seguente:

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; 

La cosa bella di un approch come questo è che si può scrivere in modo esplicito le dichiarazioni dell'Unione e generare una vista o creare una tabella temporanea per contenere i valori che vengono aggiunti in sequenza in un Proces cals utilizzando le variabili al posto dei nomi delle tabelle. Tendo ad andare di più con quest'ultimo, ma in realtà dipende dalle preferenze personali e dall'applicazione. Se sei sicuro che le tabelle non cambieranno mai, vuoi i dati in un formato a riga singola e non aggiungerai tabelle. attenersi alla soluzione di Ben James. Altrimenti consiglierei la flessibilità, puoi sempre modificare la struttura di una croce tab.

21

Se si utilizzano le tabelle MyISAM, il modo più veloce sta interrogando direttamente le statistiche:

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

Se si dispone di InnoDB si deve interrogare con count() come il valore riportato in INFORMATION_SCHEMA.TABLES è sbagliato.

+1

sì è uno migliore, +1 per le buone informazioni – sathish

+0

Nel caso ve lo stiate chiedendo, consultate anche [queste risposte sulla differenza tra 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

A quale domanda viene data risposta? – Oliv

Problemi correlati