Combineren van 2 query's
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!
- 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)
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.
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
Het is handiger als je views gebruikt, dan hang je ook niet zo vast aan grenswaarden in de subquery
Dat is wat ik zoek. Thank you!
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 ?
Dan hoef je alleen de WHERE in de subquery aan te passen. Gebruik daar dan de datum ipv wid.
Ik moet dus het datumveld uit de wedstrijden tabel gebruiken en loop dus vast hoe ik dat in deze query opgeef.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
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
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!
Maar verder hartelijk dank voor het meedenken!