2013-11-17 2 views
0

У меня есть запрос SQL, чтобы получить количество «понравилось» пользователю. Существуют две разные таблицы, одна таблица содержит разные пользовательские данные (а не количество понравившихся). В другой таблице хранятся похожие журналы, например, кто дал подобное, кто получает подобное, когда он понравился и т. Д. Я создаю список из десяти самых популярных пользователей.SQL - Использовать значение имени столбца в качестве параметра

Что мне интересно, если это возможно, чтобы использовать текущее значение столбца в качестве параметра, запрос запускаемых, например, так:

SELECT `username` FROM `users` ORDER BY (SELECT COUNT(*) FROM `likes` WHERE `liked_user`=?) LIMIT 10 

Если знак вопроса будет заменен на что-то который представляет текущее значение username (я полагаю, что SQL должен сделать какой-то цикл, чтобы получить его результаты)

Альтернатива У меня есть столбец в таблице пользователя, содержащий количество симпатичных, а затем сортировку на основе это, но мне было интересно, может ли запрос выполнять одну и ту же работу, просматривая похожие журналы.

ответ

2

Да, вы можете это сделать. Должно быть так же просто, как:

SELECT u.`username` 
FROM `users` u 
ORDER BY (SELECT COUNT(*) 
      FROM `likes` l 
      WHERE l.`liked_user` = u.`username`) 
LIMIT 10 

Вы также можете сделать то же самое без подзапроса:

SELECT u.`username` 
FROM `users` u 
JOIN `likes` l ON l.`liked_user` = u.`username` 
GROUP BY u.`username` 
ORDER BY COUNT(*) 
+0

Кажущаяся иметь проблему неоднозначности. Имена столбца, обозначающего, кто понравился пользователю в таблице like, и столбец, обозначающий имя пользователя в столбце пользователя, одинаковы. Поэтому во второй раз указывается «имя пользователя», он считает, что ему нужно значение из таблицы like, а не таблицы пользователя. – KILL3RTACO

+0

Я обновил свой ответ. Вы можете использовать псевдонимы. – MarcinJuraszek

+0

Отлично: D Это работает, спасибо. – KILL3RTACO

Смежные вопросы