Ik heb een aantal gebruikers met bepaalde scores op een bepaalde datum.
Als ik 1 datum neem heb ik bijvoorbeeld 12 gebruikers met allemaal een score. Kan ik met een query deze 12 opdelen in 2 groepen met allebei een totale (ongeveer) zelfde score?
Ik hoef niet direct een kant en klare query/script maar wat kan ik in een query uitvoeren en wat vervolgens in php?
Ik kan selectie maken dat ik de gebruikers uit de tabel krijg op basis van datum, een totaal van de score van de gebruikers, maar dan...

Ik heb nu:
SELECT score FROM `scores` WHERE datum = '2013-01-11' AND RAND() <= 0.5 LIMIT 6
Wat ik voorstel:

Stel:
- je hebt een referentie van het aantal punten. bv. 20 punten.
- Je hebt een vast aantal spelers nodig: 12

Die 20 kan je eventueel berekenen met gemiddelde waarden, via een eerder uitgevoerde query.
Dan selecteren we 12 spelers (LIMIT 12) en rangschikken ze volgens het verschil met 20.

Dit geheel staat in een subquery; de hoofdquery schudt die 12 door mekaar.

Dan kan je bij het fetchen ( while ($row = mysql_fetch_assoc($res)) ) speler 1->6 bij ploeg 1 zetten, de rest bij ploeg 2.
Ofwel met even/oneven werken

Dat kan zoiets worden


SELECT *
FROM
  (SELECT id, ploeg, punten, ABS(punten - 20) AS verschil
  FROM  klassement
  WHERE datum = '2013-01-11'
  ORDER BY verschil
  LIMIT 12) AS t1
ORDER BY RAND()
Dit gaat zelfs in één query:

SELECT id, speler, score, 0 as sc_group
FROM scores
WHERE score >= (SELECT AVG(score) FROM scores WHERE datum = '2013-01-11')
AND datum = '2013-01-11'
UNION
SELECT id, speler, score, 1 as sc_group
FROM scores
WHERE score < (SELECT AVG(score) FROM scores WHERE datum = '2013-01-11')
AND datum = '2013-01-11'
ORDER BY sc_group, score DESC

[edit]
Niet onbelangrijke ands vergeten
[/edit]

Reageren