MySQL Присоединяйтесь и получите все отношения, даже если 0 - PullRequest
4 голосов
/ 07 сентября 2010

Я получил две таблицы.Тот, который содержит все доступные трофеи, и тот, который содержит отношение между пользователем и трофеем.

trophy
--------------------------------------
| trophy_id | name                   |
--------------------------------------
| 1         | kill 100 people        |
| 2         | kill 200 people        |
| 3         | fly 5000 feet upwards  |
| 4         | fly into a mountain    |
--------------------------------------

earned_trophys
------------------------------------------
| earned_trophy_id | trophy_id | user_id |
------------------------------------------
| 1                | 1         | 3       |
| 2                | 1         | 2       |
| 3                | 3         | 4       |
| 4                | 2         | 1       |
| 5                | 3         | 1       |
------------------------------------------

Например, пользователь 1 заработал за убийство 100 человек и за убийство 200 человек за трофеи.

Я хочу запрос, который показывает мне что-то вроде этого:

for user 1
-----------------------------
| kill 100 people       | 1 |
| kill 200 people       | 1 |
| fly 5000 feet upwards | 0 |
| fly into a mountain   | 0 |
-----------------------------

это то, что я пытался:

select
    trophy.name,
    earned_trophys.user_id,  
    count(user_id) as temp
from
    trophy
left join
    earned_trophys
on
    trophy.trophy_id = earned_trophys.trophy_id
where
    earned_trophys.user_id = 1
group by
    name

, но я получаю только результаты дляВещи, которые пользователь получил, я хочу, чтобы строки temp = 0.Возможно ли сделать это в одном запросе?

1 Ответ

7 голосов
/ 07 сентября 2010

для вступления в силу слева необходимо переместить условие earned_trophys.user_id = 1 в предложение on вместо where.

select
    trophy.name,
    earned_trophys.user_id,  
    count(user_id) as temp
from
    trophy
left join
    earned_trophys
on
    trophy.trophy_id = earned_trophys.trophy_id and earned_trophys.user_id = 1
group by
    name
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...