【问题标题】:Select rows from a table2 based on a value from table1根据 table1 中的值从 table2 中选择行
【发布时间】:2018-02-12 10:08:42
【问题描述】:

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

表一

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

因此,从表中可以看出,Ali 拥有站点 6、7、8,而 Jack 仅拥有站点 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
    -------------------------------------------

谁能建议我如何做到这一点。谢谢

【问题讨论】:

  • 使用左连接

标签: php mysql sql database mysqli


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多