簡體   English   中英

Mysql結果來自INNER JOIN中的SELECT IF

[英]Mysql result from SELECT IF in INNER JOIN

我想從兩個表中獲取數據。 從第一個表中,我需要所有名稱,這些名稱不是已登錄用戶的名稱,但是已登錄用戶的名稱必須在這兩列之一中。 我想使用該結果從第二張表中獲取第一張表中給出的每個名稱的照片名稱。

 table 1 names
+++++++++++++++++++++++++
id | name1   | name2    |
+++++++++++++++++++++++++
1  | john    | lea      |<- i need lea because john is in one of those two columns
-------------------------
2  | peter   | john     |<- i need peter because john is in one of those two columns
-------------------------
3  | mark    | paola    |<- no john here so query should ignore
__________________________

table 2 users
+++++++++++++++++++++++++
id | name    | photo    |
+++++++++++++++++++++++++
1  | lea     | la.jpg   |<- I want to use lea given with SELECT IF to get name of photo
-------------------------
2  | peter   | pt.jpg   |<- I want to use peter given with SELECT IF to get name of photo
-------------------------
2  | mark    | mk.jpg   |<- no match from SELECT IF so query should ignore
-------------------------

我的SELECT IF或CONCAT工作正常,但是當我嘗試將其與INNER JOIN一起使用時,根本沒有結果。 我的代碼:

$username = 'john';
$sql = "SELECT IF( name1 = '$username', name2, name1 ) AS otheruser
FROM names
WHERE name1 = '$username' OR name2 = '$username'";

上面的代碼可以正常工作。 現在,我正在嘗試使用INNER JOIN添加另一個查詢表。 顯然,代碼的INNER JOIN部分不會獲得其他用戶結果,因此輸出為“ no results”

我的嘗試如下所示:

$sql = "SELECT IF(names.name1 = '$username', names.name2, names.name1) AS otheruser, users.photo
FROM names
INNER JOIN users ON users.name = 'otheruser'
WHERE names.name1 = '$username' OR names.name2 = '$username'";
$result = $conn->query($sql);
if ($result->num_rows > 0) {

while($row = $result->fetch_assoc()) {
$names = $row['otheruser'];
$photos = $row['photo'];
}
} else {echo "no results";}

在這些情況下,我經常喜歡使用COALESCE函數,但是兩者都可行。

嘗試這些命令並檢查此小提琴

SELECT IF (name1 = 'john', name2, name1) FROM names WHERE name1 = 'john' or name2='john';

SELECT COALESCE (IF (name1 = 'john', null, name1), IF (name2 = 'john', null, name2)) FROM names WHERE 'john' IN (name1, name2);

SELECT u.username as otheruser, u.photo FROM users u
INNER JOIN names n 
    ON u.username = COALESCE(IF (name1 = 'john', null, name1), IF (name2 = 'john', null, name2))
WHERE 'john' IN (n.name1, n.name2);

您不能在where條件中使用別名(SQL解析器在where條件之后評估select where condition因此它不知道您使用的選擇別名),您應該重復代碼

"SELECT IF(names.name1 = '$username', names.name2, names.name1) AS otheruser, users.photo
  FROM names
  INNER JOIN users ON users.name = IF(names.name1 = '$username', names.name2, names.name1)
  WHERE names.name1 = '$username' OR names.name2 = '$username'";

暫無
暫無

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

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