比较来自不同表的2个mysql列值

问题描述

我有2张桌子:

帐户

车道

车道包含1列“ boss_id ”,该整数是1到12之间的整数。

帐户包含多个列,包括用户名密码 boss_id

我正在尝试使用PHP显示 lanes 表中的所有项目,效果很好!但是,我还需要显示帐户”中的用户是否也共享或具有相同的 boss_id 显示不同的输出

常规输出(无匹配帐户)

foreach ($boss_id as $boss) {
    echo "Lane " . $boss . "<br>;
}

如果有匹配的帐户,请显示该帐户

echo "Lane booked by " . $username. "<br>;

我已经花了很多时间,并且确实需要一些帮助,因为我似乎无法弄清。

任何帮助都会很棒!如果您需要更多信息,请询问!

预先感谢 E

这是我到目前为止所拥有的(变量的名称可能有所不同,但是您应该明白这一点!)

$db_host     = "localhost";
  $db_username = "root";
  $db_password = "";

  //connect to MysqLi database (Host/Username/Password)
  $connection = MysqLi_connect($db_host,$db_username,$db_password) or die("Error " . MysqLi_error());

  //select MysqLi dabatase table
  $db = MysqLi_select_db($connection,"archery-booking") or die("Error " . MysqLi_error());

  // get ALL lanes from database table "lanes"
  $sql = MysqLi_query($connection,"SELECT * FROM lanes");
  while($row = MysqLi_fetch_array($sql)) {
   $bossid[] = $row['bossid'];
  }

  // save each result as a variable
  foreach ($bossid as $compare) {
    $compare = $compare;
  }

  // get ALL BOOKED lanes from database table "accounts"
  $sqluser = MysqLi_query($connection,"SELECT * FROM accounts WHERE boss_id = '".$compare."' ");
  while($row = MysqLi_fetch_array($sqluser)) {
   $bookedboss[] = $row['boss_id'];
  }

更新

所以我没有做任何更改,也没有获取lane.boss_id和accounts.boss_id的信息

但是,我仍然需要执行以下操作:

如果lane.boss_id没有附加帐户,请执行此操作;如果没有帐户,请执行此操作。

检查此状况的最佳方法是什么?我本打算在“用户名”上使用if / else,但我收到有关非法字符串偏移的错误....到目前为止,这是我的代码

$db_host     = "localhost";
  $db_username = "root";
  $db_password = "";

  //connect to MysqLi database (Host/Username/Password)
  $connection = MysqLi_connect($db_host,"SELECT l.*,a.username FROM lanes l LEFT JOIN accounts a ON a.boss_id = l.bossid");
    while($row = MysqLi_fetch_array($sql)) {
     $bossid[] = $row['bossid']['username'];
     var_dump($bossid);
    }

更新3

非常感谢您的帮助,我们确实取得了进步!! :D

尽管我有1个最终要求,但希望你们能提供帮助! :)

所以,在我的脚本中,我有以下内容

if (isset($uname)) {
       echo "<div class='col-xl-3 col-lg-3 col-md-6 col-sm-6 col-xs-6'>
                  <div class='card bg-normal'>
                  <div class='card-header day1'>
                  <p>Lane booked from 6.00pm</p>
                  </div>
                  <div class='card-body'>";
        echo "<h2 class='lane-title taken'>Lane " . $bossid . "</h2>";
        echo "<p class='lead'>Booked by " . $uname . "</p>";
        echo "</div>
                  </div>
                  </div>";
     } else {
       echo "<div class='col-xl-3 col-lg-3 col-md-6 col-sm-6 col-xs-6'>
                  <div class='card bg-normal'>
                  <div class='card-header day1'>
                  <p>Lane booked from 6.00pm</p>
                  </div>
                  <div class='card-body'>";
        echo "<h2 class='lane-title'>Lane " . $bossid . "</h2>";
        echo "Lane Available";
        echo "</div>
                  </div>
                  </div>";
    }

这很好用,可以输出所需的一切,但是...我需要的是以下内容

此刻,从上面的代码开始,如果明细1和2在boss_id 5上,那么boss_id 5有2个实体,我只需要1个实体同时显示明细1和2。

希望这有道理!! :)

TIA E

解决方法

您似乎想要一个LEFT JOIN

SELECT l.*,a.username
FROM lanes l
LEFT JOIN accounts a ON a.boss_id = l.boss_id

accounts中有一个boss_id匹配的重录时,这会将相应的username带到结果集中。如果没有匹配项,则username就是null

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...