使用MySQL和PHP进行非标准排序和导航

时间:2013-02-21 11:36:25

标签: php mysql sorting navigation

我正在尝试对工程期刊API提供给我的信息进行排序。我已将以下信息提取到表格中:

ID                 (integer),
Journal Entry Name (Text),
Description        (Text),
Page Length        (integer),
Has Media          (boolean)

每个“日记帐分录”只有一个与之关联的ID。每个ID还具有API未返回但我想用于排序的其他特征。他们是:

  • 类别(如经济,数学,生物学等。每个ID可以有多个类别)
  • 布尔值(需要特殊订阅的事情)

我已按以下格式创建了第二个表:

ID       (integer),
Category (text),
Boolean1 (bool),
Boolean2 (bool),
Boolean3 (bool)

由于每个ID可以有多个类别,因此在此表中会添加另一行。这个想法是任何给定的行只有一个ID和一个类别。

我想做的是:

  • 能够找到前十个类别
    • 最高日记帐分录(ID)计数
    • 最高总页数
    • “Has Media”布尔值为true的最高日记帐分录计数
  • 创建一种像“分页”一样导航的方式,其中每个页面显示前面提到的前十名的第n个结果。
    • 因此,如果我选择了最高日记帐分录计数方法,则第一页将显示计数最多的类别中所有日记帐分录的ID,名称和描述。

我的计划是创建一个新表,其中数字1到10位于第一列,然后使用前十个类别填充第二列。然后我可以使用类似于分页的过程,其中第n页仅显示具有原始值的相应类别的值。但是我似乎无法做出这十大列表/矩阵,也不知道它是否有更好的方法。

不幸的是,我不是一个MySQL或PHP编码器的交易,并且只是通过大量的google搜索得到了这么多。我完全找不到像我想要的导航方法的任何指南。由于我不知道正确的术语,我现在只是尝试随机谷歌搜索。

这是最好的方法吗?或者创建某种类型的第三个表会更好吗?是否有一种更简单的方法可以使用我已经编写过的PHP和MySQL代码?

1 个答案:

答案 0 :(得分:0)

我不确定我真的明白你的目的是什么,但我最好的猜测是你可能想要结合你的两个初始表并将类别设置为一个集而不是一个单独的术语,这样你就可以只有一个条目唯一ID。

然后你只需要根据需要为你的前十个发现中的每一个写一个电话。由于每个id可以有一个未知数量的类别,我将以10的限制开始,然后处理从顶部匹配开始的返回,抓住它的类别,如果有超过10个抓住前10个,如果少于10个抓住所有的东西,更新你正在寻找的金额(如果有4个,那么你现在正在寻找6个),然后继续下一个最佳匹配。

也许是这样的:

categories = null;
$delimeter = ',';
$count = 1;
$top10 = array();

$result = mysql_query("
SELECT *
FROM table_name
ORDER BY page_length DESC
LIMIT 10");

while($row = mysql_fetch_array($result)  && $count <=10)
  {
  $categories = $row['categories'];
  $id = $row['id'];
  $splitcontents = explode($delimeter, $catagories);
  foreach($splitcontents as $category){
     if (!in_array($catagory,$top10)){
        $top10[$count] = array(
            'category'=>$category,
            'journal_id'=>$id
        );
        $count++;
      }
  }
}