我有一个值例如“1”,我在我的数据库表“grp_id
”中有列“tbl_grp
”。此列“grp_id
”包含逗号值,例如“1,2,3
”我正在寻找一种方法来将我的单个值与“grp_id
”列进行比较。
现在我正在使用以下查询:
"SELECT user_id, user_fname, user_lname FROM tbl_grp WHERE grp_id='1'";
答案 0 :(得分:3)
您的数据不是第一范式。如果您遵循第一范式的规则,您将拥有对所有数据的键控访问权限。某些查询可能仍然会导致表扫描,但不是这种。
不要将CSV用于可搜索的项目。将此字段分解为1NF等效值。
另一个答案说,这不是一个多对多的关系。这是一对多的。
答案 1 :(得分:2)
你可以FIND_IN_SET
:
SELECT user_id, user_fname, user_lname FROM tbl_grp WHERE FIND_IN_SET(1, grp_id);
但是,正确的方法是在用户和组之间建立多对多关联,而不是在列中存储以逗号分隔的ID列表,而是这样做:
user(user_id, user_fname, ...)
group(group_id, group_name, ...)
user_group(#user_id, #group_id) // you can have any number of (user_id, group_id) couples
答案 2 :(得分:1)
您正在寻找FIND_IN_SET:
SELECT user_id, user_fname, user_lname
FROM tbl_grp
WHERE FIND_IN_SET('1', grp_id);
答案 3 :(得分:0)
试试这个,
SELECT user_id,user_fname,user_lname FROM tbl_grp WHERE grp_id LIKE'1';
尝试我在db中不是主人,但最好我能建议这个。