FSystem88
@FSystem88

Как вывести список всех таблиц MySQL и количество строк в каждой из них впри помощи PHP?

Надо вывести список всех таблиц и чтобы рядом стояло количество строк в это таблице.
Что я делаю не так?

<?php
	require "bd.php";
	$login = $_SESSION['user'];
	$result = mysqli_query($link, "SHOW TABLES FROM $db_table");
	$check = mysqli_num_rows($result);
	if ($check == 0)
	{
		echo "<br><b>Список пуст!</b><br>";
	}
	else
	{
		while ($table = mysqli_fetch_array($result))
		{
			$numread = mysqli_num_rows($link, "SELECT * FROM `$table[0]`");
			echo "<br><a>таб $table[0]. Кол-во строк: $numread</a><br>";
		}
	}
?>
  • Вопрос задан
  • 6458 просмотров
Решения вопроса 1
HeadOnFire
@HeadOnFire
PHP, Laravel & WordPress Evangelist
SHOW TABLES FROM database_name прекрасно работает когда база не выбрана. Здесь мы показываем таблицы в базе, а не в $db_table. Исходя из вашего нейминга, вы просите таблицу показать ее таблицы, что абсурдно само по себе. Обращайтесь к базе. Или, если вы базу предварительно уже выбрали, то достаточно SHOW TABLES.

Далее, для SELECT * FROM table_name уже сначала нужно выбрать базу данных (которую вы опрашивали на предмет таблиц в первом запросе), или же обращаться к таблице в формате database_name.table_name.

Ну и, вместо того чтобы делать выборку всех строк со всеми колонками, спросите сразу SELECT COUNT(*) FROM database_name.table_name.

Еще проще и быстрее это сделать с помощью такого запроса:

SELECT table_name, table_rows
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = 'your_database_name';


Результат этого запроса:

+-----------------------+------------+
| table_name            | table_rows |
+-----------------------+------------+
| wp_terms              |         10 |
| wp_yoast_seo_meta     |         61 |
| wp_yoast_seo_links    |         33 |
| wp_commentmeta        |          0 |
| wp_term_taxonomy      |         10 |
| wp_ewwwio_queue       |        352 |
| wp_usermeta           |        114 |
| wp_options            |        281 |
| wp_users              |          5 |
| wp_term_relationships |         49 |
| wp_ewwwio_images      |       1048 |
| wp_links              |          0 |
| wp_postmeta           |      21408 |
| wp_termmeta           |          0 |
| wp_comments           |          0 |
| wp_posts              |        738 |
+-----------------------+------------+


Единственное, что нужно учесть - если таблицы у вас InnoDB, то данные цифры будут более-менее точными, но не совсем. В силу механизмов оптимизации. Так что если нужно "приблизительно" понимать - используйте данный метод. Если нужно с точностью до одной строки - тогда COUNT.

Ну и еще можно сделать SHOW TABLE STATUS, находять в выбранной базе данных. Точность подсчета количества строк на InnoDB такая же, как и предыдущем методе, но зато здесь будет еще много полезной информации. Например - avg_row_length, data_length, index_length и другое.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Wolfnsex
@Wolfnsex Куратор тега PHP
Если не хочешь быть первым - не вставай в очередь!
Что я делаю не так?

По списку:
  • Переменные в строках обычно обрамляются в фигурные скобки
  • В одном случае у Вас переменная обернута косыми кавычками, в другом нет (в запросе), нужно соблюдать единый единый стиль кода
  • Для точного подсчёта кол-ва строк в таблице можно исползовать SELECT COUNT(*) FROM table_name
  • Примерное кол-во строк, вместе с таблицами можно посмотреть такSHOW TABLE STATUS FROM db_name
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы