Array sorteren zoals in Mysql?
Hallo,
Ik heb de volgende array, die ik graag wil sorteren zoals dat in Mysql kan, maar ik kom er niet uit. Omdat ik het in Mysql niet helemaal voor elkaar krijg heb ik in PHP de arrays samengevoegd. Nu wil ik ze eerst sorteren op de totale score (stand_punten), en vervolgens op r7, r6, r5, r4, r3, r2, r1 (omdat het laatste resultaat dan beslissend is). Iemand die weet hoe dit zou kunnen?
Ik heb de volgende array, die ik graag wil sorteren zoals dat in Mysql kan, maar ik kom er niet uit. Omdat ik het in Mysql niet helemaal voor elkaar krijg heb ik in PHP de arrays samengevoegd. Nu wil ik ze eerst sorteren op de totale score (stand_punten), en vervolgens op r7, r6, r5, r4, r3, r2, r1 (omdat het laatste resultaat dan beslissend is). Iemand die weet hoe dit zou kunnen?
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
<?php Array (
[0] => Array ( [id] => 3 [land] => Belgium [stand_punten] => 200 [r1] => 80 [r2] => 70 [r3] => 70 [r4] => 70 [r5] => 46 [r6] => 70 [r7] => 70 )
[1] => Array ( [id] => 4 [land] => Netherlands [stand_punten] => 180 [r1] => 60 [r2] => 80 [r3] => 60 [r4] => 55 [r5] => 65 [r6] => 65 [r7] => 48 )
[2] => Array ( [id] => 2 [land] => Belgium [stand_punten] => 180 [r1] => 55 [r2] => 60 [r3] => 46 [r4] => 65 [r5] => 70 [r6] => 60 [r7] => 65 )
[3] => Array ( [id] => 1 [land] => Belgium [stand_punten] => 180 [r1] => 70 [r2] => 65 [r3] => 80 [r4] => 46 [r5] => 42 [r6] => 48 [r7] => 38 )
[4] => Array ( [id] => 5 [land] => Netherlands [stand_punten] => 160 [r1] => [r2] => [r3] => 65 [r4] => 80 [r5] => 80 [r6] => 80 [r7] => 80 )
[5] => Array ( [id] => 7 [land] => Belgium [stand_punten] => 160 [r1] => 48 [r2] => 42 [r3] => 55 [r4] => 38 [r5] => 38 [r6] => 50 [r7] => 60 )
[6] => Array ( [id] => 6 [land] => Belgium [stand_punten] => 160 [r1] => 28 [r2] => 36 [r3] => 50 [r4] => 37 [r5] => 60 [r6] => 55 [r7] => 55 )) ?>
[0] => Array ( [id] => 3 [land] => Belgium [stand_punten] => 200 [r1] => 80 [r2] => 70 [r3] => 70 [r4] => 70 [r5] => 46 [r6] => 70 [r7] => 70 )
[1] => Array ( [id] => 4 [land] => Netherlands [stand_punten] => 180 [r1] => 60 [r2] => 80 [r3] => 60 [r4] => 55 [r5] => 65 [r6] => 65 [r7] => 48 )
[2] => Array ( [id] => 2 [land] => Belgium [stand_punten] => 180 [r1] => 55 [r2] => 60 [r3] => 46 [r4] => 65 [r5] => 70 [r6] => 60 [r7] => 65 )
[3] => Array ( [id] => 1 [land] => Belgium [stand_punten] => 180 [r1] => 70 [r2] => 65 [r3] => 80 [r4] => 46 [r5] => 42 [r6] => 48 [r7] => 38 )
[4] => Array ( [id] => 5 [land] => Netherlands [stand_punten] => 160 [r1] => [r2] => [r3] => 65 [r4] => 80 [r5] => 80 [r6] => 80 [r7] => 80 )
[5] => Array ( [id] => 7 [land] => Belgium [stand_punten] => 160 [r1] => 48 [r2] => 42 [r3] => 55 [r4] => 38 [r5] => 38 [r6] => 50 [r7] => 60 )
[6] => Array ( [id] => 6 [land] => Belgium [stand_punten] => 160 [r1] => 28 [r2] => 36 [r3] => 50 [r4] => 37 [r5] => 60 [r6] => 55 [r7] => 55 )) ?>
Gewijzigd op 02/09/2016 23:29:02 door G Jansma
Met ORDER BY wellicht? Iets als
In Mysql krijg ik het door de complexiteit van de tabellen niet voor elkaar. Ik wil daarom de array in PHP in de juiste volgorde krijgen. Ik neem aan dat er zoiets bestaat PHP om dat zo mooi te sorteren als in Mysql een Order By zou kunnen?
Misschien eerst proberen het in MySQL wel voor elkaar te krijgen?
Hoe staat het daarin en hoe moet het eruit komen?
Hoe staat het daarin en hoe moet het eruit komen?
En als het dan toch niet gaat in sql probeer dan uasort, usort, uksort, enz eens
http://php.net/manual/en/function.uasort.php
http://php.net/manual/en/function.uasort.php
Gewijzigd op 03/09/2016 03:08:15 door Jan R
Ramon van Dongen op 02/09/2016 23:56:45:
Misschien eerst proberen het in MySQL wel voor elkaar te krijgen?
Hoe staat het daarin en hoe moet het eruit komen?
Hoe staat het daarin en hoe moet het eruit komen?
In Mysql wil ik het probleem ook graag tackelen, ik zou het eigenlijk beide willen weten. Ik heb even een vereenvoudigde variant in SQLFiddle gezet.
http://sqlfiddle.com/#!9/8c6ed/8
Ik wil graag de uitkomst zoals hij er nu staat, maar dan van alle spelers dus slechts één rij. Ik wil dus de punten van de wedstrijden 30, 31, 32 uit 2016 in één rij krijgen met de ID en naam
id - naam - r1 - r2 - r3
1 - Jan - 90 - 48 - 60
2 - Piet - 80 - 90 - 0
Alvast bedankt
Toevoeging op 03/09/2016 09:33:18:
Jan R op 03/09/2016 03:07:07:
En als het dan toch niet gaat in sql probeer dan uasort, usort, uksort, enz eens
http://php.net/manual/en/function.uasort.php
http://php.net/manual/en/function.uasort.php
Ik heb uiteraard gekeken naar die functies, maar ik kom er niet uit. Vandaar mijn vraag.
Gewijzigd op 03/09/2016 09:30:36 door G Jansma
Op basis van de opgegeven array en wat aannames heb ik dit bedacht
$multicol is de gefatsoeneerde array.
Het resultaat met hoop opmaak zie je hier :
http://adoptive.esy.es/multisort/
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<?php
// Obtain a list of columns
foreach ($multicol as $key => $row) {
$sp[$key] = $row['stand_punten'];
$r7[$key] = $row['r7'];
$r6[$key] = $row['r6'];
$r5[$key] = $row['r5'];
$r4[$key] = $row['r4'];
$r3[$key] = $row['r3'];
$r2[$key] = $row['r2'];
$r1[$key] = $row['r1'];
}
array_multisort(
$sp, SORT_DESC,
$r7, SORT_DESC,
$r6, SORT_DESC,
$r5, SORT_DESC,
$r4, SORT_DESC,
$r3, SORT_DESC,
$r2, SORT_DESC,
$r1, SORT_DESC,
$multicol
);
echo '<pre>';
print_r($multicol);
echo '</pre>';
?>
// Obtain a list of columns
foreach ($multicol as $key => $row) {
$sp[$key] = $row['stand_punten'];
$r7[$key] = $row['r7'];
$r6[$key] = $row['r6'];
$r5[$key] = $row['r5'];
$r4[$key] = $row['r4'];
$r3[$key] = $row['r3'];
$r2[$key] = $row['r2'];
$r1[$key] = $row['r1'];
}
array_multisort(
$sp, SORT_DESC,
$r7, SORT_DESC,
$r6, SORT_DESC,
$r5, SORT_DESC,
$r4, SORT_DESC,
$r3, SORT_DESC,
$r2, SORT_DESC,
$r1, SORT_DESC,
$multicol
);
echo '<pre>';
print_r($multicol);
echo '</pre>';
?>
$multicol is de gefatsoeneerde array.
Het resultaat met hoop opmaak zie je hier :
http://adoptive.esy.es/multisort/
Gewijzigd op 03/09/2016 15:04:39 door Adoptive Solution
Wow, superbedankt man! Niet gedacht dat het nog zo lastig zou zijn.
Nog iemand die weet hoe ik het in Mysql ook voor elkaar kan krijgen?
Nog iemand die weet hoe ik het in Mysql ook voor elkaar kan krijgen?
Zoals het in de fiddle staat zou je het kunnen proberen door te selecteren uit een drievoudig gejoinde subselect, zodat je je ORDER BY gewoon kan gebruiken. Iets als ORDER BY r1 + r2 + r3, r3, r2, r1.
SELECT ... FROM (SELECT .... ORDER BY ...)
SELECT ... FROM (SELECT .... ORDER BY ...)




