Пребройте 2 колони за срещане

Така че основно ми трябва заявка, която ще върне показвано име, количество убити и количество смъртни случаи.

Имам две маси, от които трябва да тегля.

Двете маси са

player

id      | name
2334324 | user
4353454 | user2

където id е техният уникален идентификатор, а name е тяхното показвано име.

Втората таблица е:

player_kill

id | killer  | victim  |
1  | 2334324 | 4353454 |
2  | 2334324 | 4353454 |  
3  | 4353454 | 2334324 |

където killer / victim колони съдържат уникалния идентификатор на таблицата player.

Бих искал да мога да преброя срещанията на идентификатор на играч в killer и victim, така че заявката да върне:

name | kills | deaths
user | 2     | 1
user2| 1     | 2

където броят на убийствата ще бъде броят на събитията, които playerid има в колоната killer и същото за смъртните случаи

Надявам се, че предоставих достатъчно информация.

Какво имам досега:

SELECT `player`.`name`, COUNT(DISTINCT `player_kill`.`id`) as `kills`, COUNT(DISTINCT `player_kill`.`id`) as `deaths`
FROM `player`
LEFT JOIN `player_kill` ON `player`.`id`=`player_kill`.`killer`
LEFT JOIN `player_kill` ON `player`.`id`=`player_kill`.`victim`
WHERE `player`.`id` = `player_kill`.`killer` AND `player`.`id` = `player_kill`.`victim`
GROUP BY `player`.`id`;

person Jacob    schedule 02.07.2015    source източник
comment
А ти опита ли да подготвиш заявката?   -  person Nima Derakhshanjan    schedule 02.07.2015
comment
Най-далечното, което получавам, е name | убива в индивидуална заявка, имам проблеми и със свързването на смъртните случаи   -  person Jacob    schedule 02.07.2015
comment
добре, но искам да кажа, споделете кода си, моля, защото ТАКА не подготвя код за вас, но ще реши проблема във вашия код.   -  person Nima Derakhshanjan    schedule 02.07.2015


Отговори (2)


Опитвам

SELECT 
    p.name, 
    count(distinct pk1.id) as kills, 
    count(distinct pk2.id) as deaths
FROM player p
LEFT JOIN player_kill pk1 ON pk1.killer = p.id 
LEFT JOIN player_kill pk2 ON pk2.victim = p.id 
group by p.name

http://sqlfiddle.com/#!9/649504/15/0

person Dewanta    schedule 02.07.2015
comment
Не съм сигурен как работи това, но точно това искам / имам нужда, благодаря :) - person Jacob; 02.07.2015

Вижте дали това работи:

SELECT  `player`.`name`,
        COUNT(DISTINCT k.`id`) as `kills`,
        COUNT(DISTINCT v.`id`) as `deaths`
    FROM  `player`
    LEFT JOIN  `player_kill` AS k ON `player`.`id` = k.`killer`
    LEFT JOIN  `player_kill` AS v ON `player`.`id` = v.`victim`
    GROUP BY  `player`.`id`;

Ако не, тогава може да се наложи да превърнем COUNTs в подзаявки.

person Rick James    schedule 02.07.2015
comment
това също работи :) все още не съм сигурен какво правят тези заявки, благодаря за помощта :D - person Jacob; 02.07.2015
comment
@Dewanta беше по-бърз при тегленето. Двете решения са еквивалентни, ако player.id и name са 1:1. И двамата добавихме псевдоними, за да преодолеем неяснотата от наличието на две препратки player_kill. - person Rick James; 02.07.2015