|
Categorieën >
PHP & SQL
twee queries samenvoegen (Opgelost)
|
|
|
offline
|
PHP interesse
|
in vervolg op mijn eerder postings over de voetbal stande nog een vraagje
De sql code die ik nodig heb om uit mijn wedstrijden tabel een competitie bestand te genereren heb ik gevonden 
op basis van de uitslagen rekent deze query uit wat de stand moet zijn.
Maar nu zit ik met het probleem strafpunten
NAC, maar ook FC Zwolle AGOVV, Almere City, MVV etc. hebben strafpunten gehad.
Om het flexibel te houden heb ik een tabel cs_strafpunten gemaakt maar nu wil ik graag in deze query de eventuele straf punten aftrekken.
Hoe kan ik deze
SELECT
c.cs_strafpunten_id,
c.cs_season_id,
c.cs_competitie_id,
c.cs_team_id,
c.cs_strafpunten
FROM
cs_strafpunten s;
SELECT c.cs_strafpunten_id, c.cs_season_id, c.cs_competitie_id, c.cs_team_id, c.cs_strafpunten FROM cs_strafpunten s;
combineren met deze
SELECT
Team_ID AS teamid,
TeamName_short AS team,
Sum(P) AS P,
Sum(W) AS W,
Sum(D) AS D,
Sum(L) AS L,
SUM(F) as F,
SUM(A) AS A,
SUM(GD)AS GD,
SUM(Pts) AS Pts
FROM(
SELECT
cs_team_id_thuis Team,
1 P,
IF(cs_doelthuis > cs_doeluit,1,0) W,
IF(cs_doelthuis = cs_doeluit,1,0) D,
IF(cs_doelthuis < cs_doeluit,1,0) L,
cs_doelthuis F,
cs_doeluit A,
cs_doelthuis-cs_doeluit GD,
CASE
WHEN cs_doelthuis > cs_doeluit THEN 3
WHEN cs_doelthuis = cs_doeluit THEN 1
ELSE 0 END PTS
FROM cs_wedstrijden
WHERE cs_wedstrijd_gespeeld ='Y'
UNION ALL
SELECT
cs_team_id_uit,
1,
IF(cs_doelthuis < cs_doeluit,1,0),
IF(cs_doelthuis = cs_doeluit,1,0),
IF(cs_doelthuis > cs_doeluit,1,0),
cs_doeluit,
cs_doelthuis,
cs_doeluit-cs_doelthuis GD,
CASE
WHEN cs_doelthuis < cs_doeluit
THEN 3
WHEN cs_doelthuis = cs_doeluit
THEN 1
ELSE 0 END
FROM cs_wedstrijden
where cs_wedstrijd_gespeeld ='Y'
) AS tot
JOIN af_teams t ON tot.Team=t.Team_ID
GROUP BY Team
ORDER BY SUM(Pts) DESC, GD DESC , TeamName
SELECT Team_ID AS teamid, TeamName_short AS team, Sum(P) AS P, Sum(W) AS W, Sum(D) AS D, Sum(L) AS L, SUM(F) AS F, SUM(A) AS A, SUM(GD)AS GD, SUM(Pts) AS Pts FROM( SELECT cs_team_id_thuis Team, 1 P, IF(cs_doelthuis > cs_doeluit,1,0) W, IF(cs_doelthuis = cs_doeluit,1,0) D, IF(cs_doelthuis < cs_doeluit,1,0) L, cs_doelthuis F, cs_doeluit A, cs_doelthuis-cs_doeluit GD, CASE WHEN cs_doelthuis > cs_doeluit THEN 3 WHEN cs_doelthuis = cs_doeluit THEN 1 ELSE 0 END PTS FROM cs_wedstrijden WHERE cs_wedstrijd_gespeeld ='Y' UNION ALL SELECT cs_team_id_uit, 1, IF(cs_doelthuis < cs_doeluit,1,0), IF(cs_doelthuis = cs_doeluit,1,0), IF(cs_doelthuis > cs_doeluit,1,0), cs_doeluit, cs_doelthuis, cs_doeluit-cs_doelthuis GD, CASE WHEN cs_doelthuis < cs_doeluit THEN 3 WHEN cs_doelthuis = cs_doeluit THEN 1 ELSE 0 END FROM cs_wedstrijden WHERE cs_wedstrijd_gespeeld ='Y' ) AS tot JOIN af_teams t ON tot.Team=t.Team_ID GROUP BY Team ORDER BY SUM(Pts) DESC, GD DESC , TeamName
CREATE TABLE IF NOT EXISTS `cs_strafpunten` (
`cs_strafpunten_id` smallint(3) NOT NULL AUTO_INCREMENT,
`cs_season_id` smallint(3) NOT NULL,
`cs_competitie_id` smallint(3) NOT NULL,
`cs_team_id` smallint(3) NOT NULL,
`cs_strafpunten` smallint(3) NOT NULL,
PRIMARY KEY (`cs_strafpunten_id`),
KEY `cs_team_id` (`cs_team_id`),
KEY `cs_team_id_2` (`cs_team_id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;
CREATE TABLE IF NOT EXISTS `cs_strafpunten` ( `cs_strafpunten_id` smallint(3) NOT NULL AUTO_INCREMENT, `cs_season_id` smallint(3) NOT NULL, `cs_competitie_id` smallint(3) NOT NULL, `cs_team_id` smallint(3) NOT NULL, `cs_strafpunten` smallint(3) NOT NULL, PRIMARY KEY (`cs_strafpunten_id`), KEY `cs_team_id` (`cs_team_id`), KEY `cs_team_id_2` (`cs_team_id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;
|
2 antwoorden
|
|
|
offline
|
PHP expert
|
Je zorgt ervoor dat je de strafpunten in een resource hebt:
SELECT (strafpunten query) AS strafpunten.
Vervolgens ga je door middel van een if statement kijken of er strafpunten zijn: zo ja, trek ze van de punten af, zo nee, doe er niks mee.
Je kan er ook voor kiezen om ook de ploegen zonder strafpunten in de tabel te plaatsen en dan direct punten - strafpunten in je query te zetten.
|
markla – 08/09/2010 19:34 (Laatst gewijzigd op 08/09/2010 22:44)
|
|
offline
|
PHP interesse
|
Ik heb over een "if then" zitten nadenken maar dat werkt niet.
In de eerst query wordt een ORDER BY SUM(Pts) gedaan op. als ik dan later de straf punten er af ga halen klopt de volgorde niet meer.
Ik moet het dus IN die ene query doen. dus als iemand een idee heeft....
ik heb een avondje zitten klooien en voila 
SELECT
Team_ID AS teamid,
TeamName_short AS teamshort,
TeamName AS teamlong,
Sum(P) AS P,
Sum(W) AS W,
Sum(D) AS D,
Sum(L) AS L,
SUM(F) as F,
SUM(A) AS A,
SUM(GD)AS GD,
SUM(Pts) AS Pts,
PM
FROM(
SELECT
cs_team_id_thuis team,
1 P,
IF(cs_doelthuis > cs_doeluit,1,0) W,
IF(cs_doelthuis = cs_doeluit,1,0) D,
IF(cs_doelthuis < cs_doeluit,1,0) L,
cs_doelthuis F,
cs_doeluit A,
cs_doelthuis-cs_doeluit GD,
IF(cs_team_id_thuis = t.cs_team_id, t.cs_strafpunten,0) as PM,
CASE
WHEN cs_doelthuis > cs_doeluit THEN 3
WHEN cs_doelthuis = cs_doeluit THEN 1
ELSE 0 END PTS
FROM cs_wedstrijden, cs_strafpunten t
WHERE cs_wedstrijd_gespeeld ='Y'
UNION ALL
SELECT
cs_team_id_uit,
1,
IF(cs_doelthuis < cs_doeluit,1,0),
IF(cs_doelthuis = cs_doeluit,1,0),
IF(cs_doelthuis > cs_doeluit,1,0),
cs_doeluit,
cs_doelthuis,
cs_doeluit-cs_doelthuis GD,
IF(cs_team_id_uit = t.cs_team_id,t.cs_strafpunten,0) as PM,
CASE
WHEN cs_doelthuis < cs_doeluit
THEN 3
WHEN cs_doelthuis = cs_doeluit
THEN 1
ELSE 0 END
FROM cs_wedstrijden , cs_strafpunten t
where cs_wedstrijd_gespeeld ='Y'
) AS tot
JOIN af_teams t ON tot.Team=t.Team_ID
GROUP BY Team
ORDER BY SUM(Pts) DESC, GD DESC , TeamName
SELECT Team_ID AS teamid, TeamName_short AS teamshort, TeamName AS teamlong, Sum(P) AS P, Sum(W) AS W, Sum(D) AS D, Sum(L) AS L, SUM(F) as F, SUM(A) AS A, SUM(GD)AS GD, SUM(Pts) AS Pts, PM FROM( SELECT cs_team_id_thuis team, 1 P, IF(cs_doelthuis > cs_doeluit,1,0) W, IF(cs_doelthuis = cs_doeluit,1,0) D, IF(cs_doelthuis < cs_doeluit,1,0) L, cs_doelthuis F, cs_doeluit A, cs_doelthuis-cs_doeluit GD, IF(cs_team_id_thuis = t.cs_team_id, t.cs_strafpunten,0) as PM, CASE WHEN cs_doelthuis > cs_doeluit THEN 3 WHEN cs_doelthuis = cs_doeluit THEN 1 FROM cs_wedstrijden, cs_strafpunten t WHERE cs_wedstrijd_gespeeld ='Y' UNION ALL SELECT cs_team_id_uit, 1, IF(cs_doelthuis < cs_doeluit,1,0), IF(cs_doelthuis = cs_doeluit,1,0), IF(cs_doelthuis > cs_doeluit,1,0), cs_doeluit, cs_doelthuis, cs_doeluit-cs_doelthuis GD, IF(cs_team_id_uit = t.cs_team_id,t.cs_strafpunten,0) as PM, CASE WHEN cs_doelthuis < cs_doeluit THEN 3 WHEN cs_doelthuis = cs_doeluit THEN 1 FROM cs_wedstrijden , cs_strafpunten t where cs_wedstrijd_gespeeld ='Y' ) AS tot JOIN af_teams t ON tot .Team =t .Team_ID GROUP BY Team ORDER BY SUM(Pts) DESC, GD DESC , TeamName
|
Dit onderwerp is gesloten.
|