簡體   English   中英

比較來自不同表的 2 個 mysql 列值

[英]Compare 2 mysql column values from different tables

我有 2 張桌子:

帳戶

車道

Lanes包含 1 列“ boss_id ”,它是 1 到 12 之間的 INT

帳戶包含各種列,包括用戶名密碼boss_id

我正在嘗試使用 PHP 來顯示車道表中的所有項目,這很好用! 但是,我需要做的是顯示來自“帳戶”的用戶是否也共享或具有相同的boss_id並顯示不同的輸出:

常規輸出(無匹配賬戶)

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

如果有匹配的帳戶,請顯示此信息

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

我花了很多時間在這上面,真的需要一些幫助,因為我似乎無法弄清楚。

任何幫助都是極好的! 如果您需要更多信息,請詢問!

提前致謝

這是我到目前為止所擁有的(變量名稱可能不同,但您應該明白!)

$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, $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 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 個帶有“FREE”標簽的實體

  • 如果用戶名 + 詳細信息 = 1,則顯示 1 個帶有標簽“TAKEN BY $username”的實體

  • 如果用戶名 + 詳細信息 = 1 AND 2,顯示 1 個帶有標簽“TAKEN BY $username1 and $username2”的實體

目前,根據上面的代碼,如果細節 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_idboss_id匹配的記錄時,這會在結果boss_id帶來相應的username 如果沒有匹配項,則usernamenull

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM