1

次のようなデータセットがあります。

---------------------------------------------------------------------
id | category | sub_category | category_href | sub_category_href    |
01 | cat_1    | sub_cat 1    | cat/cat1.php  | cat/cat1/sub_cat1.php|
02 | cat_1    | sub_cat 2    | cat/cat1.php  | cat/cat1/sub_cat2.php|
03 | cat_2    | sub_cat 1    | cat/cat2.php  | cat/cat2/sub_cat1.php|
04 | cat_2    | sub_cat 2    | cat/cat2.php  | cat/cat2/sub_cat2.php|
---------------------------------------------------------------------

私がデータでやりたいのは、次のようなレイアウトです。

<div>
  <h2 class="title">Cat1</h2>
  <p>
   <ul class="links">
      <li><a href="cat/sub_cat_1.php" target="_top">sub_cat_1</a></li>
      <li><a href="cat/sub_cat_2.php" target="_top">sub_cat_2</a></li>
  </p>
</div>
<div>
  <h2 class="title">Cat2</h2>
  <p>
    <ul class="links">
        <li><a href="cat/sub_cat_1.php" target="_top">sub_cat_1</a></li>
        <li><a href="cat/sub_cat_2.php" target="_top">sub_cat_2</a></li>
    </p>
</div>

だから私の質問は、データベースからカテゴリとサブカテゴリを変更できるように、phpでこれをどのように行うかです。以下は私が以下に持っているものですが、サブカテゴリ用に2番目のループが必要です。そうでない場合、カテゴリごとに1つのサブカテゴリしかありません。誰かがsub_catループの正しい方向に私を向けることができますか?ありがとうございました

編集:

だから私の質問は、適切なサブカテゴリをどのようにエコーできるかという明確なカテゴリがあるということです。

ありがとう

<?php
include('connect.php');
$result = mysql_query("SELECT DISTINCT category FROM categories")
    or die(mysql_error());
while ($row = mysql_fetch_array($result)) {
    echo "<div>";
    echo "<h2 class='title'>" . $row['category'] . "</h2>";
    echo "<p>";
    echo "<ul class='links'>";
    $result1 = mysql_query("SELECT * FROM categories ")
        or die (mysql_error());
    while ($row = mysql_fetch_array($result1)) {
        echo "<li><a href='" . $row['sub_category_href'] . " target='_top'>" . $row['sub_category'] . "</a></li>";
    }
    echo "</ul>";
    echo "</p>";
    echo "</div>";
}
?>
4

2 に答える 2

1

そのコードは次のようになります。

<?php
include('connect.php');
$result = mysql_query("SELECT DISTINCT category FROM categories")
    or die(mysql_error());
while ($row = mysql_fetch_array($result)) {
    echo "<div>";
    echo "<h2 class='title'>" . $row['category'] . "</h2>";
    echo "<p>";
    echo "<ul class='links'>";
    $result1 = mysql_query("SELECT * FROM categories WHERE category = {$row['category']}")
            or die (mysql_error());
    while ($row1 = mysql_fetch_array($result1)) {
        echo "<li><a href='" . $row1['sub_category_href'] . " target='_top'>" . $row1['sub_category'] . "</a></li>";
    }
    echo "</ul>";
    echo "</p>";
    echo "</div>";
}
?>

ただし、次のように最適化することをお勧めします。

<?php
include('connect.php');
$result = mysql_query("SELECT * FROM categories")
    or die(mysql_error());
$cats = array();
while ($row = mysql_fetch_array($result)) {
    $category = $row['category'];
    $sub_category = $row['sub_category'];
    $sub_category_href = $row['sub_category_href'];
    $cat_hrefs[$category][$sub_category] = $sub_category_href;
}
foreach ($cat_hrefs as $category => $sub_category_hrefs) {
    echo "<div>";
    echo "<h2 class='title'>" . $category . "</h2>";
    echo "<p>";
    echo "<ul class='links'>";
    foreach ($sub_category_hrefs as $sub_category => $sub_category_href) {
        echo "<li><a href='" . $sub_category_href . " target='_top'>" . $sub_category . "</a></li>";
    }
    echo "</ul>";
    echo "</p>";
    echo "</div>";
}
?>

1つのクエリで実行できるため、3つのクエリを実行する必要はありません。これがより最適です。

于 2012-09-30T21:16:51.897 に答える
0

データベースに4つの列は必要ありません。最初の2つから生成できるため、他の2つのcategory_href、sub_category_hrefareは冗長であるため、sub_categoryとsub_categoryのみが必要です。

このバージョンは、新しいアプリケーションに推奨されるPDOを使用します。

<div>
// connect to database 
<?php  
$host= "xxx";
$username="xxx";
$password="xxx";
$database="xxx";

// Opens a connection to a MySQL server
$connection=mysql_connect("localhost", $username, $password);
try {

// DBH means "D Handle"
// MySQL with PDO_MYSQL
 $DBH = new PDO("mysql:host=$host;dbname=$database", $username, $password);

}
catch(PDOException $e) {
  echo $e->getMessage();
}

// creating the statement
$STH = $DBH->query('SELECT * FROM  category  LIMIT 0 , 30');  
// setting the fetch mode  
$STH->setFetchMode(PDO::FETCH_ASSOC); 
 //Set up flag
 $test = 0;
while($row = $STH->fetch()) { 

 if($test == 0){
   echo "<h2 class= \"title\">".str_replace('_','',ucfirst($row['category']))."</h2>";
   $test = 1;
 }
 else{
   $test = 0;
 }
  echo "<li><a href=\"cat/".$row['category']."/".$row['sub_category'].".php\" target=\"_top\">".$row['sub_category']."</a></li>"; 

}  
// close the connection
$DBH = null;
?>
</div>
于 2012-09-30T22:19:59.947 に答える