PHP SQL Order From来自不同表中的字段

时间:2011-04-21 17:55:27

标签: php sql-order-by

我想从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>';

有什么想法吗?

非凡

3 个答案:

答案 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是正确的。有JOINLEFT JOININNER 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子句中即可。