Array sorteren zoals in Mysql?

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

G Jansma

G Jansma

02/09/2016 23:26:11
Quote Anchor link
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?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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 )) ?>
Gewijzigd op 02/09/2016 23:29:02 door G Jansma
 
PHP hulp

PHP hulp

17/01/2022 05:11:40
 
Bo Ter Ham

Bo Ter Ham

02/09/2016 23:32:48
Quote Anchor link
Met ORDER BY wellicht? Iets als
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
SELECT [columns] FROM [table] ORDER BY stand_punten DESC, r7 DESC, r6 DESC, r5 DESC, r4 DESC, r3 DESC, r2 DESC, r1 DESC
 
G Jansma

G Jansma

02/09/2016 23:43:57
Quote Anchor link
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?
 
Ramon van Dongen

Ramon van Dongen

02/09/2016 23:56:45
Quote Anchor link
Misschien eerst proberen het in MySQL wel voor elkaar te krijgen?

Hoe staat het daarin en hoe moet het eruit komen?
 
Jan R

Jan R

03/09/2016 03:07:07
Quote Anchor link
En als het dan toch niet gaat in sql probeer dan uasort, usort, uksort, enz eens

http://php.net/manual/en/function.uasort.php
Gewijzigd op 03/09/2016 03:08:15 door Jan R
 
G Jansma

G Jansma

03/09/2016 09:29:55
Quote Anchor link
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?


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


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
 
Adoptive Solution

Adoptive Solution

03/09/2016 15:02:03
Quote Anchor link
Op basis van de opgegeven array en wat aannames heb ik dit bedacht

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?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>';

?>


$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
 
G Jansma

G Jansma

03/09/2016 21:21:35
Quote Anchor link
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?
 
Ben van Velzen

Ben van Velzen

04/09/2016 01:51:10
Quote Anchor link
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 ...)
 



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.