login  Naam:   Wachtwoord: 
Registreer je!
 Forum

twee queries samenvoegen (Opgelost)

Offline markla - 05/09/2010 22:32
Avatar van marklaPHP 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
  1. SELECT
  2. c.cs_strafpunten_id,
  3. c.cs_season_id,
  4. c.cs_competitie_id,
  5. c.cs_team_id,
  6. c.cs_strafpunten
  7. FROM
  8. cs_strafpunten s;


combineren met deze

  1. SELECT
  2. Team_ID AS teamid,
  3. TeamName_short AS team,
  4. Sum(P) AS P,
  5. Sum(W) AS W,
  6. Sum(D) AS D,
  7. Sum(L) AS L,
  8. SUM(F) AS F,
  9. SUM(A) AS A,
  10. SUM(GD)AS GD,
  11. SUM(Pts) AS Pts
  12. FROM(
  13. SELECT
  14. cs_team_id_thuis Team,
  15. 1 P,
  16. IF(cs_doelthuis > cs_doeluit,1,0) W,
  17. IF(cs_doelthuis = cs_doeluit,1,0) D,
  18. IF(cs_doelthuis < cs_doeluit,1,0) L,
  19. cs_doelthuis F,
  20. cs_doeluit A,
  21. cs_doelthuis-cs_doeluit GD,
  22. CASE
  23. WHEN cs_doelthuis > cs_doeluit THEN 3
  24. WHEN cs_doelthuis = cs_doeluit THEN 1
  25. ELSE 0 END PTS
  26. FROM cs_wedstrijden
  27. WHERE cs_wedstrijd_gespeeld ='Y'
  28. UNION ALL
  29. SELECT
  30. cs_team_id_uit,
  31. 1,
  32. IF(cs_doelthuis < cs_doeluit,1,0),
  33. IF(cs_doelthuis = cs_doeluit,1,0),
  34. IF(cs_doelthuis > cs_doeluit,1,0),
  35. cs_doeluit,
  36. cs_doelthuis,
  37. cs_doeluit-cs_doelthuis GD,
  38. CASE
  39. WHEN cs_doelthuis < cs_doeluit
  40. THEN 3
  41. WHEN cs_doelthuis = cs_doeluit
  42. THEN 1
  43. ELSE 0 END
  44. FROM cs_wedstrijden
  45. WHERE cs_wedstrijd_gespeeld ='Y'
  46. ) AS tot
  47. JOIN af_teams t ON tot.Team=t.Team_ID
  48. GROUP BY Team
  49. ORDER BY SUM(Pts) DESC, GD DESC , TeamName


  1. CREATE TABLE IF NOT EXISTS `cs_strafpunten` (
  2. `cs_strafpunten_id` smallint(3) NOT NULL AUTO_INCREMENT,
  3. `cs_season_id` smallint(3) NOT NULL,
  4. `cs_competitie_id` smallint(3) NOT NULL,
  5. `cs_team_id` smallint(3) NOT NULL,
  6. `cs_strafpunten` smallint(3) NOT NULL,
  7. PRIMARY KEY (`cs_strafpunten_id`),
  8. KEY `cs_team_id` (`cs_team_id`),
  9. KEY `cs_team_id_2` (`cs_team_id`)
  10. ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;

2 antwoorden

Gesponsorde links
Offline marten - 05/09/2010 23:35
Avatar van marten Beheerder 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.
Offline markla - 08/09/2010 19:34 (laatste wijziging 08/09/2010 22:44)
Avatar van markla 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  

  1. SELECT
  2. Team_ID AS teamid,
  3. TeamName_short AS teamshort,
  4. TeamName AS teamlong,
  5. Sum(P) AS P,
  6. Sum(W) AS W,
  7. Sum(D) AS D,
  8. Sum(L) AS L,
  9. SUM(F) as F,
  10. SUM(A) AS A,
  11. SUM(GD)AS GD,
  12. SUM(Pts) AS Pts,
  13. PM
  14. FROM(
  15. SELECT
  16. cs_team_id_thuis team,
  17. 1 P,
  18. IF(cs_doelthuis > cs_doeluit,1,0) W,
  19. IF(cs_doelthuis = cs_doeluit,1,0) D,
  20. IF(cs_doelthuis < cs_doeluit,1,0) L,
  21. cs_doelthuis F,
  22. cs_doeluit A,
  23. cs_doelthuis-cs_doeluit GD,
  24. IF(cs_team_id_thuis = t.cs_team_id, t.cs_strafpunten,0) as PM,
  25. CASE
  26. WHEN cs_doelthuis > cs_doeluit THEN 3
  27. WHEN cs_doelthuis = cs_doeluit THEN 1
  28. ELSE 0 END PTS
  29. FROM cs_wedstrijden, cs_strafpunten t
  30. WHERE cs_wedstrijd_gespeeld ='Y'
  31. UNION ALL
  32. SELECT
  33. cs_team_id_uit,
  34. 1,
  35. IF(cs_doelthuis < cs_doeluit,1,0),
  36. IF(cs_doelthuis = cs_doeluit,1,0),
  37. IF(cs_doelthuis > cs_doeluit,1,0),
  38. cs_doeluit,
  39. cs_doelthuis,
  40. cs_doeluit-cs_doelthuis GD,
  41. IF(cs_team_id_uit = t.cs_team_id,t.cs_strafpunten,0) as PM,
  42. CASE
  43. WHEN cs_doelthuis < cs_doeluit
  44. THEN 3
  45. WHEN cs_doelthuis = cs_doeluit
  46. THEN 1
  47. ELSE 0 END
  48. FROM cs_wedstrijden , cs_strafpunten t
  49. where cs_wedstrijd_gespeeld ='Y'
  50. ) AS tot
  51. JOIN af_teams t ON tot.Team=t.Team_ID
  52. GROUP BY Team
  53. ORDER BY SUM(Pts) DESC, GD DESC , TeamName
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.194s