SQL选择LIKE

时间:2015-07-16 00:00:27

标签: mysql sql

所以我有一个这种格式的SQL表。

items
Field       Type        Null    Key Default Extra   
id          int(11)     NO      PRI NULL    auto_increment
name        varchar(30) NO          NULL    
categories  varchar(255)NO          NULL

我正在用这样的值填充表格:

id: 1, name: "Object", categories: 1, 4, 5
id: 2, name: "Object 2", categories: 10, 14, 19

因此,我们的想法是每个对象可以拥有任意数量的类别。

如果我运行此查询以从类别1获取每个对象

SELECT * FROM `items` WHERE `categories` LIKE '%1%';

它返回两个对象,即使我真的只想要第一个对象,因为它特别是在类别1中。

有没有办法解决这个问题,还是应该创建一个新表,其中每一行都是每个对象的唯一类别?

由于

1 个答案:

答案 0 :(得分:6)

这种 n到m 关系的默认表格设计是

items table
-----------
id
name
...


categories table
----------------
id
name
...


item_categories table
---------------------
item_id
category_id

如果您想要选择特定类别的所有项目,您可以

select i.*
from items i
join item_categories ic on ic.item_id = i.id
join categories c on ic.category_id = c.id
where c.name = 'my category 1'