Получение 25 лучших таблиц (определяется значениями полей) - PullRequest
0 голосов
/ 20 августа 2009

Приведенный ниже код возвращает 25 самых последних созданных таблиц в базе данных MySQL.

$index = mysql_query("select TABLE_NAME from INFORMATION_SCHEMA.TABLES where TABLE_SCHEMA='bookfeather' order by CREATE_TIME desc limit 25");

Каждая таблица имеет следующий формат:

id INT(11) NOT NULL auto_increment, site VARCHAR(350) NOT NULL, votes_up BIGINT(9) NOT NULL, votes_down BIGINT(9) NOT NULL, PRIMARY KEY(id), UNIQUE (site)

Я хотел бы изменить код, чтобы показать:

  1. 25 лучших таблиц по количеству различных записей для "сайта"

  2. 25 лучших таблиц по сумме "voice_up"

Как я могу это сделать?

Заранее спасибо,

John

1 Ответ

0 голосов
/ 20 августа 2009

1. 25 лучших таблиц по количеству различных записей для "сайта"

IIUC, «сайт» уникален, поэтому вы должны быть в состоянии:

select
  TABLE_NAME,
  ifnull(TABLE_ROWS, 0) as SITES
from INFORMATION_SCHEMA.TABLES
  where TABLE_SCHEMA='bookfeather'
order by SITES desc limit 25

Но вместо TABLE_ROWS вместо. уникальных записей SITE с подмигиванием и клеветой - лучше переделать. :)

2. 25 лучших таблиц по сумме "voice_up"

Если по какой-либо причине вы не можете последовать прекрасному совету по редизайну, вам придется программно перебирать каждую таблицу. В вашем коде вы можете перебрать SHOW TABLES, накапливая результат

select 'tblName', ifnull(sum(VOTES_UP), 0) as UPVOTES from tblName

сортировка по второму полю ваших накопленных рядов и обрезка до верха 25.

Вариант этого включает сводную таблицу, которая отслеживает таблицы и sum () 'UPVOTES, возможно, переписывается периодически cron , обновляется на лету с помощью триггеров для каждой таблицы или представляется в VIEW (re * CREATE d для каждой новой таблицы), что составляет UNION всех составляющих запросов.

Но не делай ничего из этого. :) Перейдите к дизайну с одной таблицей (возможно, попросив механизм хранения разделить, если это вызывает озабоченность).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...