下面的代码返回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)
我想将代码更改为显示:
根据“网站”
基于“votes_up”总和的前25个表
我该怎么做?
提前致谢,
约翰
答案 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
。
但不要做任何这些。 :)切换到单表设计(如果这是一个问题,可能会要求您的存储引擎进行分区)。