2

コンマ区切りの値として値を保存しているため、機能と呼ばれるフィールドがあります。選択中に、コンマ区切りの値の対応する名前を取得する必要があります

table1- feature

id    feature_names
1        A
2        B
3        C
4        D
5        E

table2- car

id   car    feature_ids

1    Zen    2,3,4   // features = B,C,D
2    Benz   1,2     // features = A,B
3    Audi   4,5     // features  = D,E

車のテーブルを選択しているときに、カンマ区切りの値の対応する名前を取得する方法は?

4

3 に答える 3

2

データベースを再設計します。

  • 機能-ID、名前
  • -ID、名前
  • car_feature -car_id、feature_id

その後、JOINクエリでを使用できます。このようなもの:

SELECT car.*, feature.name FROM car
    JOIN car_feature ON car_feature.car_id = car.id
    JOIN feature ON feature.id = car_feature.feature_id

リレーショナルデータベースのようなコンマ区切りのフィールドは使用しないでください。そのフィールドに基づいてクエリを記述したい場合は、確かにそうではありません。それが機能しているように見えても、それはすぐに非常に非効率になり、保守できなくなります。

あなたのシナリオは、テーブル間の多対多の関係と呼ばれます-車は任意の機能を持つことができ、機能は任意の車に属することができます。私が概説した手法は、相互参照テーブルと呼ばれます。適切なMySQLチュートリアルと記事を検索するために、すべてのキーワードを指定しました。次に例を示します。

于 2012-08-23T10:46:56.063 に答える
1

次のことを試すことができます。

select 
    a.id,
    a.car,
    group_concat(b.feature_names) as Features
from
    car a
        join feature b
            on b.id in (cast(b.feature_ids as char));

そうは言っても、データベース内で CSV を使用するべきではありません。特徴ごとに 1 行を取り、 carテーブルに追加の行をいくつか作成します。

于 2012-08-23T10:48:35.393 に答える
-1
SELECT car FROM table2 WHERE feature_ids LIKE '%3%'
于 2012-08-23T10:46:57.597 に答える