我有一张如下表所示的表格。
entityId | mId | supertTypes | SubTypes
------------------------------------------------------------
12 | /m.098yu | /m.0yhtg, /m.089hj0__ | Null
13 | /m.kju_c_| /m.0ypwec, /m.0bnm0__, /m.0hgt | /m.098yu
我的查询是:
select mId from table where superTypes= /m.0yhtg;
答案应为 /m.098yu
我根据page1和page2编写了以下问题,但我无法得到正确的结果。
select mId from table where supertypes RLIKE "[[:<:]]/m.0yhtg[[:>:]]";
Select mId from table where supertypes LIKE '/m.0yhtg';
我该如何解决这个问题?
答案 0 :(得分:1)
您可以使用find_in_set
,但这需要一个没有空格的列表。因此,您需要先使用replace
Select mId from table
where find_in_set('/m.0yhtg', replace(supertypes, ' ', '')) > 0
但实际上你应该改变你的桌面设计。永远不要在一列中存储多个值!
更好的数据库设计是添加新表
entities table
--------------
entityId
mId
types table
----------------
id
name
entity_types table
------------------
entity_id
type_id
is_super_type
您可以添加另一个名为is_super_type
的表,而不是字段entity_subTypes
,而是将entity_types
表entity_supertypes
命名为。