Avatar billede leif Seniormester
04. oktober 2005 - 10:59 Der 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 ?

På forhånd tak.

Fra
Leif
Avatar billede kalp Novice
04. oktober 2005 - 11:02 #1
$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");
Avatar billede kalp Novice
04. oktober 2005 - 11:03 #2
jeg er lidt usikker.. måske udskriver den kun dem ud med Faktura.. der må du lige sige til
Avatar billede leif Seniormester
04. oktober 2005 - 11:10 #3
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.
Avatar billede kalp Novice
04. oktober 2005 - 15:32 #4
Du er ikke glemt.. det er bare lidt mere tricky end jeg lige havde regnet med! Jeg kigger på det så snart jeg er hjemme!
Avatar billede leif Seniormester
04. oktober 2005 - 17:13 #5
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.
Avatar billede kalp Novice
04. oktober 2005 - 19:57 #6
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?
Avatar billede leif Seniormester
04. oktober 2005 - 21:00 #7
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.
Avatar billede leif Seniormester
04. oktober 2005 - 21:35 #8
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'
Avatar billede kalp Novice
04. oktober 2005 - 21:51 #9
$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

`id`

hehe

troede de skulle se sådan her ud 'id'

men når det er tal så egentlig bare

id
Avatar billede leif Seniormester
04. oktober 2005 - 22:03 #10
Så får jeg kun alle poster med type = Faktura, dvs. nu er alle i minus selvom de har betalt.
Avatar billede kalp Novice
04. oktober 2005 - 22:22 #11
Vi prøver lige med din SQL fra før..

$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 'ø' )
Avatar billede leif Seniormester
04. oktober 2005 - 22:26 #12
Pt. vil det være sådan at hvis konto er i Minus og sidste faktura er over 14 dage gammel kommer der en mail.
Avatar billede leif Seniormester
04. oktober 2005 - 22:30 #13
Med den seneste SQL får jeg samme fejl:
Unknown column '10' in 'where clause'
Avatar billede leif Seniormester
04. oktober 2005 - 22:31 #14
Ellers skal jeg næsten køre med den kl. 21:51:38 men undlade at filtrere på Type
Avatar billede kalp Novice
04. oktober 2005 - 22:32 #15
$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.
Avatar billede kalp Novice
04. oktober 2005 - 22:32 #16
$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");

skal bare være sådan.
Avatar billede leif Seniormester
04. oktober 2005 - 22:36 #17
"Unknown column 'total' in 'where clause'" ved den sidste SQL sætning.

Ja, i datotjecket er det kun dem med type = Faktura, men i Totalen skal det være alle posterne.
Avatar billede leif Seniormester
04. oktober 2005 - 22:39 #18
Hvis du vil se hele scriptet må du gerne det, jeg har bare ikke lyst til at ligge det til gennemskue her.
Avatar billede kalp Novice
04. oktober 2005 - 22:47 #19
$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..
Avatar billede leif Seniormester
04. oktober 2005 - 22:55 #20
Invalid use of group function
Avatar billede kalp Novice
04. oktober 2005 - 23:00 #21
$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...

du tjekker om total er mindre en 0 .. burde virke
Avatar billede leif Seniormester
04. oktober 2005 - 23:02 #22
Dvs. du vil køre med min originale til at starte med og i en løkke når jeg har undersøgt om den er mindre end 0 laver jeg den ?
Avatar billede kalp Novice
04. oktober 2005 - 23:50 #23
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..
Avatar billede leif Seniormester
21. oktober 2005 - 00:56 #24
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.

Kalp smid et svar.
Avatar billede kalp Novice
21. oktober 2005 - 01:11 #25
Du tager bare point selv:)
Avatar billede leif Seniormester
21. oktober 2005 - 01:12 #26
Okay !
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester