Avatar billede dittlau Nybegynder
24. januar 2005 - 00:11 Der er 9 kommentarer og
1 løsning

COUNT i tabel?

Hej Eksperter!

Er ved at lave en lille statusside, som viser hvordan nogle backup'er er gået. Den lister efter hvor mange dage i træk, backup'en IKKE er OK.

Er kørt lidt fast i mit SQL-statement.

Jeg har to felter i samme tabel (ZipOK og DatoOpr). Jeg laver en COUNT på ZipOK, ZipOK kan indeholde: 0 = OK backup, -100 = Backup ikke modtaget og -200 = Fejl i backup.

Problemet er nu, at jeg kun vil have vist dage i træk hvor backup'en er = -100 / -200, dvs. DatoOpr må ikke være større på ZipOK=0, end ZipOK=-100/-200.

Håber forklaringen er OK.

Lige nu ser min SQL sådan ud:

strQuery = "SELECT ADBackLog.Nr, ADBackLog.DatoOpr, ADBackLog.ZipOK AS Fejl, COUNT(ADBackLog.ZipOK) AS Count, ADBackup.Navn, ADBackup.Aktiv FROM ADBackLog, ADBackup WHERE ADBackup.Aktiv=1 AND ADBackLog.Nr=ADBackup.NR AND ADBackLog.ZipOK<0 GROUP BY ADBackLog.NR ORDER BY Count DESC"

/dittlau
Avatar billede kjulius Novice
24. januar 2005 - 19:04 #1
Som jeg tolker dit spørgsmål, så ønsker du kun at vise fejl, siden sidste gang backup'en var OK.

Hvis det er rigtigt, burde du kunne klare det ved at udvide din WHERE med følgende subselect:

WHERE ... AND ADBackLog.DatoOpr > (SELECT MAX(ADBackLog.DatoOpr) FROM ADBacklog bl WHERE bl.Aktiv = ADBackLog.Aktiv AND bl.Nr = ADBackup.NR AND bl.Zip >= 0)
Avatar billede dittlau Nybegynder
26. januar 2005 - 22:57 #2
kjulius: Får følgende fejl:
Microsoft OLE DB Provider for ODBC Drivers error '80040e09'
[TCX][MyODBC]You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT MAX(ADBackLog.DatoOpr) FROM ADBacklog bl WHERE bl.Aktiv

Nu ser min SQL sådan ud:
strQuery = "SELECT ADBackLog.Nr, ADBackLog.DatoOpr, ADBackLog.ZipOK AS Fejl, COUNT(ADBackLog.ZipOK) AS Count, ADBackup.Navn, ADBackup.Aktiv FROM ADBackLog, ADBackup WHERE ADBackup.Aktiv=1 AND ADBackLog.Nr=ADBackup.NR AND ADBackLog.ZipOK<0 AND ADBackLog.DatoOpr > (SELECT MAX(ADBackLog.DatoOpr) FROM ADBacklog bl WHERE bl.Aktiv = ADBackLog.Aktiv AND bl.Nr = ADBackup.NR AND bl.Zip >= 0) GROUP BY ADBackLog.NR ORDER BY Count DESC"

Kan dog ikke helt se hvad bl skal betyde.

/dittlau
Avatar billede dittlau Nybegynder
26. januar 2005 - 22:58 #3
Men du har dog forstået min vage forklaring :-)

/dittlau
Avatar billede kjulius Novice
27. januar 2005 - 00:59 #4
Oops, ja jeg ser fejlen. Når jeg i subselecten giver tabellen ADBacklog aliaset bl, skal MAX(ADBacklog.DatoOpr) naturligvis også ændres til MAX(bl.DatoOpr).

Herefter ser den sådan ud:

strQuery = "SELECT ADBackLog.Nr, ADBackLog.DatoOpr, ADBackLog.ZipOK AS Fejl, COUNT(ADBackLog.ZipOK) AS Count, ADBackup.Navn, ADBackup.Aktiv FROM ADBackLog, ADBackup WHERE ADBackup.Aktiv=1 AND ADBackLog.Nr=ADBackup.NR AND ADBackLog.ZipOK<0 AND ADBackLog.DatoOpr > (SELECT MAX(bl.DatoOpr) FROM ADBacklog bl WHERE bl.Aktiv = ADBackLog.Aktiv AND bl.Nr = ADBackup.NR AND bl.Zip >= 0) GROUP BY ADBackLog.NR ORDER BY Count DESC"
Avatar billede dittlau Nybegynder
29. januar 2005 - 00:24 #5
Samme fejl.

Har læst mig til, at man ikke kan bruge subselects i MySQL, kan det ikke være fejlen??

/dittlau
Avatar billede kjulius Novice
29. januar 2005 - 01:56 #6
Jo, det mener jeg nu nok at man kan i de nyere versioner. Hvilken version af MySQL bruger du?

Den nye version 4.1 understøtter så vidt jeg kan se på www.mysql.com subselects. Måske skal du have din database opdateret...
Avatar billede dittlau Nybegynder
08. februar 2005 - 00:25 #7
Det er så ikke den nyeste version der bliver kørt, og umiddelbart bliver den ikke opdateret.

Kjulius smid et svar, så får du halvdelen af points.

/dittlau
Avatar billede dittlau Nybegynder
03. marts 2005 - 00:02 #8
Lukkes, kjulius, hvis du vil have points, så skriv lige en kommentar i dette spørgsmål, så opretter jeg et nyt til dig, med dine points.
Avatar billede kjulius Novice
03. marts 2005 - 02:04 #9
Nej, det er fint nok som det er. Ingen løsning, ingen point. Det må være sådan det skal være.
Avatar billede dittlau Nybegynder
04. marts 2005 - 03:28 #10
OK, men tak for forsøget.
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
Computerworld tilbyder specialiserede kurser i database-management

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