array multisort
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:
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?
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?
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.
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
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.
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.
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!
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!




