我想从PHP查询中返回返回的结果,其中包含来自另一个表的字段,一旦返回第一个表,它就会收集该字段。解释......
$args1 = array('order' => 'ASC');
$list = get_users($args1);
foreach ($list as $post) {
$email = $post->user_email
;
$id = $post->ID;
$user = get_userdata($id);
$firstname = $user->user_firstname;
要解释... get_users从用户数据库中获取所有用户。问题是usersdata是另一个包含用户姓氏的表。我们需要第一个查询中的ID来获取正确的姓氏。这就是我们想通过这个姓氏订购整个数据。
Userdata表使用meta_keys,每个键旁边都有相应用户的ID。
所以我所追求的是通过usermeta键'lastname'对用户数据进行排序。这是完整的代码。
$args1 = array('order' => 'ASC');
$list = get_users($args1);
foreach ($list as $post) {
$email = $post->user_email;
$id = $post->ID;
$user = get_userdata($id);
$firstname = $user->user_firstname;
$lastname = $user->user_lastname;
$return .= '<li>
<a href="#sidebar2" onClick="slide(this); return false" rel="clients_list_page" style="line-height:16px;">'.$firstname.' '.$lastname.'<br /><span style="font-size:10px; color:#555;">'.$email.'</span></a>
</li>';
}
$return .= '</div>';
有什么想法吗?
非凡
答案 0 :(得分:2)
你做这件事的方式似乎过于复杂。你不能只使用JOIN在一个查询中从两个表中获取数据吗?
在简单的sql中,类似于:
SELECT users.email, userdata.firstname, userdata.lastname
FROM users LEFT JOIN userdata
ON users.id=userdata.user_id
ORDER BY userdata.lastname
答案 1 :(得分:0)
如果我正确理解了这个问题,那么这不是一个php问题。
您可以通过简单的连接解决此问题,并在数据库端订购所有内容。即使你正在使用某种ORM,你也可能会运行一个只返回一个表并且顺序正确的字段的查询。
答案 2 :(得分:0)
@jeroen使用JOIN
是正确的。有JOIN
,LEFT JOIN
和INNER JOIN
两种类型。两者之间的差异是LEFT JOIN
,如果左边的表(在本例中是users
表)包含右表中没有相应记录的记录(例如你的users
表的记录包含与userdata
表中的记录不匹配的ID),它将从左表中返回这些行,对于应该来自右侧的值,返回NULL表。使用INNER JOIN
这些行根本就不会被返回。
INNER JOIN
的语法如下所示:
SELECT users.email, userdata.firstname, userdata.lastname
FROM (users, userdata)
WHERE (users.id = userdata.user_id)
ORDER BY userdata.lastname ASC
如果要为查询添加任何其他条件,只需将它们放在WHERE
子句中即可。