Left Join, Сортировка по, MySQL Optimization - PullRequest
3 голосов
/ 22 февраля 2011

У меня такой запрос:

   SELECT m...., a...., r....
     FROM 0_member AS m                 
LEFT JOIN 0_area AS a ON a.user_id = (SELECT user_id 
                                        FROM `0_area` 
                                       WHERE user_id = m.id 
                                    ORDER BY sec_id ASC LIMIT 1)
LEFT JOIN 0_rank as r ON a.rank_id = r.id 
    WHERE m.login_userid = '$username'

Идея состоит в том, чтобы получить первую строку из таблицы 0_area и, следовательно, предпринять попытку внутреннего соединения.Тем не менее, это не работает, как ожидалось.

Между 0_area и 0_member, 0_member.id = 0_area.user_id.Тем не менее, есть несколько строк 0_area.user_id, и я хочу, чтобы строка имела наименьшее значение sec_id.

Любая помощь, пожалуйста?

1 Ответ

6 голосов
/ 22 февраля 2011
   SELECT m...., a...., r....
     FROM 0_member AS m               
LEFT JOIN (SELECT user_id, min(sec_id) minsec
           FROM `0_area`
           GROUP BY user_id) g1 on g1.user_id=m.id
LEFT JOIN 0_area AS a ON a.user_id = g1.user_id and a.sec_id=minsec
LEFT JOIN 0_rank as r ON a.rank_id = r.id 
    WHERE m.login_userid = '$username'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...