PHP SQL Order By из поля в другой таблице - PullRequest
0 голосов
/ 21 апреля 2011

Я хочу отсортировать возвращенные результаты из запроса 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 - это еще одна таблица, которая содержит фамилии пользователей. Нам нужен идентификатор из первого запроса, чтобы получить правильную фамилию. Именно по этой фамилии мы хотим упорядочить все данные по.

Таблица Userdata использует meta_keys с идентификатором соответствующего пользователя рядом с каждым ключом.

Итак, я хочу отсортировать пользовательские данные по ключу 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>';

Есть идеи?

Marvelous

Ответы [ 3 ]

2 голосов
/ 21 апреля 2011

Кажется слишком сложным, как ты это делаешь. Разве вы не можете просто использовать JOIN для получения данных из обеих таблиц в одном запросе?

В простом sql это было бы что-то вроде:

SELECT users.email, userdata.firstname, userdata.lastname 
    FROM users LEFT JOIN userdata
        ON users.id=userdata.user_id
    ORDER BY userdata.lastname
0 голосов
/ 21 апреля 2011

@ jeroen прав насчет использования JOIN.Существует два типа JOIN, LEFT JOIN и INNER JOIN.Разница между ними заключается в LEFT JOIN, если ваша таблица слева (в данном случае таблица users) содержит записи, которые не имеют соответствующих записей в правой таблице (например, ваша таблица users)имеет записи с идентификаторами, которые не совпадают с записями в вашей таблице userdata), он вернет эти строки из левой таблицы с 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.

0 голосов
/ 21 апреля 2011

Если я правильно понимаю проблему, то это не проблема php.

Вы можете решить это простым соединением и упорядочить все на стороне БД.Даже если вы используете какой-то ORM, вы, вероятно, сможете выполнить запрос, который будет возвращать поля только из одной таблицы в правильном порядке.

...