根据table1中的值从table2中选择行

时间:2018-02-12 10:08:43

标签: php mysql sql database mysqli

我正在尝试从表格中检索数据,我希望从表格中获取所有行,其中列可以是多个值,即

表1

Id     User   SiteID
--------------------
 1  -  Ali   -  6
--------------------
 2  -  Ali   -  7
--------------------
 3  -  Ali   -  8
--------------------
 4  -  Jack  -  20
--------------------

所以从表中可以看出,阿里有6,7,8个站点,而杰克只有站点20。现在我有另一张桌子

表2

    Id     Event         Location     SiteID
    -------------------------------------------
     1  -  Fire       -  Room 22      -  101
    -------------------------------------------
     2  -  Fault      -  Reception    -  6
    -------------------------------------------
     3  -  Isolation  -  Student Hall -  7
    -------------------------------------------
     4  -  Bomb Alert -  Floor 3      -  8
    -------------------------------------------

我想从表2中选择数据,其中SiteID是Ali所拥有的网站,即Ali拥有SiteID的6,7,8。

所以最初使用php我可以使用以下内容从表1中获取记录:

 $query="SELECT * FROM Table1 WHERE User='Jack'";
                $result = mysqli_query($con,$query) or die(mysql_error());
                while($row11=mysqli_fetch_array($result,MYSQLI_ASSOC)){ 
                    $site=$row11["SiteID"];
                    echo $mySite;      
}

现在我想从表2中选择SiteID是分配给Ali的站点,即站点6,7,8。

所以,我尝试了以下但是它没有完成任务:

$sql_query="SELECT * FROM Table2 WHERE SiteID='$site' ORDER BY Id DESC LIMIT 300";
                $result_set=mysqli_query($con,$sql_query);

                   while($row=mysqli_fetch_array($result_set,MYSQLI_ASSOC))
                    {

                        echo $row["Event"];
                        echo $row["Location"];
                   }

然而,这并不能给我带来渴望的结果。我希望表2中的所有事件和位置,其中该站点是Ali在表1中所拥有的站点,因此所需的结果应该为我提供以下内容。

     Id     Event         Location     SiteID
    -------------------------------------------
     2  -  Fault      -  Reception    -  6
    -------------------------------------------
     3  -  Isolation  -  Student Hall -  7
    -------------------------------------------
     4  -  Bomb Alert -  Floor 3      -  8
    -------------------------------------------

任何人都可以建议我如何做到这一点。感谢

2 个答案:

答案 0 :(得分:1)

您可以使用一个查询而不是两个:

SELECT Table2.*
FROM Table1
INNER JOIN Table2 ON Table1.SiteID = Table2.SiteID
WHERE Table1.User = 'Ali'
ORDER BY Id DESC
LIMIT 300

答案 1 :(得分:1)

将t2。*更改为您想要仅显示的所需列。 例如:t2.SiteID,t2.xxxx

SELECT t1.*, t2.*
FROM table1 t1
 LEFT JOIN table2 t2 ON t1.SiteID = t2.SiteID
WHERE user = ‘Jack’