Het probleem is dat hij alle jaren moet sorteren naar de sortering van de meest recente. Maar volgens mij zit ik veel te moeilijk te denken. Ik kan natuurlijk met een foreach het meest recente jaar pakken en dan de waarden van $results[$year + 1) tonen. Dan heb ik niks nodig van een sortering.quote:Op maandag 25 juli 2011 13:48 schreef Tijn het volgende:
array_multisort() doet in grote lijnen toch wel wat je hebben wil? Misschien dat je er alleen even een functie omheen moet schrijven om te zorgen dat 'ie alleen het meest recente jaar sorteert. Of zie ik iets over het hoofd?
Waar haal je het vandaan? Want als je het uit een DB haalt dan kan het makkelijker opgelost worden. Anders zou ik eens gaan kijken naar je opbouw van je array, want daar kun je volgens mij ook nog een verbeterslag maken.quote:Op maandag 25 juli 2011 13:57 schreef remi1986 het volgende:
[..]
Het probleem is dat hij alle jaren moet sorteren naar de sortering van de meest recente. Maar volgens mij zit ik veel te moeilijk te denken. Ik kan natuurlijk met een foreach het meest recente jaar pakken en dan de waarden van $results[$year + 1) tonen. Dan heb ik niks nodig van een sortering.
EDIT: lang leve de maandag
het ligt allemaal iets ingewikkelder dan dit.quote:Op maandag 25 juli 2011 14:02 schreef A-mineur het volgende:
Waarom doe je allemaal zo moeilijk je kunt toch gewoon in je query orderen, ook op meerdere velden ORDER BY YEAR(date) ASC, name ASC, date desc iets in die trend, dan hoef je niet allemaal in PHP te gaan orderen wat voor PHP dus nietszeggende data is.
Tuurlijk wel, je berekend de resultaten toch, ik zou dit sowieso berekenen met de DB daar is hij nl. voor bedoeld.quote:Op maandag 25 juli 2011 14:08 schreef remi1986 het volgende:
[..]
het ligt allemaal iets ingewikkelder dan dit.
Gebruiker voert een start en eind jaar in.
Vervolgens ga ik met een query met allemaal joins naar andere tabellen de data ophalen die ik nodig heb. Met dit resultaat van die query, vul ik de $results array, omdat de percentages niet in de database staan, maar moeten worden berekend, kan ik daar niet in de query op ordenen.
Zoals in mijn reactie hierboven, staan de percentages niet in de database. Dat wat ik toonde van de $results array is maar een klein stukje. Het is een groot overzicht met allemaal statistieken. Met de ene keer een medewerker als uitgangspunt maar in een ander overzicht het hele bedrijf.quote:Op maandag 25 juli 2011 14:07 schreef Pakspul het volgende:
[..]
Waar haal je het vandaan? Want als je het uit een DB haalt dan kan het makkelijker opgelost worden. Anders zou ik eens gaan kijken naar je opbouw van je array, want daar kun je volgens mij ook nog een verbeterslag maken.
Hoe kan ik met MySQL een percentage berekenen dan? En dan moet het een percentage zijn over de SUM van een aantal kolommen.quote:Op maandag 25 juli 2011 14:11 schreef A-mineur het volgende:
[..]
Tuurlijk wel, je berekend de resultaten toch, ik zou dit sowieso berekenen met de DB daar is hij nl. voor bedoeld.
Tevens bespaart dit je een hoop onnodig rekenwerk in PHP en dataomzetting.
Schaduw array bijhouden waar je percentages aan personen koppelt en deze makkelijk kunt sorteren Die zou je nog kunnen opnemen onder $results[jaartal][percentage2medewerker] en dan een array alla: array('85' => 'mark', '98' => 'piet', '65' => 'jan');quote:Op maandag 25 juli 2011 14:11 schreef remi1986 het volgende:
[..]
Zoals in mijn reactie hierboven, staan de percentages niet in de database. Dat wat ik toonde van de $results array is maar een klein stukje. Het is een groot overzicht met allemaal statistieken. Met de ene keer een medewerker als uitgangspunt maar in een ander overzicht het hele bedrijf.
Deel / totaal * 100 (normale percentage berekening lijkt me?)quote:Op maandag 25 juli 2011 14:16 schreef remi1986 het volgende:
[..]
Hoe kan ik met MySQL een percentage berekenen dan? En dan moet het een percentage zijn over de SUM van een aantal kolommen.
Dit is ongeveer vergelijkbaar met de oplossing die ik zelf gaf met de foreach loop. Want als je de volgorde weet van het eerste jaar, kan je ze gewoon benaderen als je de naam weet.quote:Op maandag 25 juli 2011 14:16 schreef Pakspul het volgende:
[..]
Schaduw array bijhouden waar je percentages aan personen koppelt en deze makkelijk kunt sorteren Die zou je nog kunnen opnemen onder $results[jaartal][percentage2medewerker] en dan een array alla: array('85' => 'mark', '98' => 'piet', '65' => 'jan');
Ga eerst eens spelen met je database, want dit kun je perfect daaruit halen. Percentage berekening kun je gewoon in je ORDER statement gooien.quote:Op maandag 25 juli 2011 14:19 schreef remi1986 het volgende:
[..]
Dit is ongeveer vergelijkbaar met de oplossing die ik zelf gaf met de foreach loop. Want als je de volgorde weet van het eerste jaar, kan je ze gewoon benaderen als je de naam weet.
1 | SELECT * FROM `test` ORDER BY (Deel / Totaal) DESC |
Dat is toch niet zo'n probleem? Gewoon met SUM en COUNT de totalen berekenen en dan selecten en ordenen op de waarde / totaal * 100.quote:Op maandag 25 juli 2011 14:16 schreef remi1986 het volgende:
[..]
Hoe kan ik met MySQL een percentage berekenen dan? En dan moet het een percentage zijn over de SUM van een aantal kolommen.
1 2 3 4 5 6 7 8 9 10 11 | SELECT medewerker_naam SUM(getal1) AS getal1 SUM(getal2) AS getal2 SUM(getal3) AS getal3 FROM medewerkers INNER JOIN tabel 1 INNER JOIN tabel 2 INNER JOIN tabel 3 WHERE datum BETWEEN .... AND .. GROUP BY medewerker |
Wat dacht je vanquote:Op maandag 25 juli 2011 14:28 schreef remi1986 het volgende:
De resultaten komen uit koppeltabellen en worden met GROUP BY bij elkaar gevoegd (hiermee krijg ik dus totalen voor in dit geval de medewerker)
Onderstaand de query met Nederlandse namen (kolommen heten anders, maar dit gaat sneller),
[ code verwijderd ]
Om het percentage te berekenen moet ik eerst getal 1 en 2 optellen. Getal 3 / (getal 1+2) * 100 = percentage wat ik nodig heb. Hoe wil dit allemaal in MySQL
1 2 3 4 5 6 7 8 9 10 11 12 | SELECT medewerker_naam SUM(getal1) AS getal1 SUM(getal2) AS getal2 SUM(getal3) AS getal3 AVG (getal1, getal2, getal3) AS gemiddeld FROM medewerkers INNER JOIN tabel 1 INNER JOIN tabel 2 INNER JOIN tabel 3 WHERE datum BETWEEN .... AND .. GROUP BY gemiddeld ASC, medewerker ASC |
1 2 3 4 5 6 7 8 9 10 11 12 | SELECT medewerker_naam SUM(getal1) AS getal1 SUM(getal2) AS getal2 SUM(getal3) AS getal3 getal3 / (getal1+2) * 100 AS percentage FROM medewerkers INNER JOIN tabel 1 INNER JOIN tabel 2 INNER JOIN tabel 3 WHERE datum BETWEEN .... AND .. GROUP BY medewerker |
1 2 | SELECT Naam, SUM(Deel) / SUM(Totaal) * 100 As Percentage FROM `test` GROUP BY Naam ORDER BY Percentage DESC |
quote:
ok dit snap ik. Maar ik moet de volgorde bepalen van de medewerkers hoe deze getoond worden (hoogste percentage in laatste jaar bovenaan). Die ORDER BY gaat dan alleen op als jaar 2011 is (in het eerste voorbeeld dat ik gaf)quote:
ORDER BY Jaartal DESC, Percentage DESCquote:Op maandag 25 juli 2011 14:35 schreef remi1986 het volgende:
[..]
[..]
ok dit snap ik. Maar ik moet de volgorde bepalen van de medewerkers hoe deze getoond worden (hoogste percentage in laatste jaar bovenaan). Die ORDER BY gaat dan alleen op als jaar 2011 is (in het eerste voorbeeld dat ik gaf)
haha je was me voor,quote:Op maandag 25 juli 2011 14:37 schreef Pakspul het volgende:
[..]
ORDER BY Jaartal DESC, Percentage DESC
Als je dingen specifiek tussen 2 jaartallen wilt hebben voeg je er gewoon op het einde aan toe: WHERE YEAR(datum) BETWEEN 2000 AND 2011.quote:Op maandag 25 juli 2011 14:46 schreef remi1986 het volgende:
hmm het zal wel aan de maandag liggen, dus wellicht nog een domme opmerking
Maar mijn uiteindelijke doel is een tabel met een overzicht van alle jaren naast elkaar (onderstaand 2011 en 2010, maar dit kunnen er 10 zijn (dus tot 2001 terug).
2011 2010
Jan (getal1+2), getal 3, percentage (getal1+2), getal 3, percentage
Klaas (getal1+2), getal 3, percentage (getal1+2), getal 3, percentage
Piet (getal1+2), getal 3, percentage (getal1+2), getal 3, percentage
Volgens mij gaat dat niet goedkomen, aangezien je dit niet kan doen zonder eerst een array voor een bepaald jaar te maken. Of zit ik nu weer helemaal verkeerd te denken?
EDIT: Zou een tabel moeten voorstellen maar de jaren komen elk dus boven (getal 1 +2 etc...)
Forum Opties | |
---|---|
Forumhop: | |
Hop naar: |