2009-11-21 34 views
75

jestem generowania raportu w PHP (MySQL),Wiele SELECT w jednym zapytaniu

ex:

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

jak to mam 12 stołach.

Czy mogę zrobić to w pojedynczej kwerendzie. Gdybym to zrobił? Proces jest powolny?

+0

Dla tabel MyISAM jest jeszcze lepszy sposób, zobacz moją odpowiedź, która jest szybsza. – Pentium10

Odpowiedz

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

Dziękuję, to działa – boss

+5

Ah wow, nigdy nie wiedziałem, że zapytanie może zadziałać. –

+0

Dla tabel MyISAM jest jeszcze lepszy sposób, zobacz moją odpowiedź. – Pentium10

10

Możesz na pewno wybrać instrukcję Agregation według Postulatu Ben Jamesa, jednak spowoduje to wyświetlenie z tylu kolumn, ile masz tabel. Alternatywną metodą może być następująca:

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; 

Zaletą o approch jak to jest, że można wyraźnie napisać sprawozdanie Unii i generowania widoku lub utworzyć tabelę temp do przechowywania wartości, które są dodawane kolejno od A Przetwarza za pomocą zmiennych zamiast nazw twoich tabel. Z tą ostatnią staram się iść dalej, ale to naprawdę zależy od osobistych preferencji i zastosowania. Jeśli masz pewność, że tabele nigdy się nie zmienią, chcesz dane w formacie jednorzędowym i nie będziesz dodawać tabel. trzymać się rozwiązania Bena Jamesa. W przeciwnym razie radziłbym elastyczności, zawsze możesz zhakować strunową strunę.

21

Jeśli używasz tabel MyISAM, najszybszym sposobem jest zapytań bezpośrednio do statystyk:

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

Jeśli masz InnoDB trzeba kwerendy z count(), jak podano w information_schema.tables jest wartość źle.

+1

tak, to jest lepsze, +1 za dobre informacje – sathish

+0

Jeśli się zastanawiasz, zobacz także [te odpowiedzi na temat różnicy między MyISAM i 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

Na jakie pytanie odpowiada to pytanie? – Oliv

Powiązane problemy