1
<?php
$q = mysql_query("SELECT sub_cat.*, links.*
                 FROM links
                 LEFT JOIN sub_cat
                 ON links.p_id = sub_cat.id
                 WHERE sub_cat.p_id = '$id'
                 ORDER BY name ASC") or die (mysql_error());

while ($r = mysql_fetch_assoc($q))
{
    $links_name = $r['name'];
    $link_h3 = $links_name != '' ? '<h3>' . $links_name . '</h3>' : '';
    //print $link_h3;
    print '<pre>';
    print_r ($r);
}
?>

次のような行を持つ2つのテーブルがあります。

sub_cat

  • ID
  • 名前
  • p_id

リンク

  • ID
  • リンク
  • p_id

サブカテゴリには、外国語の映画、国内の映画、未分類の映画などの映画のカテゴリがあります。リンクテーブルには、サブカテゴリに応じて具体的な映画のリンクがあります。

唯一のことは、タイトル (sub_cat.name) を重複させたくないということです。結果は次のとおりです。

カテゴリなしwww.movi​​esite.com

カテゴリなしwww.movi​​esite2.com

カテゴリなしwww.movi​​esite3.com

外国映画www.movi​​esite1.bla

外国映画www.movi​​esite2.bla

なりたい

カテゴリなしwww.movi​​esite.com

www.movi​​esite2.com

www.movi​​esite3.com

外国映画www.movi​​esite1.bla

www.movi​​esite2.bla

これを行う方法がわかりません:(

助けていただければ幸いです。

4

2 に答える 2

2

この作業を行うには、次の 2 つのソリューションがあります。

最初の解決策は、すべての映画をカテゴリ別にグループ化するために、データを表示する前に処理することです。

たとえば、次のことができます。

$moviesByCategory = array();

while ($r = mysql_fetch_assoc($q))
{
    // Create the new sub array for the new category if necessary
    if (!isset($moviesByCategory[$r['name']]))
        $moviesByCategory[$r['name']] = array();

    // Add the movie in the category
    $moviesByCategory[$r['name']][] = $r['links'];
}

そして、この新しい配列を次のように繰り返すことができます

foreach($moviesByCategory as $category => $movies)
{
    // Print the category name
    echo '<h1>' . $category . '</h1>';

    // Print all movies of the category
    foreach($movies as $movie)
        echo '<h3>' . $movie . '</h3>';
}

2 番目の解決策は、SQL クエリを変更して、同じカテゴリを持つすべての映画を直接グループ化することです。GROUP BY句を使用してからsub_cat.id、select の他のすべてのフィールドに集計関数を適用するだけです。

パフォーマンスの面では、最適なソリューションは SQL ソリューションですが、PHP を使用するとプレゼンテーションの柔軟性が高まります。

于 2013-05-20T00:32:24.673 に答える
-1

次のようなものを試してください:

$lastSubcatName = "";
while ($r = mysql_fetch_assoc($q))
{
  $links_name = $r['name'];

  if($lastSubcatName != $links_name)
  {
    echo "<h1>".$links_name."</h1>";
    $lastSubcatName = $links_name;
  }

  echo '<h3>' . $r['links'] . '</h3>';
}
于 2013-05-20T00:23:43.093 に答える