mysql选择数组中的数组

时间:2012-09-17 00:30:00

标签: mysql sql select

我正在做一张有多个键盘或标签的桌子, 像这样:

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

我想做一个选择。

从表中选择ID(键盘中的山,图片,空格);

结果必须是: 1行

ID

  

4

请帮帮我。

1 个答案:

答案 0 :(得分: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.id表中引用tags

然后你可以做这个查询,

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 Demo