это должно быть легко, но я не могу заставить MySQL играть в мяч.
Я пытаюсь составить список проектов, за которые проголосовал последний пользователь, для использования на странице профиля этого пользователя.
У меня есть таблица голосов, содержащая uid (INT), проект (INT), отметку времени (INT)
И таблица проектов, чье поле идентификатора совпадает с полем проекта в таблице голосов.
Мой начальный запрос был
SELECT * FROM projects WHERE id IN(SELECT project FROM votes WHERE uid=x ORDER BY timestamp DESC);
Это дает правильный список, но порядок перепутан. Я также понял, что забыл добавить проект DISTINCT в подзапрос, но по какой-то причине он давал разные проекты.
SELECT project FROM votes WHERE uid=x ORDER BY timestamp DESC;
Сам по себе дает правильное упорядочение, как и ожидалось, но как только я сделаю запрос, упорядочение будет отменено.
Я не должен понимать, как работают вложенные операторы, кто-то может помочь, а также объяснять, почему ключевое слово DISTINCT не требуется для получения отдельных идентификаторов проекта из таблицы голосов!?
Пример по запросу;
Таблица голосов содержит отдельные голоса, поэтому, если пользователь голосует за проект три раза, он может выглядеть следующим образом;
uid project timestamp
34 9 10984
34 9 11093
34 9 11309
Если этот пользователь (34 в примере) затем проголосовал за другой проект, таблица голосов теперь будет выглядеть так:
uid project timestamp
34 9 10984
34 9 11093
34 9 11309
34 21 12612
Значения 9 и 21 затем используются для запроса таблицы проектов. Так, например, таблица проектов может содержать:
id name description
9 Project A This is project A.
21 Project B This is project B.
Мне нужен список проектов, за которые пользователь недавно проголосовал. Так что в этом случае я хочу взять проекты 21 и 9 из таблицы проектов в таком порядке, 21, затем 9 и далее в проекты, за которые пользователь голосовал дальше в прошлом.