3

selectフィールドに PHPを入力しようとしています。問題は、データベースで値が一致するものを2回表示しているため、それらを表示する方法がわからないことです。これは、選択したものとしてエコーし、すべての結果をループしているためです。selectedフィールド値に一致したものを表示してから、選択したものと一致しないものをすべて表示するにはどうすればよいですか?

テーブルのカテゴリ

cat_id  cat_name
1       soccer
2       baseball
3       basketball

テーブル記事

art_id art_cat_id
1      1

PHP/HTML

<select name="category">
<?php
    $sql = "SELECT cat_id cat_name, art_id, art_cat_id 
            FROM categories LEFT JOIN articles
            ON categories.cat_id = articles.art_cat_id
            WHERE art_id = 1";
    $result = query($sql);

    if($result===false) {
        echo("Query Fail");
    }
    else {
        ?>
        <option value="<?php echo $data['art_cat_id'] ?>" selected="selected"><?php echo $data['cat_name'] ?></option>
        <?php
        while( $data = mysqli_fetch_array($result)) {

        ?>     
        <option value="<?php echo $data['cat_id'] ?>"><?php echo $data['cat_name'] ?></option>
        <?php
        }
    }
    ?>
</select>

返されるもの

<select name="category">
    <option value="1" selected="selected">soccer</option>
    <option value="1">soccer</option>
    <option value="2">baseball</option>
    <option value="3">basketball</option>
</select>

私が探しているもの

<select name="category">
    <option value="1" selected="selected">soccer</option>
    <option value="2">baseball</option>
    <option value="3">basketball</option>
</select>
4

1 に答える 1

3

値が最初のものと一致する場合、行をスキップします。

スニペット:

    ?>
    <option value="<?php echo $data['art_cat_id'] ?>" selected="selected"><?php echo $data['cat_name'] ?></option>
    <?php
    while( $data = mysqli_fetch_array($result)) {
        if ($data['art_cat_id'] == $data['cat_id']) continue;
    ?>     
    <option value="<?php echo $data['cat_id'] ?>"><?php echo $data['cat_name'] ?></option>
    <?php
    }
于 2013-03-31T19:25:09.707 に答える