1

私は次のように、複数のキーボードまたはタグを使用してテーブルを作成しています。

id |   keyboards
===+================================================
1  |     picture,mountain,animals 
2  |     water,mountain
3  |     sound, mountain
4  |     water, picture, mountain, space, other

そして私は選択をしたいです。

キーボードの(山、画像、スペース)のテーブルからIDを選択します

結果は次のようになります:1行

id

4.4。

私を助けてください。

4

1 に答える 1

2

データベースの正規化が不十分です。最善の方法は、テーブルを作成することですKeyboards

CREATE TABLE Keyboards
(
    Keyboard_ID INT AUTO_INCREMENT,
    KeyBoardName VARCHAR(25),
    CONSTRAINT kbrd_pk PRIMARY KEY (Keyboard_ID),
    CONSTRAINT kbrd_uq UNIQUE(KeyboardName)
)

CREATE table Tags
(
    ID INT AUTO_INCREMENT,
    Keyboard_ID int,
    CONSTRAINT tags_pk PRIMARY KEY (ID),
    CONSTRAINT tags_pk FOREIGN KEY (keyboard_ID) REFERENCES keyboards(keyboard_ID)
)

次に、表を参照keyboards.idtagsます。

次に、このクエリを実行できます。

SELECT id,
FROM   tags a
       INNER JOIN keyboards b
           ON a.keyboard_id = b.keyboard_ID
WHERE  b.keyboardName IN ('mountain','picture','space')
GROUP BY ID
HAVING COUNT(DISTINCT b.keyboardName) = 3

しかし、あなたの質問に答えるために、あなたは単にこれをすることができます

select *
from tags
where keyboards like concat('%','mountain','%') AND
      keyboards like concat('%','picture','%') and
      keyboards like concat('%','space','%')

SQLFiddleデモ

于 2012-09-17T00:41:01.063 に答える