回答

收藏

MySQL WHERE问题,以逗号分隔的列表

技术问答 技术问答 48 人阅读 | 0 人回复 | 2023-09-13

我需要这个问题的帮助。
' }0 N1 l( Q- S/ O7 N1 }6 w在MYSQL表中,我有一个字段:. k$ _$ h( T) M( R
Field  : artist_list  7 ?7 N9 t$ E: i
Values : 1,5,3,401
3 {" @% w& E+ a) [" w9 V我需要找到艺术家uid 401的所有记录
4 y/ q4 R4 c! U6 `: ?; `6 ^我做这个% v5 _$ z2 _% ~/ S2 H2 A* S
SELECT uid FROM tbl WHERE artist_list IN ('401');
! I8 o- e1 b+ Y+ u) u2 [* G我所有记录的artist_list字段值仅是“ 401”,但是如果我有11,401,则此查询不匹配。
4 T" t0 I+ ^3 S' F& i% s6 G任何的想法 ?( o, D/ ^2 o  M
(我无法使用LIKE方法,因为如果艺术家uid为3(匹配30、33、3333)…$ I3 _' J% {$ x& _! a
                & g2 j1 y; ?& o4 f+ [. w
解决方案:* j% ]( f1 R5 m' ]: G  z7 m
                9 X& k' B  l) d' {& N% \$ K. W
" y9 h6 Q* \' l; z* \
; R% Z+ y& W) u4 p0 \
                短期解决方案- x- R5 g$ }- o, `1 h
使用FIND_IN_SET函数:
% Y( d* j, V- }+ O# }/ u8 q. qSELECT uid % I' |/ C% w. \( O$ `; e
  FROM tbl 9 I) O4 P* K% |( w% a& b" C
WHERE FIND_IN_SET('401', artist_list) > 0' E6 D6 e8 D- [' k# k9 {
长期解决方案, L0 K$ \# c0 c
标准化您的数据-这似乎是一个已经涉及两个表的多对多关系。逗号分隔的列表需要变成一个自己的表:5 K5 K2 m' H+ Q/ n0 P& {
ARTIST_LIST; u: ~* F9 N9 @8 l( J
artist_id (primary key, foreign key to ARTIST)
9 c: j3 n7 {+ J2 }uid (primary key, foreign key to TBL)
/ @  y1 n+ i+ G. U8 o
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则