array multisort
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)
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
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);
}
}
?>
$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?
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
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.
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!