2011-02-25 48 views
0

我正在对每个访问级别有多个表的系统进行一些维护。在几个表中搜索一个值PHP + Mysql

我需要在每个表格中验证一个名为IID的字段,以便我可以看到该人的访问级别。

谁言代码中使用三个独立的搜索:

$var->exeQuery("SELECT iid FROM leve11 WHERE iid=$iid"); 
$var->exeQuery("SELECT iid FROM leve13 WHERE iid=$iid"); 
$var->exeQuery("SELECT iid FROM leve12 WHERE iid=$iid"); 

我知道,我可以使用JOIN做,但我做错了什么,因为什么都不会返回。

我是一个noob! :)

+2

这告诉我,有你的数据库结构有问题,你应该有'SELECT * FROM table WHERE iid = $ id AND level IN(11,12,13)',你为什么选择你的iid,如果你已经有了它:/ – RobertPitt 2011-02-25 17:07:40

+0

他可能希望看看iid是否存在,但我agre e,不需要检查iid。 – luckytaxi 2011-02-25 17:22:20

回答

0
select 
    t.iid, l1.iid as Level1, l2.iid as Level2, l3.iid as Level3 
from 
    master_table t 
left join 
    level1 l1 on t.iid = l1.iid 
left join 
    level2 l2 on t.iid = l2.iid 
left join 
    level3 l3 on t.iid = l3.iid 
where 
    t.iid = $iid 

用户已不返回Null作为结果的任何水平。

0

怎么是这样的:

select iid from level1 
inner join level2 on level1.iid = level2.iid 
inner join level3 on level3.iid = level2.iid 
where level1.iid = $iid 
1
 SELECT iid FROM level1 WHERE iid=$iid 
    UNION ALL 
    SELECT iid FROM level2 WHERE iid=$iid 
    UNION ALL 
    SELECT iid FROM level3 WHERE iid=$iid 

,或者如果信息是不同的,你想加入,而不是工会....

SELECT level1.iid, level2.iid, level3.iid FROM level1 
    LEFT JOIN level2 
    ON level1.iid = level2.iid 
    LEFT JOIN level3 
    on level2.idd = level3.iid 
    WHERE iid=$iid