Query om 2 groepen met allebei zelfde totaal te krijgen

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Ventilatiesysteem Productontwikkelaar HBO WO Verwa

Samengevat: Zij bieden flexibele ventilatiematerialen, geluidsdempers, rookgasafvoer producten en industrieslangen. Ben jij een technisch productontwikkelaar? Heb jij ervaring met het ontwikkelen van nieuwe producten? Vaste baan: Technisch Productontwikkelaar HBO WO €3.000 - €4.000 Zij bieden een variëteit aan flexibele ventilatiematerialen, geluiddempers, rookgasafvoer producten, industrieslangen en ventilatieslangen voor de scheepsbouw. Met slimme en innovatieve materialen zorgen wij voor een gezonde en frisse leefomgeving. Deze werkgever is een organisatie die volop in ontwikkeling is met hardwerkende collega's. Dit geeft goede ontwikkelingsmogelijkheden. De branche van dit bedrijf is Techniek en Engineering. Functie: Voor de vacature als Technisch Productontwikkelaar Ede Gld HBO WO ga

Bekijk vacature »

Jochanan V

Jochanan V

13/01/2013 23:10:29
Quote Anchor link
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
Gewijzigd op 13/01/2013 23:53:41 door Jochanan V
 
PHP hulp

PHP hulp

24/11/2024 08:00:08
 
Kris Peeters

Kris Peeters

14/01/2013 14:46:47
Quote Anchor link
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

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
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()
Gewijzigd op 14/01/2013 14:47:33 door Kris Peeters
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

14/01/2013 16:56:35
Quote Anchor link
Dit gaat zelfs in één query:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
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
Gewijzigd op 14/01/2013 17:17:08 door Ger van Steenderen
 



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.