时间:2021-07-01 10:21:17 帮助过:36人阅读
我想建个技能表 表的字段为 id , skill
另一个是人的信息表 字段为 id,sid,info其中sid是链接两个表的字段sid=技能表中的id
现在问题是每个人不一定有一个技能 每个人的sid中可能有好几个数 我用什么办法可以读取每个人的技能信息
技能表k,人物表p
select ta.*,tb.skill from p as ta left join k as tb on ta.sid=tb.id;
你还少张表啊
多对多关系,建议建多张关系表,比如relation
字段可以设置为sid,跟用户id,假设为uid
那么
select uid from relation where sid='xxx'
是拥有某个技能的人
select sid from relation where uid='xxx'
为某个人拥有的技能
当然要再读取适当联表信息
在加一张关系表就行了,用户表把sid去掉
这是一对多的问题
人表(t_user)
id , username
人 技能 关联表(user_skill)
id user_id skill_id
技能表(skill)
id,skill
SELECT
t_user.id,
t_user.username,
skill.id,
skill.skill
FROM
t_user
LEFT JOIN user_skill ON t_user.id = user_skill.user_id
LEFT JOIN skill ON skill.id = user_skill.skill_id
where t_user.id = '1' -- 差找用户id为1 的技能列表
用户信息表:info
用户技能表:jineng
思路:通过PHP先取出某用户的sid,然后通过字符串切割成数组的方式得到多技能用户的每个技能对应的sid,最后拼接sql语句。
要求:在info表中保存多个sid时需要用指定符号分开,例如:1;2;3;4
PHP:(这边以分号分割sid)
function user_skill($id){
$sid=mysql_fetch_assoc(mysql_query("select * from info where id=$id"))['sid'];
$arr=explode(';',$sid);
$sql="select skill from jineng where id in(";
foreach ($arr as $v)
{
$sql.=$v.',';
}
$sql=substr($sql,0,strlen($sql)-1);
$query=mysql_query($sql);
// while循环便可输出所有的id为$id的用户的所有技能
}
1、技能表
2、用户信息表
一个用户可以有多项技能,但某一项技能可以被多个用户所应有!所以技能表和用户信息表之间的关系是多对多。
既然是多对多关系,那么就需要一张中间表(用户技能表)