Combineren van 2 query's

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

R R

R R

28/05/2010 19:57:06
Quote Anchor link
Ik heb een tabel waarin opstellingen van wedstrijden staan. Nu wil graag de gegevens van een opstelling én het totaal aantal gespeelde wedstrijden van deze spelers t/m die wedstrijd.

De opstelling.
SELECT wid,persid FROM opstel WHERE wid=50
Geeft keurig de spelers die in wid 50 hebben meegdaan.

Nu het aantal gespeelde wedstrijden t/m wid 50.
SELECT count(wid),persid FROM opstel WHERE wid<50 group by persid
Nu krijg ik het totaal van ALLE spelers die in de eerste 50 wedstrijden hebben mee gedaan.

Nu deze twee samen.
SELECT a.wid,a.persid,b.persid,b.aantal
from ( select wid,persid from opstel where wid=50 ) a
SELECT (COUNT(wid) AS aantal,persid FROM opstel where wid<50 GROUP BY persid ) b
where a.persid=b.persid

Maar werken doet deze niet. Wat zie ik over het hoofd?

Alvast bedankt!
 
PHP hulp

PHP hulp

29/03/2024 00:52:45
 
Terence Hersbach

Terence Hersbach

28/05/2010 23:53:59
Quote Anchor link
Tips:
- probeer met datum-kolommen te werken van wanneer een wedstrijd gespeeld is, zoeken in het verleden is beter dan zoeken naar een kleiner id.
- kort namen niet af. wid zegt niet veel, wedstrijd_id des te meer. Het is handig om meteen te begrijpen wat iets inhoud ipv dat je na moet lopen wat t precies is.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
SELECT wid,persid, (SELECT count(wid),persid FROM opstel WHERE wid<50) AS gespeeld FROM opstel WHERE wid=50

is wellicht de oplossing voor nu, maar probeer eerst eens naar mijn tips te kijken.
 
R R

R R

29/05/2010 23:48:06
Quote Anchor link
Terence,

Wat betreft met een datum werken is inderdaad betrouwbaar dan met een wid te werken.

De code die jij gaf

SELECT wid,persid, (SELECT count(wid),persid FROM opstel WHERE wid<50) AS gespeeld FROM opstel WHERE wid=50

geeft als melding;
1241 - Operand should contain 1 column(s)

Heeft dat soms te maken met de count?
Haal ik daar de persid weg

SELECT wid,persid, (SELECT count(wid) FROM opstel WHERE wid<50) AS gespeeld FROM opstel WHERE wid=50

Dan werkt de query wel, maar dan krijg ik als output
wid persid gespeeld
50 10 541
50 15 541
Gespeeld geeft overal 541. Maar dat is het totaal van alle wedstrijden en niet die per speler. Ik heb al e.e.a. geprobeerd, maar kom er niet uit. Terwijl ik het gevoel heb er dicht bij te zitten.
Nog tips?
Gewijzigd op 29/05/2010 23:49:00 door R R
 
Joren de Wit

Joren de Wit

29/05/2010 23:57:15
Quote Anchor link
In de subquery zul je moeten kijken naar een bepaalde speler en het wedstrijdnummer moeten beperken tot het huidige wedstrijdnummer:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
SELECT
  o.persid,
  (SELECT
    COUNT(wid)
    FROM opstel
    WHERE wid < 50
    AND persid = o.persid
  ) AS aantal
FROM
  opstel AS o
WHERE
  wid = 50
 
Noppes Homeland

Noppes Homeland

30/05/2010 00:11:56
Quote Anchor link
Het is handiger als je views gebruikt, dan hang je ook niet zo vast aan grenswaarden in de subquery
 
R R

R R

30/05/2010 00:19:45
Quote Anchor link
@Blanche
Dat is wat ik zoek. Thank you!
 
R R

R R

30/05/2010 22:30:01
Quote Anchor link
Ik ben er toch niet helemaal. Met wid < XX werkt het wel, maar zoals Terence al aangaf is het met datums uiteraard betrouwbaar.

Nu heb ik ook een tabel met wedstrijden waarin wid en datum in voorkomen.
Hoe link ik deze zodat in de query van Blanche niet komt te staan wid < 50 maar datum < yyyy-mm-dd ?
 
Joren de Wit

Joren de Wit

30/05/2010 22:34:25
Quote Anchor link
Dan hoef je alleen de WHERE in de subquery aan te passen. Gebruik daar dan de datum ipv wid.
 
R R

R R

30/05/2010 22:50:21
Quote Anchor link
Daar was ik inderdaad mee bezig, maar datum veld komt alleen voor in de tabel wedstrijden. Deze tabel wordt d.m.v. wid gelinked aan de opstel tabel.
Ik moet dus het datumveld uit de wedstrijden tabel gebruiken en loop dus vast hoe ik dat in deze query opgeef.
 
Joren de Wit

Joren de Wit

30/05/2010 23:01:10
Quote Anchor link
Zo even uit de losse pols:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
SELECT
  o.persid,
  (SELECT
    COUNT(wid)
    FROM opstel o2
    INNER JOIN wedstrijden w ON w.id = o2.wid
    WHERE w.datum < '2010-05-30'
    AND o2.persid = o.persid
  ) AS aantal
FROM
  opstel AS o
WHERE
  wid = 50


Maar nu kom je echt op een punt dat je zulke ingewikkelde subqueries krijgt, dat het gebruik van VIEWs veel handiger is!
 
R R

R R

30/05/2010 23:57:56
Quote Anchor link
Die 'losse' pols heeft me wel geholpen. Het werkt zoals ik wens. Ik hoefde alleen de Count(wid) te veranderen in Count(o2.wid) en verder was er bij w ON w.id = 02.wid een w vergeten w.Wid

Maar verder hartelijk dank voor het meedenken!
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.