所以我有一个这种格式的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中。
有没有办法解决这个问题,还是应该创建一个新表,其中每一行都是每个对象的唯一类别?
由于
答案 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'