【问题标题】:Non standard sorting and navigation using MySQL and PHP使用 MySQL 和 PHP 的非标准排序和导航
【发布时间】:2013-02-21 11:36:25
【问题描述】:

我正在尝试对工程期刊 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 代码?

【问题讨论】:

  • 我不太清楚你想要做什么,但如果你有一个多对多的关系,你可能想要一个桥或“连接”表。 For more info click here

标签: php mysql sorting navigation


【解决方案1】:

不确定我是否真的理解您在这里的目的,但我最好的猜测是您可能希望合并您的两个初始表并将类别设置为一个集合而不是一个单独的术语,这样您就可以每个条目都有一个条目唯一 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++;
      }
  }
}

【讨论】:

    猜你喜欢
    • 2018-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-25
    • 1970-01-01
    • 2015-12-18
    相关资源
    最近更新 更多