06. september 2011 - 14:21Der er
8 kommentarer og 1 løsning
Sortere $file_output
Jeg har et database udtræk med ordre hvor der skal lave en tekst fil,
Data kommer således: varenr - vare - vareantal ... bla, bla..
Disse data skal så gemmmes i en tekst fil som varelinjer, det antal gange som vareantal og det går også fint men, hvordan kan jeg sortere $file_output så alle varenr($iden) udskrives sammen.
altså hvis vare antal nu var 3 for vare 1 og 4 for vare 2 så ser min varefil således ud: :
//Kopiere teksten X antal gange og gør det klar til at gemme $antal = (isset($row['vare_antal']) && is_numeric($row['vare_antal']) && $row['vare_antal'] > 0) ? intval($row['vare_antal']) : 1; $file_output = ''; for($i = 0; $i < $antal; $i++){ $file_output .= $output; }
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
Det lyder, som om problemet er at få linierne sorteret i varenummer rækkefølge. Hvis linierne er resultatet af en database forespørgsel, er det så ikke blot et spørgsmål om at ordne udtrækket i varenummer rækkefølg? Hvis queryen for eksempel er:
$result= mysql_query("SELECT * FROM mytable")
skal den udbredes til
$result= mysql_query("SELECT * FROM mytable ORDER BY varenummer")
v.vare_id, v.ean, v.varenavn, v.varebeskrivelse, v.kvalitet, v.holdbarheds_dage, v.salgspris FROM vare v, kunde_ordre k WHERE k.vare_id = v.vare_id AND k.ordre_nr = '".$ordrenr."'
Hey igen, det virkede ikke med Sort/group by ? Jeg roder lidt videre, men måske er det fordi databasen køre igennem data og hvergang tillægger til $output.... hmm roder....
Der er ikke noget galt med din query. Den leverer dine data sorteret efter vare_id nummer. For test lavede jeg nedenstående tabeller og kørte denne query:
SELECT v.vare_id, v.varenavn, k.kunde_ordre_id, k.vare_antal FROM articovare v, articokunde k WHERE v.vare_id = k.vare_id ORDER BY k.vare_id
Så det må ligge i din php kode. Det er ikke så let at gennemskue hensigten med koden for output i sammenhæng med queryen. Du synes slet ikke at gøre brug af data der kommer fra kunde_ordre tabellen. Eller er det mig der er bælgøjet?
Her er mine sample tabeller:
CREATE TABLE articovare(vare_id INT, varenavn VARCHAR(10)); INSERT INTO articovare VALUES(1, 'varenavn1'); INSERT INTO articovare VALUES(2, 'varenavn2'); INSERT INTO articovare VALUES(3, 'varenavn3');
CREATE TABLE articokunde(kunde_ordre_id INT, vare_id INT, vare_antal INT); INSERT INTO articokunde VALUES(1, 2, 25); INSERT INTO articokunde VALUES(2, 2, 12); INSERT INTO articokunde VALUES(3, 3, 55); INSERT INTO articokunde VALUES(4, 1, 2); INSERT INTO articokunde VALUES(5, 3, 55); INSERT INTO articokunde VALUES(6, 1, 16);
v.vare_id, v.ean, v.varenavn, v.varebeskrivelse, v.kvalitet, v.holdbarheds_dage, v.salgspris FROM vare v, kunde_ordre k WHERE k.vare_id = v.vare_id AND k.ordre_nr = '".$ordrenr."' GROUP BY k.vare_id ORDER BY v.vare_id ASC ")or die (mysql_error());
$dagetil_prod = $_POST['produktions_dag']; $ts_dd = time(); //Dags dato i timestamp $ts_prod = strtotime($dagetil_prod . ' days', $ts_dd); //Læg X dage til $ts
if (!isset($row['holdbarheds_dage'])) { //If not isset -> set with dumy value $row['holdbarheds_dage'] = 1; }
$dagetil = $row['holdbarheds_dage'] + $_POST['produktions_dag']; $ts = time(); //Dags dato i timestamp $ts = strtotime($dagetil . ' days', $ts); //Læg 14 dage til $ts
//Kopiere teksten X antal gange og gør det klar til at gemme $antal = (isset($row['vare_antal']) && is_numeric($row['vare_antal']) && $row['vare_antal'] > 0) ? intval($row['vare_antal']) : 1; $file_output = ''; for($i = 0; $i < $antal; $i++){ $file_output .= $output; } // downloading a file
Tror du problemet er, at du bytter rundt på $output og $file_output? $output bruger du til de enkelte linier, så $output skal defineres inde i while løkken. I $file_output samler du så det hele sammen, så den skal defineres udenfor løkken. For testformål skrev jeg nedenstående forenklede kode, hvor jeg blandt andet definerer $ordrenr = 1 i stedet for at få den fra $_POST['id'], og hvor jeg echoer outputtet i stedet for at placere det i en fil. Det giver dette resultat, hvilket jeg mener er det du ønsker:
1;varenavn1 1;varenavn1 1;varenavn1
2;varenavn2 2;varenavn2
3;varenavn3 3;varenavn3 3;varenavn3 3;varenavn3
Som en sidebemærkning, eftersom du fra kunde_ordre kun bruger vare_antal, foreslår jeg, at du kun inkluderer denne i queryen. Det forkommer, blandt andet, at du i $row får to felter begge med navnet 'vare_id'.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.