表1至表2的标准结果

时间:2014-07-28 22:06:54

标签: php sql

我有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);

1 个答案:

答案 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表。