1

基本的に、66 冊の聖書のデータベースがあります。旧約聖書からのものもあれば、新約聖書からのものもあります。bname の値は本の名前ですが、bsect の値は O または N (new または old) ですが、bsect が O であるかどうかに基づいて、ドロップダウン ボックスに本を古いまたは新しい optgroup に動的に表示するにはどうすればよいですか?またはN?先生は配列を作らなければならないと言いましたが、やり方がわかりません。何かご意見は?

私のデータベースのサンプル:

+-----------+-------+
| bname     | bsect |
+-----------+-------+
| Genesis   | O     |
| Exodus    | O     |
| Leviticus | O     |
+-----------+-------+

NUMBER OF THE ENTRY に基づいて opgroup を手動で設定する必要はありません。bsect の値に基づいて動的にしたいのです。

現在、レコード番号に基づいて本を古いものまたは新しいものに入れる選択ドロップダウンを備えた次のクエリがありますが、さらに本を追加すると壊れます

    $query = $mysqli->query("select distinct bname as Name from kjv");



?>

<select name="book">
    <?php
    $i=1;
    while($option = $query->fetch_object()){ 
        if($i==1) echo "<optgroup label='Old Testament'>";
        else if($i==40) echo "<optgroup label='New Testament'>";
        echo "<option value='$i'>".$option->Name."</option>";
            $i++;   

    } 

    ?>
4

2 に答える 2

0

これは、php で 2 つの配列を作成する方法です。


$query = $mysqli->query("select distinct bname,bsect from kjv");
while($option = $query->fetch_object()){ 
  if ($option->bsect == 'O'){
    $books_old[] = $option->bname;
  } elseif ($option->bsect == 'N'){
    $books_new[] = $option->bname;
  } else {
    # Error collection - bsect not 'O' or 'N'
  }
}
これで、本のリストである 2 つの配列ができました。$books_old と $books_new。
任意のインデックスではなく、名前を値として使用します。

echo "<optgroup label='Old Testament'>";
foreach($books_old as $this_book){
  echo "<option value=\"$this_book\">$this_book</option>";
}
echo "<optgroup label='New Testament'>";
foreach($books_new as $this_book){
  echo "<option value=\"$this_book\">$this_book</option>";
}
于 2013-10-06T17:41:54.937 に答える
0

単純に bsect で並べ替え、さまざまな optgroup を動的に表示する

<?php
$query = $mysqli->query("SELECT DISTINCT bsect, bname AS Name FROM kjv ORDER BY bsect");    
?>

<select name="book">
<?php
    $i = 1;
    $bsect = "";
    while($option = $query->fetch_object()){ 
        if($bsect != $option->bsect) {
            $bsect = $option->bsect;
            echo "<optgroup label='{$bsect}'>";
        }
        else if($i==40) echo "<optgroup label='New Testament'>";
        echo "<option value='$i'>".$option->Name."</option>";
            $i++;   

    } 
?>

もちろん、あなたの本は故障しているかもしれません。したがって、特定のグループ内の本の順序を定義する番号を格納する book-order 列 (境界線) を追加する必要があります。

ALTER TABLE kjy 
    ADD COLUMN border INT U?NSIGNED NOT NULL DEFAULT 0;

次に、データを更新して適切な本の順序にし、次のようなクエリを実行できます。

SELECT DISTINCT bsect, bname AS Name FROM kjv ORDER BY bsect, border;

もちろん、これは聖書なので、本を追加するつもりはないので、各本の順序を定義する静的な Book ID を定義するだけでよいでしょう。次に、ID で並べ替えるだけで、「古い」本と「新しい」本が正しい順序で出てくることがわかります。

ALTER TABLE kjy 
        ADD COLUMN id INT UNSIGNED NOT NULL PRIMARY KEY BEFORE (bname);
于 2013-10-06T17:31:53.597 に答える