php - INNER JOIN 中 SELECT IF 的 Mysql 结果

标签 php mysql 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 部分没有获得 otheruser 结果,因此输出为“无结果”

我的尝试如下:

$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 函数,但两者都有效。

尝试这些命令并检查 this fiddle .

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);

关于php - INNER JOIN 中 SELECT IF 的 Mysql 结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51844843/

相关文章:

php - 使用 foreach 代替 while 循环循环 mysql_fetch_assoc

javascript - PHP弹出sql查询结果

mysql - mysql中的内连接中的子选择仅得到一个结果

mysql - 使用基于另一个已填充表的 INNER JOIN UPDATE 语句更新空表

sql - FULL OUTER JOIN有点内

javascript - 使用下拉菜单刷新页面

PHP + 锁定 MySQL 表失败

PHP-htaccess-输出缓冲

mysql - 完整的数据库完整性(多 5 倍的表)与模仿 rdbms 中的 oo 概念

php - GTmetrix 表示从一致的 URL 提供资源