Avatar billede sunnyboy_55 Nybegynder
02. september 2011 - 17:13 Der er 19 kommentarer og
1 løsning

Sammenligning af dato?

Hej Ekspeter

2 kolonner med hver sit datetime skal sammenlignes i en sql sætning, så jeg kan få antal indlæg siden sidste besøg, jeg har prøvet denne kode:

StrSQL = "Select count(*) as antal from gaester WHERE brugerID= '" & id & "' and last_visit> " & dato & ""

set rs = Conn.execute(strSQL)

last_visit er det tidspunkt man sidst har besøgt siden og dato er det tidspunkt hvor indlægget er smidt i db

Det virker bare ikke, er der ikke noget med, at ved dato'er skal der bruges havelåger eller noget i den dur?

mvh. S
Avatar billede Slettet bruger
02. september 2011 - 20:53 #1
Det er nemmere hvis du bruger prepared statements, for så behøver du ikke bekymre dig om at få lavet din datetime om til en tekst streng, og du beskytter dig mod sql injection. Jeg bruger ikke selv VB, så jeg ved ikke hvordan det gøres der.

Er din dato en streng eller en datetime? Har du prøvet med datoformattet 'yyyy-MM-dd HH:mm:ss', f.eks. '2011-09-02 20:50:00'?
Avatar billede sunnyboy_55 Nybegynder
02. september 2011 - 21:21 #2
både last_visit og dato er datetime, og når de bliver udskrevet står de i format 25-08-2011 14:14:28. Det skyldes måske jeg i toppen af side har <% Session.LCID = 1030 %>.

Har du et forslag til hvad jeg skal gøre?
Avatar billede Slettet bruger
02. september 2011 - 21:23 #3
Hvilken database benytter du? Access, MsSQL, Mysql?
Avatar billede sunnyboy_55 Nybegynder
02. september 2011 - 21:25 #4
phpmysql
Avatar billede Slettet bruger
02. september 2011 - 21:33 #5
Så kan du bruge formatet 'yyyymmddhhiiss'

SELECT
  COUNT (*) AS `antal`
FROM
  `gaester`
WHERE
  `brugerID` = '" & id & "' AND
  `last_visit` > '20110902213300'
Avatar billede sunnyboy_55 Nybegynder
02. september 2011 - 21:45 #6
jeg får en fejlbesked:

[MySQL][ODBC 3.51 Driver][mysqld-5.1.51-log]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 '*) AS antal FROM gaester WHERE brugerID = '43' AND last_visit > '20110902213300'' at line 1

når jeg bruger denne: strSQL = "SELECT COUNT (*) AS antal FROM gaester WHERE brugerID = '" & id & "' AND last_visit > '20110902213300' & "'"

udover dette skal feltet dato ind fra tabellen med indlæg? Det er jo dato indput fra 2 tabeller?
Avatar billede Slettet bruger
02. september 2011 - 21:58 #7
Fjern mellemrum mellem "COUNT" og "(":

"COUNT (*)" -> "COUNT(*)"


Måske skal din forespørgsel udformes således?

SELECT
    COUNT(*) AS `antal`
FROM
    `gaester` INNER JOIN `indlaeg` ON(
        `gaester`.`brugerID` = '" & id & "' AND
        `indlaeg`.`date` > `gaester`.`last_visit`
    )
Avatar billede Slettet bruger
02. september 2011 - 22:06 #8
Hvis du kun har dato som en tekst streng og i formattet '25-08-2011 14:14:28', så prøv med:

StrSQL = "Select count(*) as antal from gaester WHERE brugerID= '" & id & "' and last_visit> str_to_date('" & dato & "', %d-%m-%Y %H:%i:%s')"

Jeg ved ikke om VB syntaxen er rigtig, men ideen er at du konverterer datoen på denne måde:

str_to_date('25-08-2011 14:14:28', '%d-%m-%Y %H:%i:%s')

http://www.java2s.com/Tutorial/MySQL/0280__Date-Time-Functions/STRTODATEstrformat.htm
Avatar billede sunnyboy_55 Nybegynder
02. september 2011 - 22:10 #9
jeg kan ikke rigtig gennemskue den kode, jeg har datetime fra tabellen bruger med feltet last_visit og så er der tabellen gaester med dato som også er datetime. Men jeg kan ikke rigtig for det til at passe, de små tegn ' skal de være der?
Avatar billede sunnyboy_55 Nybegynder
02. september 2011 - 22:11 #10
ok, vi sendte forbi hinanden, jeg prøver lige igen.
Avatar billede sunnyboy_55 Nybegynder
02. september 2011 - 22:14 #11
prøve denne:

StrSQL = "Select count(*) as antal from gaester WHERE brugerID= '" & id & "' and last_visit> str_to_date('" & dato & "', %d-%m-%Y %H:%i:%s')"

set rs = Conn.execute(strSQL)

og fik fejlbesked som her:


Microsoft OLE DB Provider for ODBC Drivers

error '80040e14'

[MySQL][ODBC 3.51 Driver][mysqld-5.1.51-log]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 '%d-%m-%Y %H:%i:%s')' at line 1

som er denne her linie set rs = Conn.execute(strSQL)
Avatar billede Slettet bruger
02. september 2011 - 22:14 #12
Og hvis du kan bruge kvadratrodenaf1's forslag med inner join, så er det en meget bedre løsning at gå efter.
Avatar billede Slettet bruger
02. september 2011 - 22:17 #13
Du mangler en ' lige før %d i det du postede:
StrSQL = "Select count(*) as antal from gaester WHERE brugerID= '" & id & "' and last_visit> str_to_date('" & dato & "', '%d-%m-%Y %H:%i:%s')"
Avatar billede sunnyboy_55 Nybegynder
02. september 2011 - 22:17 #14
jeg bruger gerne det bedste, hvis jeg kan - med hjælp - få det til at virke. Er overrasket over, at det er så svært at sammenligne 2 ens formater:-)
Avatar billede Slettet bruger
02. september 2011 - 22:18 #15
Faktisk var det mig der glemte at tilføje den. :)
Avatar billede Slettet bruger
02. september 2011 - 22:19 #16
Hvis du vil tælle antal indlæg, der har været siden sidste login, arbejder du på den forkerte tabel.

Udgangspunktet er "Select count(*) as antal from gaester WHERE "...
Her er du i gang med at tælle gæster (formentligt brugere), hvor du faktisk vil tælle indlæg - du skal altså arbejde på en tabel, der hedder indlaeg, ell. lign.

Prøv mit forslag fra før. Tilret naturligvis tabelnavn og kolonnenavn, hhv. indlaeg og date:

SELECT
    COUNT(*) AS `antal`
FROM
    `gaester` INNER JOIN `indlaeg` ON(
        `gaester`.`brugerID` = '" & id & "' AND
        `indlaeg`.`date` > `gaester`.`last_visit`
    )
Avatar billede sunnyboy_55 Nybegynder
02. september 2011 - 22:26 #17
jeg prøver lige begge forslag, og rigtigt, jeg overså lige at tolamaps var med i snakken:-)
Avatar billede sunnyboy_55 Nybegynder
03. september 2011 - 08:41 #18
jeg forsøgte en del tid med kvadratrodensaf1's forslag med INNER JOIN, men kunne desværre ikke få det til at spille, må være fordi det er første gang jeg stifter bekendtskab med funktion.

herefter prøvede jeg så tolamaps løsning og den virkede efter en lille justering og ser nu sådan ud:

StrSQL = "Select count(*) as antal from gaester WHERE brugerID= '" & id & "' and dato > str_to_date('" & last_visit & "', '%d-%m-%Y %H:%i:%s')"'"

tak for hjælpen til begge, og det er tolamaps som få pointene, så smid et svar:-)

God weekend til alle på eksperten.dk.

mvh. S
Avatar billede Slettet bruger
03. september 2011 - 17:52 #19
Pointene må du godt beholde eller give til en anden. Håber du finder ud af det med inner join en dag. God weekend. :)
Avatar billede sunnyboy_55 Nybegynder
03. september 2011 - 18:09 #20
Ja, inner join skal være et af mine næste opgaver:-)
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
Kurser inden for grundlæggende programmering

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