





Вы изучали запросы к таблицам INFORMATION_SCHEMA.? Как в
SELECT ic.Table_Name,
ic.Column_Name,
ic.data_Type,
IFNULL(Character_Maximum_Length,'') AS `Max`,
ic.Numeric_precision as `Precision`,
ic.numeric_scale as Scale,
ic.Character_Maximum_Length as VarCharSize,
ic.is_nullable as Nulls,
ic.ordinal_position as OrdinalPos,
ic.column_default as ColDefault,
ku.ordinal_position as PK,
kcu.constraint_name,
kcu.ordinal_position,
tc.constraint_type
FROM INFORMATION_SCHEMA.COLUMNS ic
left outer join INFORMATION_SCHEMA.key_column_usage ku
on ku.table_name = ic.table_name
and ku.column_name = ic.column_name
left outer join information_schema.key_column_usage kcu
on kcu.column_name = ic.column_name
and kcu.table_name = ic.table_name
left outer join information_schema.table_constraints tc
on kcu.constraint_name = tc.constraint_name
order by ic.table_name, ic.ordinal_position;
Я думаю тебе нужен SELECT * FROM INFORMATION_SCHEMA.TABLES
См. http://dev.mysql.com/doc/refman/5.0/en/tables-table.html
Это дает вам (мета) информацию о таблицах, а не о содержимом таблицы, как предполагал OP.
Это дает имена таблиц в нижнем регистре в Windows, в то время как SHOW TABLES дает указанный регистр.
Я думаю, что вам нужно представление MySQL information_schema: http://dev.mysql.com/doc/refman/5.0/en/tables-table.html
Это дает вам (мета) информацию о таблицах, а не о содержимом таблицы, как предполагал OP.
SELECT * FROM INFORMATION_SCHEMA.TABLES
Это должно быть хорошим началом. Для получения дополнительной информации проверьте INFORMATION_SCHEMA Таблицы.
Это дает вам (мета) информацию о таблицах, а не о содержимом таблицы, как предполагал OP.
Я не понимаю, почему вы хотите использовать SELECT * FROM как часть заявления.
12.5.5.30. ПОКАЗАТЬ ТАБЛИЦЫ Синтаксис
OP хочет извлечь данные из таблиц, возвращаемых SHOW TABLES, но не иметь информации о самих таблицах.
Не то, чтобы я знал, если вы не выберете INFORMATION_SCHEMA, как упоминали другие.
Однако команда SHOW довольно гибкая,
Например.:
SHOW tables like '%s%'
Это дает вам (мета) информацию о таблицах, а не о содержимом таблицы, как предполагал OP.
SELECT column_comment FROM information_schema.columns WHERE table_name = 'myTable' AND column_name = 'myColumnName'
Это вернет комментарий к: myTable.myColumnName
Это дает вам (мета) информацию о таблицах, а не о содержимом таблицы, как предполагал OP.
Да, SELECT from table_schema может быть очень полезным для системного администрирования. Если у вас много серверов, баз данных, таблиц ... иногда вам нужно УДАЛИТЬ или ОБНОВИТЬ кучу элементов. Например, чтобы создать запрос для DROP всех таблиц с префиксом "wp_old _...":
SELECT concat('DROP TABLE ', table_name, ';') FROM INFORMATION_SCHEMA.TABLES
WHERE table_schema = '*name_of_your_database*'
AND table_name LIKE 'wp_old_%';
Это дает вам (мета) информацию о таблицах, а не о содержимом таблицы, как предполагал OP.
в MySql 5.1 вы можете попробовать
show tables like 'user%';
выход:
mysql> show tables like 'user%';
+----------------------------+
| Tables_in_test (user%) |
+----------------------------+
| user |
| user_password |
+----------------------------+
2 rows in set (0.00 sec)
Это дает вам (мета) информацию о таблицах, а не о содержимом таблицы, как предполагал OP.
Вы не можете помещать операторы SHOW в подзапрос, как в вашем примере. Единственный оператор, который может входить в подзапрос, - это SELECT.
Как указывалось в других ответах, вы можете запросить INFORMATION_SCHEMA напрямую с SELECT и получить таким образом гораздо больше гибкости.
Операторы MySQL SHOW внутренне представляют собой просто запросы к таблицам INFORMATION_SCHEMA.
Пользователь @physicalattraction оставил этот комментарий к большинству других ответов:
This gives you (meta)information about the tables, not the contents of the table, as the OP intended. – physicalattraction
Напротив, вопрос OP говорит ли нет, что они хотят выбрать данные во всех таблицах. Они говорят, что хотят выбрать из результата SHOW TABLES, который представляет собой просто список имен таблиц.
Если OP действительно хочет выбрать все данные из всех таблиц, то ответ - нет, вы не можете сделать это с помощью одного запроса. Каждый запрос должен явно называть свои таблицы. Вы не можете сделать имя таблицы переменной или результатом другой части того же запроса. Кроме того, все строки данного результата запроса должны иметь одинаковые столбцы.
Таким образом, единственный способ выбрать все данные из всех таблиц - запустить SHOW TABLES, а затем для каждой таблицы, названной в этом результате, выполнить другой запрос.
Возможно, вы ближе, чем думаете - SHOW TABLES уже ведет себя так же, как SELECT:
$pdo = new PDO("mysql:host=$host;dbname=$dbname",$user,$pass);
foreach ($pdo->query("SHOW TABLES") as $row) {
print "Table $row[Tables_in_$dbname]\n";
}
Считать:
SELECT COUNT(*) as total FROM (SELECT TABLE_NAME as tab, TABLES.* FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='database_name' GROUP BY tab) tables;
Составлять список:
SELECT TABLE_NAME as table, TABLES.* FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='database_name' GROUP BY table;
Вы можете создать хранимую процедуру и поместить имена таблиц в курсор, а затем перебрать имена таблиц, чтобы отобразить данные.
Начало работы с хранимой процедурой: http://www.mysqltutorial.org/getting-started-with-mysql-stored-procedures.aspx
Создание курсора: http://www.mysqltutorial.org/mysql-cursor/
Например,
CREATE PROCEDURE `ShowFromTables`()
BEGIN
DECLARE v_finished INTEGER DEFAULT 0;
DECLARE c_table varchar(100) DEFAULT "";
DECLARE table_cursor CURSOR FOR
SELECT table_name FROM information_schema.tables WHERE table_name like 'wp_1%';
DECLARE CONTINUE HANDLER
FOR NOT FOUND SET v_finished = 1;
OPEN table_cursor;
get_data: LOOP
FETCH table_cursor INTO c_table;
IF v_finished = 1 THEN
LEAVE get_data;
END IF;
SET @s=CONCAT("SELECT * FROM ",c_table,";");
PREPARE stmt FROM @s;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END LOOP get_data;
CLOSE table_cursor;
END
Затем вызовите хранимую процедуру:
CALL ShowFromTables();
Это дает вам (мета) информацию о таблицах, а не о содержимом таблицы, как предполагал OP.