我有2张桌子
用户
User Role Skill1 Skill2 Skill3 Skill4
user1 TSR Yes No Yes No
user2 CSR No Yes No Yes
user3 TSR Yes Yes Yes No
问题
Question Role Skill1 Skill2 Skill3 Skill4
Quest 1 CSR Yes Yes No No
Quest 2 TSR No Yes Yes No
Quest 3 TSR No Yes No Yes
Quest 4 TSR No No No Yes
Quest 5 CSR Yes Yes Yes No
我想根据用户的角色和技能搜索问题。
例如。如果user1具有带有Skill1和skill3的TSR角色,那么问题的结果是quest1,quest2和quest5。
这是我的代码,但结果不是我想要的结果:
$query1 = mysql_query("SELECT * FROM users WHERE Username='$user' ") or die(mysql_error());
while($validaterow = mysql_fetch_row($query1)){
$takenyes = $validaterow[6];
$tsr = $validaterow[5];
$csr = $validaterow[5];
$au = $validaterow[8];
$eu = $validaterow[9];
$me = $validaterow[10];
$jp = $validaterow[11];
$ca = $validaterow[12];
$na = $validaterow[13];
}
$sql="SELECT * FROM question WHERE (tsr='$tsr' OR csr='$csr') AND (skill1='$skill1' OR skill2='$skill2' OR skill4='$skill4' OR skill5='$skill5')";
$result=mysql_query($sql);
答案 0 :(得分:0)
根据您的示例结果,role
根本不起任何作用。你只想在有"是"在两个表的相应行中。
您可以使用join
:
select q
from users u join
questions q
on u.Username='$user' and
(u.skill1 = 'yes' and q.skill1 = 'yes' or
u.skill2 = 'yes' and q.skill2 = 'yes' or
u.skill3 = 'yes' and q.skill3 = 'yes' or
u.skill4 = 'yes' and q.skill4 = 'yes'
) ;
两条评论:你应该学会使用" mysqli _"或PDO而不是过时的" mysql _"接口。在此过程中,学习参数化查询。
其次,当您在具有相同名称的表中有多个列(例如技能)时,这通常表示您要对表进行规范化。也就是说,让另一个表UserSkills
每个用户一行,每个技能一行。同样适用于questions
表。