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; }
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.