我想建個技能表 表的欄位為 id , skill
另一個是人的資訊表 欄位為 id,sid,info其中sid是連結兩個表的欄位sid=技能表中的id
現在問題是每個人不一定有一個技能 每個人的sid中可能有好幾個數 我用什麼辦法可以讀取每個人的技能資訊
回複內容:
我想建個技能表 表的欄位為 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、使用者資訊表
一個使用者可以有多項技能,但某一項技能可以被多個使用者所應有!所以技能表和使用者資訊表之間的關係是多對多。
既然是多對多關係,那麼就需要一張中間表(使用者技能表)