从数据库中对提取的表名进行排序。 Mysql PHP

时间:2012-10-25 08:24:47

标签: php mysql sql database

我需要获取与其基表关联的所有备份表。 例如,table_name会产生table_name_backup1, table_name_backup2 ..等。这样做的原因是因为我不想手动获取备份表名称,可能有几十个它们并且它们是根据游戏周和日期命名的,因此无法预测它们的名称。

执行此语句后得到的结果,如果$ tbl ='ranking',例如:

...

function getTables($tbl){
  $query = "SHOW TABLES LIKE '" . $tbl . "_gw%' ORDER BY ";

结果

 [0] => ranking_gw0_231012
    [1] => ranking_gw10_231012
    [2] => ranking_gw11_231012
    [3] => ranking_gw1_231012
    [4] => ranking_gw2_231012
    [5] => ranking_gw3_231012
    [6] => ranking_gw4_231012
    [7] => ranking_gw5_231012
    [8] => ranking_gw6_231012
    [9] => ranking_gw7_231012
    [10] => ranking_gw8_231012
    [11] => ranking_gw9_231012
    [12] => ranking       // I insert this manually before return statement. 

除了订单对于备份超过9个的表不正确外,一切正常,因为表 gw10 出现在索引1中,因此,当我提交其值时,显示错误的数据顺序。

我一直在考虑制作一个能够提取 gwx 中的数字并对整个事物进行排序的函数,但我认为必须有一种更简单的方法。

那么,我怎么能以正确的顺序显示这些表格呢?

BTW,当我在MYSQLYOG中查看我的数据库时,它们以相同的顺序显示,而在我的phpmyadmin中,它们以正确的顺序显示, gw11 显示在最后一个。 有两个具有相同gwx值的表,例如ranking_gw0_080812和ranking_gw0_101012

2 个答案:

答案 0 :(得分:1)

您应该执行以下操作:

select table_name from information_schema.tables 
  where table_schema="yourDbName" and table_name like '" . $tbl . "_gw%' 
  order by create_time;

由于您只需要与特定模式匹配的表,因此按创建时间排序。

答案 1 :(得分:0)

您可以尝试一种可以订购的不同方法:

SELECT table_name 
FROM information_schema.tables 
WHERE table_schema='your_database_name'  
ORDER BY table_name ASC;