0

エンジニアリングジャーナルのAPIから提供された情報を並べ替えようとしています。次の情報をテーブルに抽出しました。

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

各「ジャーナルエントリ」には、IDが1つだけ関連付けられています。各IDには、APIからは返されないが、並べ替えに使用したい他の特性もあります。彼らです:

  • カテゴリ(Econ、Math、Biologyなど。各IDには複数のカテゴリを含めることができます)
  • ブール値(特別なサブスクリプションが必要なものなど)

次の形式で2番目のテーブルを作成しました。

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

各IDは複数のカテゴリを持つことができるため、これが発生すると、別の行がこのテーブルに追加されます。任意の行には1つのIDと1つのカテゴリしかないという考え方です。

私がしたいのはこれです:

  • それに関してはトップ10のカテゴリーを見つけることができます
    • ジャーナルエントリ(ID)の最大数
    • 最高の総ページ長
    • 「HasMedia」ブール値が真である場合の最大のジャーナルエントリ数
  • 「ページネーション」のようにナビゲートする手段を作成します。各ページには、前述のトップ10のn番目の結果が表示されます。
    • したがって、ジャーナルエントリの最大カウント方法を選択した場合、最初のページには、カウントが最も高いカテゴリのすべてのジャーナルエントリのID、名前、および説明が表示されます。

私の計画では、最初の列に1から10までの数字が含まれる新しいテーブルを作成し、2番目の列に上位10個のカテゴリを入力します。次に、ページ付けと同様のプロセスを使用できます。このプロセスでは、n番目のページに、元の値の対応するカテゴリの値のみが表示されます。しかし、私はこのトップ10のリスト/マトリックスを作成することができないようです。また、それがより良い方法があるかどうかもわかりません。

残念ながら、私はMySQLまたはPHPのコーダーではありません。これまでのところ、多くのグーグルでしか得られていません。私が望むようなナビゲーション方法のガイドを完全に見つけることができませんでした。そして、私は適切な用語を知らないので、私はこの時点でランダムなグーグル検索を試みているだけです。

これはそれについて行くための最良の方法ですか?それとも、ある種の3番目のテーブルを作成する方がよいでしょうか。私がすでに書いたPHPとMySQLのコードを使用できるものでこれを行う簡単な方法はおそらくありますか?

4

1 に答える 1

0

ここで何をしようとしているのかよくわかりませんが、2 つの最初のテーブルを組み合わせて、カテゴリを個々の用語ではなくセットにして、一意の ID ごとに 1 つのエントリを持つことができるようにすることをお勧めします。

次に、必要に応じて上位 10 件の検索結果ごとに呼び出しを作成するだけです。各 ID には不明な数のカテゴリが含まれる可能性があるため、制限を 10 として開始し、上位の一致から開始してリターンを処理し、そのカテゴリを取得します。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 に答える