Несколько Select в одном запросе
Я создаю отчет в php (mysql),
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`
Как это у меня есть 12 таблиц.
могу ли я сделать это в одном запросе. Если бы я это сделал? Процесс становится медленным?
5 ответов:
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.таблицы-это неправильно.
вы, конечно, можете использовать оператор a 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;
хорошая вещь о таком подходе заключается в том, что вы можете явно написать операторы Union и создать представление или создать временную таблицу для хранения значений, которые последовательно добавляются из Proc cals, используя переменные вместо имен таблиц. Я, как правило, идут более с последним, но это действительно зависит от личных предпочтений и применения. Если вы уверены, что таблицы никогда не изменятся, вам нужны данные в формате одной строки, и вы не будете добавлять таблицы. придерживайтесь решения Бена Джеймса. В противном случае я бы посоветовал гибкость, вы всегда можете взломать структуру перекрестных вкладок.
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')
Я знаю, что это старый стек, но я опубликую этот мульти-SQL select case
SELECT bp.bizid, bp.usrid, bp.website, ROUND((SELECT SUM(rating) FROM ratings WHERE bizid=bp.bizid)/(SELECT COUNT(*) FROM ratings WHERE bizid=bp.bizid), 1) AS 'ratings', (SELECT COUNT(*) FROM bzreviews WHERE bizid=bp.bizid) AS 'ttlreviews', bp.phoneno, als.bizname, (SELECT COUNT(*) FROM endorsment WHERE bizid=bp.bizid) AS 'endorses' , als.imgname, bp.`location`, bp.`ownership`, (SELECT COUNT(*) FROM follows WHERE bizid=bp.bizid) AS 'followers', bp.categories, bp.openhours, bp.bizdecri FROM bizprofile AS bp INNER JOIN alluser AS als ON bp.usrid=als.userid WHERE als.usertype='Business'