0

多かれ少なかれブログ記事を保持するテーブルがあります。構造は次のとおりです。

  1. id INT 主キー AUTO_INCREMENT
  2. ユーザー VARCHAR
  3. タイトル VARCHAR
  4. カテゴリ VARCHAR
  5. セクション VARCHAR
  6. post_body テキスト
  7. post_date DATETIME

セクション フィールドは基本的にサブカテゴリです。セクション用の 2 つ目のテーブルがあります。

  1. id INT 主キー AUTO_INCREMENT
  2. section_name VARCHAR
  3. カテゴリ VARCHAR

私がやろうとしているのは、次のような構造のページにリストを作成することです。

科学(これがカテゴリです)

地質学(これが最初のセクション)

タイトル1

タイトル2

タイトル3

生物学(第2セクション)

タイトル1

タイトル2

タイトル3

科学のカテゴリを持つすべてのセクションのその他

ユーザーが科学カテゴリの記事をクリックして表示すると、このページが表示されます。

これを達成するために多くのことを試みましたが、成功しませんでした。表示するセクション名を取得するのは簡単ですが、最初のクエリから取得したセクションに基づいてすべての記事のタイトルのクエリを作成することは、私が立ち往生しているところなので、その時点までの私のコードは次のとおりです。

if(isset($_GET['cat'])){
    $cat = preg_replace('#[^a-z0-9_]#i','',$_GET['cat']);
    $cat = str_replace('_',' ',$_GET['cat']);
    $stmt = $db->prepare("SELECT section_name FROM sections WHERE category=:cat GROUP BY section_name");
    $stmt->bindValue(':cat',$cat,PDO::PARAM_STR);
    try{
        $stmt->execute();
    }
    catch(PDOException $e){
        echo $e->getMessage();
        $db = null;
        exit();
    }
    while($row = $stmt->fetch(PDO::FETCH_ASSOC)){
        $sectionName = $row[section_name];
    }
}
4

1 に答える 1

1

クエリの範囲を広げて各タイトルにそのセクションのタグを付けてから、タイトルのみをループすることをお勧めします (セクションの変更があることを示します)。

$stmt = $db->prepare("SELECT section_name FROM sections t1, title FROM posts t2  WHERE t1.category=:cat AND t1.section_name = t2.section GROUP BY section_name");

表示したいタイトルのリストができたので、それらをループします。

$currentSection = null;
while($row = $stmt->fetch(PDO::FETCH_ASSOC)){
  $sectionName = $row[section_name];
  if ($sectionName != $currentSection) {
    echo "<h2>".$sectionName."</h2>";
    $currentSection = $sectionName;
  }
  echo "<p>".$row['title']."</p>";
}

セクション名をキーとして、タイトルをネスト配列のメンバーとして配列を作成することもできます。もちろん、もっと複雑になる可能性もありますが、どこから始めればよいかがわかると思います。

于 2013-04-12T00:50:39.573 に答える