检索前25个表(由字段值定义)

时间:2009-08-20 05:04:41

标签: php mysql

下面的代码返回MySQL数据库中最近创建的前25个表。

$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. 根据“网站”

  2. 的不同条目数量排名前25位的表格
  3. 基于“votes_up”总和的前25个表

  4. 我该怎么做?

    提前致谢,

    约翰

1 个答案:

答案 0 :(得分:0)

  

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替换为no。具有眨眼和点头的独特SITE记录是作弊 - 更好地重新设计。 :)

  

2。基于“votes_up”总和的前25个表

如果你不能,无论出于何种原因,按照优秀的建议重新设计,你将不得不以编程方式迭代每张桌子。在您的代码中,您可能会遍历SHOW TABLES,累积

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

对累积行的第二个字段进行排序,然后修剪到前25行。

这个变体涉及一个汇总表,用于跟踪表和sum()'d UPVOTES,可能由 cron 定期重写,由每个表触发器即时更新,或者在每个新表的VIEW(重新CREATE d)中显示,这是所有成分查询的UNION

但不要做任何这些。 :)切换到单表设计(如果这是一个问题,可能会要求您的存储引擎进行分区)。