0

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

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

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

  • 类别(例如经济、数学、生物学。每个 ID 可以有多个类别)
  • 布尔值(需要特殊订阅之类的东西)

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

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

由于每个 ID 可以有多个类别,因此当发生这种情况时,会将另一行添加到此表中。这个想法是任何给定的行都只有一个 ID 和一个类别。

我想做的是:

  • 能够找到排名前十的类别
    • 最高日记帐分录 (ID) 计数
    • 最高总页长
    • “有媒体”布尔值为真的最高日记帐条目计数
  • 创建一种导航方式,例如“分页”,其中每个页面显示上述前十名的第 n 个结果。
    • 因此,如果我选择最高日志条目计数方法,第一页将显示计数最高的类别中所有日志条目的 ID、名称和描述。

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

不幸的是,我不是一个 MySQL 或 PHP 编码员,只是通过大量的谷歌搜索才走到了这一步。我完全找不到任何导航方法的指南,就像我想要的那样。而且由于我不知道正确的术语,我现在只是在尝试随机谷歌搜索。

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

4

1 回答 1

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++;
      }
  }
}
于 2013-02-21T12:59:02.560 回答