2016-06-28 8 views
0

私は本当にこのような何かをしたいhttp://www.w3schools.com/tags/tryit.asp?filename=tryhtml_optgroup しかし、私は主なカテゴリとサブカテゴリをDBに持っている、と私は実際にどのようにこのサイクルを管理するか分からない。これどうやってするの ?実際のサイクルは、そのようなものですが、理由は私の必需品の私は、psもう<select> DBからカテゴリとサブカテゴリを挿入するにはどうすればいいですか?

<select class="form-control" id="subcategory" name="subcategory" required> 
<?php 
    $categories="SELECT Name,Category FROM SubCategory ORDER BY Category ASC, Name ASC;"; 
    $query_categories=mysqli_query($connh,$categories); 

     while($rows_categories=mysqli_fetch_array($query_categories)){ 

echo'<option>'.$rows_categories['Category'].'/'.$rows_categories['Name'].'</option>'; 
                    } 
?> 
</select> 

を使用することはできません:カテゴリーは、名前は私がメインのカテゴリを持ちたいサブカテゴリ

主なカテゴリーです<optgroup>に入っていますが、1つのカテゴリに2つ以上のサブカテゴリが含まれているため、<optgroup>をメインカテゴリを1回だけ表示し、各レコードでは表示されないように配置する方法はわかりません。

+0

それは正確に何をして働いていないのですか?あなたはどんな結果を得ていますか?その例に従えばうまくいくはずです。 –

+0

メインカテゴリをにしたいと思いますが、1つのカテゴリに1つ以上のサブカテゴリが含まれているため、どのように配置するのかわかりませんメインカテゴリを1回だけ表示する方法で、各レコードでは表示されません。 –

+1

それは巣のように、小さな巣が内部にありますが、鳥や藁はありません – Drew

答えて

1

を私は現在のメインカテゴリがhtmlに追加されている場合はフラグが必要です。データベースのフィールドを理解すると、名前とカテゴリに文字列値があり、2つのクエリまたは2つのwhilesは必要ありませんが、変数をチェックするだけです:

<select class="form-control" id="subcategory" name="subcategory" required> 
<?php 
$categories="SELECT Name,Category FROM SubCategory ORDER BY Category ASC, Name ASC;"; 
$query_categories=mysqli_query($connh,$categories); 

$currentMainCategory = null; 
while($rows_categories=mysqli_fetch_array($query_categories)){ 
    // check if your current category was diferent of row category 
    if($currentMainCategory != $rows_categories['Category']) { 
     // check if is not null (for close </optgroup>) 
     if(!is_null($currentMainCategory)) { 
       echo '</optgroup>'; 
     } 
     // set your new current category for this loop 
     $currentMainCategory = $rows_categories['Category']; 
     echo '<optgroup label="'. $rows_categories['Category'] .'">'; 
    } 
    // do not forget put value of this category if you needed 
    echo'<option>' . $rows_categories['Name'] . '</option>'; 
} 

// then check again for close last optgroup if is opened 
if(!is_null($currentMainCategory)) { 
    echo '</optgroup>'; 
} 
?> 
</select> 
0

オプトグループのカテゴリとサブカテゴリを表示するという基本的な目標を達成するには、それほど遠くないわけではありません。

次のいずれかを実行できます

  1. クエリの二つの別々のクエリでのMySQLとの両方SubCategoryCategoryテーブルに対してPHPを使用してそれらを結合。

  2. は、各々がそれぞれのCategorySubCategory結果についてoptgroupを含む2つのforeachループを実行します。

または

  1. クエリのMySQLの両方SubCategoryCategoryテーブル(おそらくはUNION)に対して1つの結果セットを取得するためにOUTER JOINを使用して1つのクエリで。
  2. は、各々がそれぞれのCategorySubCategory結果についてoptgroupを含む2つのforeachループを実行し、それはその逆Categoryテーブルから来ている場合のみCategory結果を表示します。

ここではいくつかの参考資料です:

MySQLがジョイン:https://www.sitepoint.com/understanding-sql-joins-mysql-database/

MySQLの連合:Combining the results of two separate MySQL queries

PHPのforeachループ:http://php.net/manual/en/control-structures.foreach.php

PHP配列のマージ:http://www.w3schools.com/php/func_array_merge.asp

0
<select class="form-control" id="subcategory" name="subcategory" required> 
<?php 
$categories="SELECT Name,Category FROM SubCategory ORDER BY Category ASC, Name ASC;"; 
$query_categories=mysqli_query($connh,$categories); 
$category_name_old = ''; 
while($rows_categories=mysqli_fetch_array($query_categories)){ 

    if($rows_categories['Category'] != $category_name_old) { 
     echo "<optgroup label=".$rows_categories['Category'].">"; 
     echo "<option>".$rows_categories['Name']."</option>"; 
    } 
    else { 
     echo "<option>".$rows_categories['Name']."</option>"; 
    } 
    $category_name_old = $rows_categories['Category']; 
    if($category != $category_name_old) { 
     echo "</optgroup>"; 
    } 
} 
                    } 
?> 
</select> 

あなたはこの

0

のように行うことができますサブアレイとしてのサブカテゴリで、あなたの主なカテゴリを持つ配列を作成します。

<select class="form-control" id="subcategory" name="subcategory" required> 
<?php 
$option_list = array(); 

$categories="SELECT Name,Category FROM SubCategory ORDER BY Category ASC, Name ASC;"; 
$query_categories=mysqli_query($connh,$categories); 

while($rows_categories=mysqli_fetch_array($query_categories)){ 
    $option_list[$rows_categories['Category']][] = $rows_categories['Name']; 
} 

// this is what we're aiming for 
// $option_list = array("Maincat1"=>array("subcat1","subcat2","subcat3"),"Maincat2"=>array("subcat4","subcat5")); 


foreach($option_list as $maincat=>$subcats){ 
    echo "<optgroup label='".$maincat."'>"; 
    foreach($subcats as $subcat){ 
     echo "<option value='$subcat'>$subcat</option>"; 
    } 
    echo "</optgroup>"; 
} 
?> 
</select> 
0
<?php 
$conn = mysqli_connect($mysql_hostname, $mysql_user, $mysql_password,$mysql_database) or die("Could not connect database"); 
$result = mysqli_query($conn,"select distinct Category from SubCategory"); 
echo '<select class="form-control" id="subcategory" name="subcategory" required>'; 
while($row = mysqli_fetch_assoc($result)){ 
    echo '<optgroup label="'. $row['Category'] .'">'; 
    $data = mysqli_query($conn,"SELECT Name,Category FROM SubCategory where Category = '".$row['Category']."'"); 
while($value = mysqli_fetch_assoc($data)){ 
    echo '<option>'. $value['Name'] .'</option>'; 
} 
echo '</optgroup>'; 
} 
echo '</select>'; 
?> 
関連する問題