4小时后我无法找到解决方案,如何正确编写SQL查询以从两个表中回显数据。
我有两张桌子,我需要“加入”他们的数据。
第一个表是“wp_users”,第二个表是“wp_usermeta”。
从“wp_users”我需要的是“user_email”(因此它将是SELECT user_email FROM wp_users)。
但我需要加入名为“wp_usermeta”的另一个表,我需要很多东西,比如“first_name”,“last_name”,“phone_number”,“schoolid”,“schoolname”等。
在这里遇到问题: - )
在wp_usermeta中,我需要从两列中读取数据 - “meta_key”和“meta_value”。列“meta_key”存储变量的名称(例如“schoolid”,列“meta_value”存储meta_key的值(例如“XXXXXXXX”)。
我有这段代码:
<table>
<tr><th>Email Address</th><th>First Name</th></tr>
<?php
$teacher_table = "SELECT wp_users.user_email, wp_usermeta.meta_value
FROM wp_users INNER JOIN wp_usermeta ON wp_users.ID = wp_usermeta.user_id
WHERE wp_usermeta.meta_key = 'nickname'";
$results_table_main = $wpdb->get_results($teacher_table);
foreach ($results_table_main as $value){
echo '<tr><td>'.$value->user_email .'</td>';
echo '<td>'.$value->meta_value .'</td>';
} ?>
</table>
这有效,但我不知道如何修改它以获得更多带有meta_values的meta_keys。
有什么想法吗?
答案 0 :(得分:1)
您可以使用一个查询完成所需的操作,但它可能会变得混乱。您可能需要考虑将其设置为多个查询。但这是一个查询的样子:
SELECT wp_users.user_email,
usermeta_firstname.meta_value AS first_name,
usermeta_lastname.meta_value AS last_name
FROM wp_users
INNER JOIN wp_usermeta AS usermeta_firstname
ON wp_users.ID = usermeta_firstname.user_id
AND usermeta_firstname.meta_key = 'first_name'
INNER JOIN wp_usermeta AS usermeta_lastname
ON wp_users.ID = usermeta_lastname.user_id
AND usermeta_lastname.meta_key = 'last_name'
然后继续为所需的每个字段重新加入wp_usermeta表。请注意,如果您要使用INNER JOIN
,那么所有值都必须存在。如果您想考虑可能缺失的值,请改用LEFT JOIN
。
答案 1 :(得分:1)
我觉得我错过了什么。但是您可以从sql查询中删除WHERE子句以获取所有元值。
或者使用OR选择所需的值。
WHERE wp_usermeta.meta_key = 'nickname'
OR wp_usermeta.meta_key = 'fist_name'
/*...*/
编辑:
在这两种情况下,您还需要SELECT meta_key,因此您知道该值是什么。然后我会使用PHP将结果转换为您的需求。