РЕДАКТИРОВАТЬ : Ой! Я не читал вопрос внимательно! Вы хотели имена пользователей! Поэтому нам нужно обернуть указанный выше запрос как подзапрос и использовать user_id
s для точного определения имен пользователей. (Изменено ниже.)
Давайте посмотрим на идентификаторы пользователей, посчитав количество подходящих специальностей. Мы создадим наш SQL-запрос, используя $user_speciltys_in_array
:
$user_speciltys_in_array = $user->get_thisUser_specialtys();
$sql = 'SELECT users.user_id, score, username FROM (' .
'SELECT user_id, COUNT(user_id) AS score FROM user_speciality';
$first = 1;
foreach ($user_speciltys_in_array as $spc_id)
{
$sql = $sql . (($first==1) ? ' WHERE ' : ' AND ';
$first = 0;
$sql = $sql . "(user_speciality.spc_id=$spc_id)";
}
$sql = $sql . ' GROUP BY user_id ORDER BY score DESC LIMIT 10) userscores ';
$sql = $sql . ' LEFT JOIN users ON userscores.user_id = users.user_id';
Например, если $user_speciltys_in_array
равно array(1,2)
, вы получите следующие результаты:
user_id score username
------- ----- --------
1 2 max
2 1 alex
3 1 thirdguy
Я добавил ORDER BY score DESC
и LIMIT 10
, чтобы просто получить 10 самых подходящих пользователей, что часто и ищут люди в системе рекомендаций (краткий список рекомендаций).