【发布时间】:2014-09-01 19:33:12
【问题描述】:
当我搜索“new1”时如何获取所有用户名。例如:我应该获取 A 和 B,因为 tblC 中的用户 ID 1,2 对于具有 new1 的 row1 是 1,2。我应该使用什么查询来获取以上结果?
非常感谢任何帮助。在此先感谢。
http://sqlfiddle.com/#!2/1ab8e/2
CREATE TABLE if not exists tblA
(
id int(11) NOT NULL auto_increment ,
user varchar(255),
category int(255),
PRIMARY KEY (id)
);
CREATE TABLE if not exists tblB
(
id int(11) NOT NULL auto_increment ,
username varchar(255),
userid int(255),
PRIMARY KEY (id)
);
CREATE TABLE if not exists tblC
(
id int(11) NOT NULL auto_increment ,
nname varchar(255),
userids varchar(255),
PRIMARY KEY (id)
);
INSERT INTO tblA (user, category ) VALUES
('1', '1'),
('1', '2'),
('1', '3'),
('1', '1'),
('2', '1'),
('2', '1'),
('2', '1'),
('2', '1'),
('3', '1'),
('2', '1'),
('4', '1'),
('4', '1'),
('2', '1');
INSERT INTO tblB (userid, username ) VALUES
('1', 'A'),
('2', 'B'),
('3', 'C'),
('4', 'D'),
('5', 'E');
INSERT INTO tblC (id, nname,userids ) VALUES
('1', 'new1','1,2'),
('2', 'new2','1,3'),
('3', 'new3','1,4'),
('4', 'new4','3,2'),
('5', 'new5','5,2');
查询至今:
select * where nname="new1" from tblC
CROSS JOIN tblB
ON tblB.userid=(SELECT userids FROM substr(tblC.userids,','))
【问题讨论】:
-
您需要阅读 TABLE NORMALIZATION
-
@Prix 但是我怎么能这样匹配呢?有可能吗?
-
应该可以使用
ON (FIND_IN_SET(tblB.userid, tblC.userids) > 0)但这会更好正常化。