问题描述
我有2张桌子:
帐户
车道
车道包含1列“ boss_id ”,该整数是1到12之间的整数。
我正在尝试使用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
。