Left join s ON … AND klauzulí
- desss
- Člen | 14
Pochopil jsem, že v NDB se nepoužívá nic jako join()
Potřeboval bych udělat dotaz, který mi vybere všechny týmy a spočítá, kolik je v nich potvrzených hráčů.
Funguje mi dotaz:
SELECT
t.*,
COUNT(s.id) as current_players
FROM
team t
LEFT JOIN squad s ON t.id = s.team_id AND s.accepted=1
GROUP BY
t.id
ORDER BY current_players DESC
Zatim to mam takhle:
<?php
$result = $this->db->table('team')
->select('team.*, count(:squad.id) AS current_players')
->group('team.id');
?>
A to mi funguje kromě toho, že to bere všechny hráče a ne jen ty potvrzené.
- desss
- Člen | 14
Ten můj kód mi generuje tenhle dotaz:
SELECT
`team`.*,
count(`squad`.`id`) AS `current_players`
FROM
`team`
LEFT JOIN
`squad` ON `team`.`id` = `squad`.`team_id`
GROUP BY
`team`.`id`
což je vlastně skoro přesně to, co potřebuju, až na to „AND squad.accepted=1“ abych vybral všechny týmy, ale počítal k nim jen potvrzené hráče… možná by šlo změnit SQL dotaz, ale nevim jak
- sKopheK
- Člen | 207
Kdybys to poslal na http://sqlfiddle.com mohl bych se pokusit pomoci více, ale
teď se musím omezit na tipování. Zkoušels tam přidat klauzuli
WHERE
?
$result = $this->db->table('team')
->select('team.*, count(:squad.id) AS current_players')
->where(':squad.accepted', TRUE)
->group('team.id');
- desss
- Člen | 14
Tak zatim takhle: http://sqlfiddle.com/#…
Ten where :squad.accepted mi způsobí, že se vypíšou jen týmy, které mají potvrzené hráče, ale já chci všechny týmy a počítat potvrzené hráče v nich
- petr.pavel
- Člen | 535
->where('(:squad.accepted IS TRUE) OR (:squad.id IS NULL)')
Ten odkaz na sqlfiddle je nějakej potentočkovanej.