04. oktober 2005 - 10:59Der er
25 kommentarer og 1 løsning
Få sidste dato med
Hej,
Har følgende SQL sætning som jeg er tilfreds med: $result = mysql_query("SELECT kunder.*, SUM(billing.beløb) AS total FROM kunder, billing WHERE billing.konto = kunder.bruger GROUP BY billing.konto ORDER BY `id` ASC");
Nu er det sådan at jeg har behov for at få den Sidste Dato ud hvor der i Billing står Type = Faktura
Kan jeg bygge det ind i min SQL sætning eller skal jeg ud i en ekstra sætning i min løkke ?
$result = mysql_query("SELECT kunder.*, SUM(billing.beløb) AS total FROM kunder, billing WHERE billing.konto = kunder.bruger AND billing.type = 'Faktura' GROUP BY billing.konto ORDER BY `id` ASC");
Jeg skal bruge til den totale sum af kontoen (Både + og - posteringer) og den sidste fakturadato, så jeg kan bagefter lave et tjeck på at hvis Fakturadato er mere end 14 dage gammel skal der sendes en rykker til kontoen.
Bare rolig ellers skal jeg nok sige til hvis jeg synes det. Ja, den er lidt tricky, men jeg har måske fundet en alternativ måde.
Hente alle posterne og i stedet for at bruge SUM(billing.beløb) så lave en løkke hvor jeg laver en sammentælling af den enkelte konto og ved type=Faktura skrive den i en ny variabel, så burde jeg kunne få den sidste Fakturadato med ud.
Jeg tror faktisk bare jeg skal have lidt flere detaljer om din database..
for at få den sidste faktura ud så må du have en billing.dato eller billing.id eller noget?
og så er det du gerne vil have ud altså den total sum af konto'en (som du allerede har klaret selv ser det ud til) så det eneste der mangler på din sql er altså det med sidste faktura?
Man kan sige summen har jeg sådan set, men det er bare den sidste fakturas dato jeg skal bruge.
Min struktur i min billing ser ud som: CREATE TABLE billing ( id int(4) NOT NULL auto_increment, konto varchar(40) NOT NULL default '', dato date NOT NULL default '0000-00-00', type varchar(10) NOT NULL default '', faktura varchar(10) NOT NULL default '', beløb float(10,2) NOT NULL default '0.00', PRIMARY KEY (id) ) TYPE=MyISAM PACK_KEYS=0;
Jeg kan sige hvad det er jeg skal bruge i sidste ende: Hvis Fakturadato er ældre end 3 uger og Totalsum er i minus skal der sendes en mail med diverse tekst.
Jeg har prøvet at i den løkke hvor jeg tjecker på Totalen og lave: $result = mysql_query("SELECT * FROM billing WHERE `type` LIKE 'Faktura' AND `konto` LIKE ".$row['bruger']." ORDER BY `id` DESC LIMIT 0,1");
Så får jeg følgende fejl når den finder fx. konto 10 som er i Minus: Unknown column '10' in 'where clause'
$result = mysql_query("SELECT kunder.*, SUM(billing.beløb) AS total, MAX(billing.dato) as dato FROM kunder, billing WHERE billing.konto = kunder.bruger AND billing.type = 'Faktura' GROUP BY billing.konto ORDER BY `id` ASC");
det burde være noget som det der.. undrer mig lidt over at du ikke får fejl ved
$result = mysql_query("SELECT * FROM billing WHERE type ='Faktura' AND konto = ".$row['bruger']." ORDER BY id DESC LIMIT 0,1");
hvordan kan du se om en faktura er blevet betalt? ved, at beløb ikke er i minus? (hvilket forresten minder mig om det også kan skabe problemer at du bruger 'ø' )
$result = mysql_query("SELECT kunder.*, SUM(billing.beløb) AS total, MAX(billing.dato) as dato FROM kunder, billing WHERE billing.konto = kunder.bruger AND billing.type = 'Faktura' AND total < 0 OR total = 0 GROUP BY billing.konto ORDER BY `id` ASC");
før sagde du at der kun kom dem med type = faktura.. men det var vel også meningen?
ps. denne sql ved jeg ikke om den godtager.. hvis den gør er det godt.
$result = mysql_query("SELECT kunder.*, SUM(billing.beløb) AS total, MAX(billing.dato) as dato FROM kunder, billing WHERE billing.konto = kunder.bruger AND billing.type = 'Faktura' AND total < 0 GROUP BY billing.konto ORDER BY `id` ASC");
$result = mysql_query("SELECT kunder.*, SUM(billing.beløb) AS total, MAX(billing.dato) as dato FROM kunder, billing WHERE billing.konto = kunder.bruger AND billing.type = 'Faktura' AND SUM(billing.beløb) < 0 GROUP BY billing.konto ORDER BY `id` ASC");
det er fordi den tror total er en kolonne, men det er bare min variabel .. men hvis man kan få lov til at bruge SUM to gange og der hvor den er nu..så burde den SQL virke..
$result = mysql_query("SELECT kunder.*, SUM(billing.beløb) AS total, MAX(billing.dato) as dato FROM kunder, billing WHERE billing.konto = kunder.bruger AND billing.type = 'Faktura' GROUP BY billing.konto ORDER BY `id` ASC");
kør en lille løkke nu og undersøg om de skal printes ud eller ej...
præcis.. hvis den er mindre en nul så er den jo i minus.. der skal dog lige tilføjes det med Type faktura i SQL'en :) så mit første bud på SQL'en burde kunne gøre det sammen med en løkke..
Okay ! Jeg fandt en OK løsning. Tjecker om saldoen er mindre end 0 og er den det hvad er så den sidste posteringsdato, er den mere end 14 dage siden får de end mail.
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.