我有两张桌子colorcode
& users
colorcode
ID colorid colorname
------------------------
1 1 yellow
2 2 black
3 3 red
4 4 white
users
ID userid colorid
------------------------
1 1 1,2
2 2 3,4
3 3 1,3,4
4 4 1
如何检索&查询个人colorid
$aa = $db->query("SELECT * FROM colorcode");
$colors = array();
while ($colordata = mysql_fetch_assoc($aa)) {
$colors[] = $colordata["colorid"];
}
假设我想查询哪些用户有yellow
颜色&我应该为users
SELECT .. FROM users
WHERE colorid ....
答案 0 :(得分:1)
这是一个糟糕的设计......因为你试图访问用户表中的各个color_ids,但是将它们存储为以逗号分隔的列表,你可以让数据库为你做一个正常的连接 - 你'通过使数据库不可能为您做相关而无法使用关系数据库。
但是,既然你使用的是mysql,那么你很幸运 - mysql具有以下功能:
SELECT users.ID, userid, GROUP_CONCAT(colorcode.colorname)
FROM users
LEFT JOIN colorcode ON FIND_IN_SET(colorcode.ID, users.colorid)
GROUP BY users.id
答案 1 :(得分:0)
SELECT * FROM users
WHERE colorid LIKE "%1%"
但是我真正要做的是创建一个从用户到颜色的链接表:
usersToColors:
ID userid colorid
------------------------
1 1 1
2 1 2
3 2 3
4 2 4
...
然后你可以这样做:
SELECT * FROM users u, usersToColors utc
WHERE u.userid = utc.userid
AND utc.colorid = 1;
甚至:
SELECT * FROM users u, usersToColors utc, colors c
WHERE u.userid = utc.userid
AND utc.colorid = c.colorid
AND c.colorname = "yellow";