@LemanRass21

Как выполнить выборку пользователей имея массив их идентификаторов?

В данный момент делаю так:
var query = "SELECT users.id, users.firstname, users.lastname, users.avatarurl FROM `users` WHERE id IN (?)";
mysql.Query(query, [entries], function(err, rows)

где entries это массив id пользователей которые я предварительно получил вот таким запросом:

var query = "SELECT * FROM `pm_history` WHERE `sender`=? OR `receiver`=? ORDER BY `timestamp` ASC";
mysql.Query(query, [user.id, user.id], function(err, rows)


Не устраивает то, что оно проходит по всем пользователям в бд постепенно, от начала и до конца, какие подходят - добавляет в результат. При этом сбивается их сортировка, какова была в массиве изначально задана. Ее нужно сохранить.
То есть если в базе есть пользователи с идентификаторами от 1 и до 10, а передаю я массив с числами 7, 3, 5,1 мне вернет 1, 3, 5, 7 а нужно что бы все равно вернуло 7, 3, 5, 1. Разумеется я могу распарсить результат по своему, на js в моем случае, но хотелось бы узнать может существует более элегантный способ чисто на SQL?

Более обширная версия вопроса с более подробной информацией:
Имеем:
1) Таблицу pm_history в которой записаны все личные сообщения всех пользователей в виде: (int id, int sender, int receiver, string message, TimeStamp timestamp, bool new ).
2) Таблицу users в которой есть все существующие пользователи в виде: (int id, string firstname, string lastname, string avatarurl, ну и прочее).
Итого:
Мы имеем идентификатор пользователя который запросил историю чатов с которыми он переписывался (людей с которыми у него есть хоть одно общее сообщение в таблице pm_history.)
Цель:
Сгенерировать запрос в БД так, что бы мы получили отсортированный по времени последнего нового сообщения (из таблицы pm_history поле timestamp) список людей (из таблицы users) с которыми переданный нами пользователь имел какой нибудь разговор.
Примечание:
При генерации запроса надо учесть что наш пользователь в pm_history может быть как в поле sender так и в поле receiver.
  • Вопрос задан
  • 167 просмотров
Решения вопроса 1
fsockopen
@fsockopen
ORDER BY FIELD(id,'7','3','5','1'), id
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы