使用COALESCE和LEFT JOIN将SQL查询转换为PHP

问题描述

我有2张桌子:

用户

ID   usr_login  user_email        display_name
1    john       john@gmail.com    John Jones    
2    steve      steve@att.com     Steve Jobs    
3    tom        tom@verizon.net   Tom Thumb

userMeta

uMeta_id  user_id   Meta_key    Meta_value    
1         1         phone       8005551212    
2         1         email       john@gmail.com    
3         1         b_date      12/25    
20        2         phone       2025554567    
21        2         email       steve@att.com    
22        2         b_date      11/01    
40        3         phone       9095559876    
41        3         email       tom@verizon.net    
42        3         b_date      01/30

Nick可以帮助我整理一个SQL查询,以这种格式成功显示数据:

User1-displayName     User1-eMailAddress     User1-Phone     User1-Bdate
User2-displayName     User2-eMailAddress     User2-Phone     User2-Bdate
User3-displayName     User2-eMailAddress     User3-Phone     User3-Bdate

这是Nick的SQL查询

SELECT u.display_name,COALESCE(e.Meta_value,'') AS user_email,COALESCE(p.Meta_value,'') AS phone,COALESCE(b.Meta_value,'') AS bdate
FROM users u
LEFT JOIN userMeta e ON e.user_id = u.ID AND e.Meta_key = 'email'
LEFT JOIN userMeta p ON p.user_id = u.ID AND p.Meta_key = 'phone'
LEFT JOIN userMeta b ON b.user_id = u.ID AND b.Meta_key = 'b_date'
ORDER BY u.ID

由于并非所有用户都有b_date数据,因此我们必须使用合并。

我想用PHP文件生成相同的结果,以在网页上显示数据。

这是我尝试过的PHP代码代码返回“ 0结果”。

如果我注释掉COALESCE,FROM,LEFT JOIN和ORDER BY行,则会得到ID,名称和电子邮件地址的用户列表。

<?PHP
$servername = "localhost";
$username = "adminuser";
$password = "mypass";
$dbname = "website";

// Create connection
$conn = new MysqLi($servername,$username,$password,$dbname);
// Check connection
if ($conn->connect_error) {
  die("Connection Failed: " . $conn->connect_error);
}

$sql = '';
$sql .= "SELECT ID,display_name,user_email from users";
$sql .= "COALESCE(e.Meta_value,'') AS user_email";
$sql .= "COALESCE(p.Meta_value,'') AS phone";
$sql .= "COALESCE(b.Meta_value,'') AS b_date";
$sql .= "FROM users u";
$sql .= "LEFT JOIN userMeta e ON e.user_id = u.ID AND e.Meta_key = 'user_email'";
$sql .= "LEFT JOIN userMeta p ON p.user_id = u.ID AND p.Meta_key = 'phone'";
$sql .= "LEFT JOIN userMeta b ON b.user_id = u.ID AND b.Meta_key = 'b_date'";
$sql .= "ORDER BY u.ID";
$sql = '';

$result = $conn->query($sql);
    echo "ID &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Name &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Email Address &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Phone &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Birthdate". "<br>";
    
if ($result->num_rows > 0) {
  // output data of each row
  while($row = $result->fetch_assoc()) {
    echo $row["ID"]. "&nbsp;&nbsp;" . $row["display_name"]. "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;" . $row["user_email"]. "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;" . $row["phone"]. "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;" . $row["b_date"] "<br>";
    
  }
} else {
  echo "0 results";
}
$conn->close();

?>

凯文,谢谢你

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

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