2015-01-18 2 views
0

У меня есть следующий MySQL QueryMysql соединения таблиц, но возвращаемые значения, если первая таблица содержит информацию, но вторая оленью кожу

 SELECT Name, Summoner_Name, ROUND(SUM(timePlayed)/60) as Total_Time 
        FROM UserNames, games_database 
        WHERE (UserNames.ID = games_database.UserNames_ID AND 
      UserNames.ID IN ({$Member_Ids_Sql})) 
        GROUP BY UserNames.ID 
        ORDER BY Total_Time DESC; 

Это эффективно будет захватывать имя игроков, имена Summoner, и общее PLAY_TIME. Он делает это, используя соединение таблицы. Как одна таблица имен пользователей, содержит идентификатор пользователя, имя и имя вызывающего. Где в таблице Games_database хранится каждая игра, в которую играл игрок.

Что я хочу сделать, это отображать информацию о пользователях, которые находятся в таблице UserNames, но еще не играли в какие-либо игры.

Экстренная Информация: USERNAMES База данных содержит ID, Summoner_ID, Summoner_Name, имя

Games_database База данных содержит

ID, Match_ID, my_Date, timePlayed, champion, win, Summoner_ID, UserNames_ID, Game_Type 

Я получил это работает отлично для всех пользователей с играми, но когда новый пользователь вводит система, они не отображаются в этом запросе из-за отсутствия игр.

ответ

0

Вы хотите left join найти не-матчи:

SELECT Name, Summoner_Name, ROUND(SUM(timePlayed)/60) as Total_Time 
FROM UserNames LEFT JOIN 
     games_database 
     ON UserNames.ID = games_database.UserNames_ID 
WHERE UserNames.ID IN ({$Member_Ids_Sql}) AND 
     games_database.UserNames_ID is null 
GROUP BY UserNames.ID 
ORDER BY Total_Time DESC; 

Примечание: вы должны научиться всегда использовать явный join синтаксис.

+0

Спасибо, хотя этот точный синтаксис не работал, я удалил и games_database.UserNames_ID null, и он работал :). Я не совсем уверен в том, как работает LEFT Join, поэтому я буду исследовать это. Спасибо за помощь! – crashkid

+0

@crashkid. , , Как это не работает? –

0

Что вам нужно, это левое внешнее соединение. Левое внешнее соединение вернет все результаты в первую таблицу (филируется вашим местом) с результатами во второй таблице. Если совпадений нет, будет показано значение null.

+0

Спасибо, им совсем не нравится mysql и не слышал о левой команде объединения до: – crashkid

+0

Левое объединение нашего левого внешнего соединения почти во всех вариантах реляционных баз данных, вот полезная ссылка, объясняющая разные типы объединений http://www.w3schools.com/sql/sql_join.asp. Похоже, у вас классный проект, чтобы начать изучать базы данных, удачи. Пожалуйста, примите один из наших ответов, спасибо. –

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