Versio

array multisort

Overzicht Reageren

Wout van der Burg

Wout van der Burg

06/02/2008 09:27:00
Quote Anchor link
Hallo,

Ik probeer dmv een while-lus waarden uit mijn database in een array te stoppen, zodat ik ze later kan sorteren op meerdere waarden.

Dit doe ik op deze manier:
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
<?php
    $sql
= "
    SELECT DISTINCT
        Week,
        Werkbonnummer,
        Debiteurennummer,
        Datum,
        MONTH(Datum) AS Datum_maand,
        DAY(Datum) AS Datum_dag,
        Werknemer,
        [Ma-Vrij] AS ma_vrij,
        Za,
        Zo,
        Productgroep,
        Periode,
        [ICG TS] AS icg_ts,
        Land,
        SUM(Materiaalkosten) AS materiaalkosten,
        SUM(Arbeidskosten) AS arbeidskosten,
        SUM(Autokosten) AS autokosten
    FROM
        T_WEEKSTAAT
    WHERE
        Periode LIKE '"
.$_POST['periode']."' AND
        Productgroep NOT LIKE '' AND
        [ICG TS] NOT LIKE ''
    GROUP BY
        Datum,
        Productgroep,
        Land,
        Week,
        Werkbonnummer,
        Debiteurennummer,
        Werknemer,
        [Ma-Vrij],
        Za,
        Zo,
        Periode,
        [ICG TS]"
;
        
    $rs = odbc_exec($dsn, $sql) or trigger_error(odbc_error());
    $i = 0;
    
    $icg = Array();
    while ($row = odbc_fetch_object($rs)) {
        
        $week = trim($row->Week);
        $werkbonnr = trim($row->Werkbonnummer);
        $debnr = trim($row->Debiteurennummer);
        $datum = $row->Datum;
        $maand = $row->Datum_maand;
        $dag = $row->Datum_dag;
        $werknmr = $row->Werknemer;
        $ma_vrij = $row->ma_vrij;
        $za = $row->Za;
        $zo = $row->Zo;
        $productgrp = $row->Productgroep;
        $periode = $row->Periode;
        $icg_ts = $row->icg_ts;
        $land = $row->Land;
        $materiekosten = $row->materiaalkosten;
        $arbeidskosten = $row->arbeidskosten;
        $autokosten = $row->autokosten;
        
        $icg[$i]['week'] = $week;
        $icg[$i]['werkbonnr'] = $werkbonnr;
        $icg[$i]['debnr'] = $debnr;
        $icg[$i]['debnaam'] = $debnaam;
        $icg[$i]['datum'] = $datum;
        $icg[$i]['dag'] = $dag;
        $icg[$i]['maand'] = $maand;
        $icg[$i]['werknmr'] = $werknmr;
        $icg[$i]['ma_vrij'] = $ma_vrij;
        $icg[$i]['za'] = $za;
        $icg[$i]['zo'] = $zo;
        $icg[$i]['productgrp'] = $productgrp;
        $icg[$i]['periode'] = $periode;
        $icg[$i]['icg_ts'] = $icg_ts;
        $icg[$i]['land'] = $land;
        $icg[$i]['materiekosten'] = $materiekosten;
        $icg[$i]['arbeidskosten'] = $arbeidskosten;
        $icg[$i]['autokosten'] = $autokosten;
        
        $i++;    
}

$aantal_records = $i;

if (!empty($icg)) {
foreach($icg as $sortarray) {
$column[] = $sortarray['maand'];
$column2[] = $sortarray['productgrp'];
$column3[] = $sortarray['land'];
array_multisort($column, SORT_DESC, SORT_NUMERIC,
                       $column2, SORT_DESC, SORT_REGULAR,
                       $column3, SORT_DESC, SORT_REGULAR);
}
}

?>

Nu doet hij de multisort niet goed, de maanden staan niet goed gesorteerd en de productgroepen staan nog steeds door elkaar :(
Ziet iemand wat ik fout doe?
 
PHP hulp

PHP hulp

23/05/2012 21:38:12
Gesponsorde koppelingen:
BHosted Hosting al vanaf € 1,- per maand

Controleer nu gratis jouw domeinnaam:

  
 
Cees St

Cees St

06/02/2008 11:02:00
Quote Anchor link
Heb je al gekeken of je GROUP BY wel werkt.

Zelf gebruik ik altijd eerst een ORDER BY en daarop dan de GROUP BY.

Zo uit het hoofd weet ik niet of dat het verplicht is het zo te doen.

Suc6

Cees
P.s. Snap ook niet waarom die multisort dan nog nodig is.
Gewijzigd op 01/01/1970 01:00:00 door Cees St
 
Frank -

Frank -

06/02/2008 11:11:00
Quote Anchor link
1) LIKE mag je vervangen door =, LIKE probeer je altijd te vermijden en heb je nooit nodig wanneer je geen % gebruikt.
2) [Ma-Vrij]... blokhaken [] zijn verboden, haal die dus weg. En ga niet jezelf voor schut zetten door backtics ` te gebruiken, daarmee raak je van de wal in de sloot.
3) Sorteren zou ik met een ORDER BY doen, dat is vele malen handiger.
 
Wout van der Burg

Wout van der Burg

06/02/2008 14:26:00
Quote Anchor link
Ik heb nu een ORDER BY toegepast.
de blokhaken werden gegenereerd door Acces dus heb ik ze overgenomen en al zijn ze verboden, ze werken prima. Deze database gebruik ik nu om de gegevens tevoorschijn te toveren (ja ik weet het, geen commentaar)

LIKE heb ik vervangen door =

Het werkt nu prima, bedankt!
 



Overzicht Reageren