0

これは私のデータです

id          cost    cat         foreign     colours
--------------------------------------------------------   
385_white   99      swarovski   12          black;blue
386_white   99      swarovski   12          black;blue;green
387_white   99      swarovski   12          yellow;green
389_white   99      swarovski   12          white;silver
385_white   99      swarovski   12          silver

これは私の質問です

$checkSQL=mysql_query("SELECT * FROM `products`");
while($r = mysql_fetch_assoc($checkSQL)) {

    echo '<ul class="ColourList">';
    $cols = explode( ';', $r['colours'] );
    foreach ( $cols as $col ){
        echo '<li class="' . $col . '">' . $col . '</li>';
    }
    echo '</ul>';
}

これは基本的に各レコードの色のリストを返します

<ul>
 <li>black</li>
 <li>blue</li>
</ul>

ただし、データベース全体のすべての色について1つのリストを返し、アルファベット順にしたいと思います。したがって、基本的にすべての色をすべての行で取得し、ABCの順序でリストに分割しますが、繰り返しはしません-これはクライアントのセットアップで可能ですか?方向性が必要ですか?コマンドを考えexplodereplace、それから私たちに?ORDER BY ASC

4

3 に答える 3

3

これは、データベースを正規化しない場合に何が起こるかを示す良い例です。最初は簡単に思えますが、後で問題が発生します。

次のようにテーブルを変更します。

製品:

id          cost    cat         foreign     
--------------------------------------------   
385_white   99      swarovski   12     

ProductColors:

id          color_id     
----------------------
385_white   1                
385_white   2

色:

id          name     
----------------------
1           Black     
2           Blue

このような構造の場合、データベースに必要なものをクエリするのは非常に簡単です。

例:

使用可能なすべての色を照会するには:

select * from colors

利用可能なすべての色をクエリするには385_white

select * from productcolors where id = '385_white'
于 2012-10-02T08:25:23.003 に答える
1

SQLは1回実行されるので、これ

replaceで爆発し、次にORDER BY ASCコマンドを使用することを考えていますか?

できません。

このSQLを試してください

SELECT * FROM `products` ORDER BY colours GROUP BY colours

これはアルファベット順に色で並べ替えられ、次に色でグループ化すると、話している重複が削除されます。

また、データを色の1対多の関係に再構築する必要があります。;セパレータとしてを使用するのは適切ではなく、後で実際の頭痛の種になります。

于 2012-10-02T08:26:44.950 に答える
0

'colors'フィールド(生の表示用の単純なSELECT *以外)に対してクエリを頻繁に実行する必要がある場合は、フィールドを簡単にクエリできるように設計する必要があることを意味します。

つまり、1つのフィールド内に複数のエントリを格納しないでください。クエリを実行して抽出する必要があるたびに、作業が困難になります。

代わりに、「colors」テーブル(colour_id、colour_name)を作成します

および「articlecolors」テーブル(article_id、colour_id)。

このようにして、すべての記事に複数の色を付けることができ、新しい色を追加するのがはるかに簡単になります。また、標準SQLを使用して記事の色に関するクエリを実行できます。重複のない色のリストを取得するのは、「SELECT DISTINCT(colour_name)FROMcolours」と同じくらい簡単です。

于 2012-10-02T08:30:17.680 に答える