Avatar billede tlunde Nybegynder
17. maj 2003 - 10:36 Der er 25 kommentarer og
1 løsning

Kan en SQL post have en udløbstid??

Hejsa,
Jeg har en side, hvor der er indrykket nogle annoncer, hvor de henholdsvis er sat til at skulle vare 7, 14 eller 30 dage. Noget ala dba.dk

Når jeg indrykker annoncen via min form, så gemmer jeg dato og kl i databasen i dette format: 17/05/2003 09:36:31, og i et andet felt i databasen står der bare 7, 14 eller 30 for hvor mange dage annoncen skal løbe over...

Hvordan kan jeg i min SELECT skrive sådan, at jeg får vist de "gyldige" annoncer i forhold til kl annoncen er indrykket på, og hvor lang tid den skal løbe over??

\ThomasLunde.dk
Avatar billede -master-d- Nybegynder
17. maj 2003 - 10:44 #1
Hvilket sprog snakker vi ?

I ASP ville det hedde noget lignende dette.

ex. alle gyldige annoncer inden for 7 dage.

SELECT * FROM Tabel WHERE DATOFELT >= #"& DateAdd("m", -7, Now()) &"#
Avatar billede -master-d- Nybegynder
17. maj 2003 - 10:45 #2
UPS sådan skal den se ud.

SELECT * FROM Tabel WHERE DATOFELT >= #"& DateAdd("d", -7, Now()) &"#
Avatar billede disky Nybegynder
17. maj 2003 - 10:47 #3
en udløbstid kan de ikke have, du skal selv slette de poster du ikke ønsker at se, eller slet ikke select'e dem.
Avatar billede mahler Nybegynder
17. maj 2003 - 10:47 #4
Der findes ikke en egentlig udløbsfunktion på poster, men det mest normale er at tilføje et felt, der hedder "expires" og når du opretter posten, så udregne tidspunktet, den udløber på.

Ved søgninger skal du så have et kriterie, der hedder "expires > now()" som en del af where-betingelserne.

Du skal - for at rydde op - enten manuelt eller via cronjob, køre en sletning, der fjerner alle poster med "expires < now()", for at slette disse.
Avatar billede tlunde Nybegynder
17. maj 2003 - 10:51 #5
Jeg arbejder i PHP, bare lige for at slå det fast!

Okay, jeg har mit dato felt: 17/05/2003 09:36:31 som jeg har hentet via funktionen $dato = date('d/m/Y H:i:s');

Så skal jeg på en eller anden måde lave sådan at mit varighedsfelt kommer til at se sådan ud: 24/05/2003 09:36:31, hvis den skal vare i 7 dage annoncen. Men hvordan gør jeg det?? Er det den rigtige måde jeg gemmer dato og kl på for at få det til at virke?
Avatar billede erikjacobsen Ekspert
17. maj 2003 - 11:08 #6
Som sagt før: dit felt skal være af type DATE (eller DATETIME hvis
du vil have tidspunkt på)
Avatar billede tlunde Nybegynder
17. maj 2003 - 11:11 #7
hmm...okay, men hvordan får jeg så varighedsfelten til at tælle 7 dage frem, fra den dato der står i dato feltet?
Avatar billede erikjacobsen Ekspert
17. maj 2003 - 12:48 #8
Du kan feks i PHP i date funktionen lægge 7 dage til  ...=date(...,time()+7*24*60*60)
Avatar billede mahler Nybegynder
17. maj 2003 - 13:30 #9
Hvis vi skal blive i mysql, så kunne du f.eks. give expires feltet følgende værdi:

insert into annonce(expires, ...) values (date_add(now(), INTERVAL 7 DAY), ...)

Se nærmere på http://www.mysql.com/doc/en/Date_and_time_functions.html (note: utestet, burde virke, jeg bruger selv noget tilsvarende andre steder).
Avatar billede tlunde Nybegynder
17. maj 2003 - 18:09 #10
okay, jeg er sgu lidt forvirret her:
1:
Hvad skal jeg ændre mit datofelt til i min database?

2:
Min INSERT ser sådan her ud:
---------
$dato = date('d/m/Y H:i:s');
mysql_query("INSERT INTO kobsalgbytte (dato, hvad, kategori, varighed, titel, beskrivelse, pris, navn, hjemsted, tlf, email)
VALUES ('$dato', '$hvad', '$kategori', '$varighed', '$titel', '$beskrivelse', '$pris kr', '$navn', '$hjemsted', '$tlf', '$email')") OR DIE (mysql_error());
mysql_close;
---------
Hvordan skal den ændres i forhold til det mahler skriver?

3:
Hvordan får jeg hevet de rigtige data ud fra db'en igen?

\ThomasLunde.dk
Avatar billede mahler Nybegynder
17. maj 2003 - 18:21 #11
glem din egen $dato, og brug lav i stedet en $varighed, som fortæller hvor mange dage, den skal være gældende. Så kan du lave SQLen om til:

mysql_query("INSERT INTO kobsalgbytte (dato, hvad, kategori, varighed, titel, beskrivelse, pris, navn, hjemsted, tlf, email)
VALUES ('$dato', '$hvad', '$kategori',date_add(now(), INTERVAL $varighed DAY) , '$titel', '$beskrivelse', '$pris kr', '$navn', '$hjemsted', '$tlf', '$email')") OR DIE (mysql_error());
Avatar billede tlunde Nybegynder
17. maj 2003 - 21:12 #12
mahler: okay...men den $varighed som du siger jeg skal lave, er det ikke den den tager med fra formen når man indrykker annoncen? Der har jeg jo en felt der hedder varighed, hvor man vælger enten 7,14 eller 30 dage, som den så tager med?
Avatar billede tlunde Nybegynder
17. maj 2003 - 21:12 #13
Jeg tager lige og leger med det her i første omgang, og så kan vi lige tage det derfra ik?
Avatar billede mahler Nybegynder
17. maj 2003 - 21:25 #14
Ja, $varighed er den fra formen.
Avatar billede tlunde Nybegynder
18. maj 2003 - 22:35 #15
mahler: Nu har jeg fået lavet sådan at den skriver datoen ud med den varighed på enten 7, 14 eller 30 dage lagt oveni, og det virker fint. Prøv evt. her:
http://www.thomaslunde.dk/peter/index.php

Hvordan gør jeg så nu sådan, at jeg kun får vist de "gyldige" annoncer, så den hvor datoen er overskredet ikke bliver vist?

Er det noget du kan hjælpe mig med?
Avatar billede mahler Nybegynder
18. maj 2003 - 22:47 #16
Jeg kunne ikke lige se datoerne på siden?

Du skal sikkert bare tilføje
" and varighed < now()" til din SQL-sætning, der laver udtrækket.
Avatar billede tlunde Nybegynder
18. maj 2003 - 22:55 #17
http://www.thomaslunde.dk/peter/index.php

Prøv lige igen...de er lige nu kun under "se annoncer"
Avatar billede mahler Nybegynder
18. maj 2003 - 23:01 #18
ser dem nu...

Prøvede du at tilføje sql-stumpen?

(husk at den også skal tilføjes på siden "se annoncer" siden, som et kriterier, når du tæller hvor mange annoncer, der er).
Avatar billede tlunde Nybegynder
18. maj 2003 - 23:04 #19
Min query på "se annoncer" ser sådan ud nu:
$query = mysql_query("SELECT * FROM kobsalgbytte WHERE kategori='$_GET[kat]' AND dato < now() ORDER BY varighed ASC");

Og jeg har prøvet at rette den med thorkild kristensen i db'en, så varighed i db'en skulle være igår, men den viser den stadigvæk...
Avatar billede tlunde Nybegynder
18. maj 2003 - 23:07 #20
Bu virker det.

Jeg rettede dato < now() til varighed > now()

Hvordan siger du så at jeg skal gøre det, for at den også kun tæller de "gyldige" annoncer i "annoncer pt." som er på forsiden??

Der ser min query pt. sådan her ud:
SELECT * FROM kobsalgbytte ORDER BY id DESC LIMIT 1
Avatar billede tlunde Nybegynder
18. maj 2003 - 23:08 #21
Bu = NU :)
Avatar billede tlunde Nybegynder
18. maj 2003 - 23:14 #22
Jeg har leget lidt med det antal der skal være på indexsiden, og der har jeg prøvet noget ala:

  <?
db_con();
//Henter hvor mange annoncer der er i databasen
$query = mysql_query("SELECT * FROM kobsalgbytte WHERE varighed > now()" ) or die (mysql_error());
$row = mysql_fetch_array($query);
echo "Der er pt. $row[varighed] annoncer i databasen";
?>

Men jeg skal have den til at tælle hvor mange poster der er "gyldige" i stedet for bare at printe postens indhold ud. Hvordan gør jeg det??
Avatar billede tlunde Nybegynder
18. maj 2003 - 23:24 #23
Jeg har også prøvet med denne sql query:
<? print "".mysql_num_rows(mysql_query("SELECT * FROM kobsalgbytte WHERE varighed > now()")).""; ?>

Men den kommer med denne fejl:
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource
Avatar billede mahler Nybegynder
19. maj 2003 - 07:29 #24
$query = mysql_query("select count(*) as antal from kobsalgbytte where varighed < now()");
$row = mysql_fetch_array($query);
echo "Der er pt. $row[antal] annoncer i databasen";
Avatar billede tlunde Nybegynder
19. maj 2003 - 08:46 #25
Takker, det virkede...

Jeg har lige en sidste ting du gerne må hjælpe mig med. Det er under "Se annoncer", hvor der står hvor mange "gyldige" annoncer der er under hver kategori, og der har jeg prøvet at lavet noget ala dette, men det vil heller ikke lige virke:

<?
db_con();
$query = mysql_query("select count(*) as antal from kobsalgbytte WHERE kategori='$_GET[kat]' AND varighed > now()");
$row = mysql_fetch_array($query);
echo "$row[antal]";
?>

Dette er det sidste jeg skal have hjælp til...håber du lige har tid?
Avatar billede tlunde Nybegynder
19. maj 2003 - 08:49 #26
Ikke noget alligevel...jeg skal bare den specifikke kategori ind i SELECT, og så virkede det. Tak for al din hjælp, og her er dine points!
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