Avatar billede n-emy Nybegynder
21. november 2005 - 19:19 Der er 18 kommentarer og
1 løsning

Et script der henter de kommende datoer?

Hey,

Jeg har en tabel med spil i, disse spil har forskellige udgivelses datoer således:

Dato, Måned år(f.eks: 11 Januar 2005).

Men jeg vil gerne have et script der henter de 5 spil der er tættest på deres udgivelsesdato, altså så den f.eks. lister på følgene måde:

Hej1 - 24 November 2005
Hej2 - 25 November 2005
Hej3 - 26 November 2005
Hej4 - 29 November 2005
Hej5 - 1 December 2005

Jeg er helt på bar bund:/ en der kan hjælpe?:)
Avatar billede jakobdo Ekspert
21. november 2005 - 19:37 #1
SELECT spilnavn FROM spil WHERE dato > NOW() ORDER BY dato ASC LIMIT 5
Avatar billede n-emy Nybegynder
21. november 2005 - 19:46 #2
det vil da ikke fungere vil det?

Datoen er jo kun et tocifret tal?
Avatar billede jakobdo Ekspert
21. november 2005 - 19:48 #3
I hvilket format gemmer du dato i din tabel?
Avatar billede n-emy Nybegynder
21. november 2005 - 19:51 #4
int(255) de bliver gemt i 3 felter:

dato - int(255)
måned - varchar(255)
year - int(255)
Avatar billede jakobdo Ekspert
21. november 2005 - 19:56 #5
Og hvorfor fanden gør du så det om jeg må spørge? :o)
Datatypen: date er jo til det samme!
Avatar billede fixxxer Nybegynder
21. november 2005 - 20:00 #6
Som jakobdo skriver vil det være utroligt mange gange nemmere hvis du gemmer dato oplysninger i et felt af typen date, der har formatet YYYY-MM-DD

Hvis du er i tvivl om hvordan du skal håndtere denne type felt, må du spørge ind til det.
Avatar billede jakobdo Ekspert
21. november 2005 - 20:02 #7
Hvis du ikke vil ændre til date, kunne noget i denne stil måske gøre det:

SELECT
    spilnavn
FROM
    spil
WHERE
    DAYOFMONTH(NOW()) >= dato
AND
    MONTH(NOW()) >= måned
AND
    YEAR(NOW()) >= year
ORDER BY
    year ASC, måned ASC, year ASC
LIMIT 5
Avatar billede n-emy Nybegynder
21. november 2005 - 20:12 #8
Kan jeg få lidt mere info omkring at gemme det i YYYY MM  DD hvis jeg gør det skriver den vel ikke 11 November 2005 så skriver den vel 2005-11-11 ikk?
Avatar billede jakobdo Ekspert
21. november 2005 - 20:19 #9
Jo, men du kan så trække datoen ud fra SQL med: UNIX_TIMESTAMP(dato) AS unix
Og så i php lave:
setlocale(LC_TIME, "da_DK");
strftime("%e %B %Y",$row["unix"]);
Avatar billede n-emy Nybegynder
21. november 2005 - 20:44 #10
kk, altså tror det går bedre for mig det andet, især fordi der vel ikke er nogen måde at ændre alle de indtastninger jeg har lavet so far om vel?

Men jeg har denne kode der tager det rigtigt ud nu:
$s_sidst = mysql_query("SELECT * FROM spilarkiv WHERE eu_release_dato > '$dato' AND eu_release_mon = '$mon' AND eu_release_year >= '$year' ORDER BY eu_release_dato DESC LIMIT 5");

Det eneste problem er bare at når det så bliver den 29, 30 kan den ikke tage nogle spil for så er der ikke mange datoer der er over 29 og 30 for næste måned starter jo fra den første, hvordan gør man det?
Avatar billede jakobdo Ekspert
21. november 2005 - 20:54 #11
Det problem ville du kunne undgå hvis du brugte date! :o)
Problemet er at du skal lave en hel funktion til at regne det ud!
For 1 er jo ikke større end 30, men det er det så måske, hvis 1-12 og 30-11 og igen hvis år er korrekt.!
Avatar billede n-emy Nybegynder
21. november 2005 - 21:37 #12
Og det er ikke muligt uden date?

Har nemlig 297 indtastet spil hvor det er skrevet som ovennævnt:/
Avatar billede fixxxer Nybegynder
21. november 2005 - 21:52 #13
Du er i gang med at opfinde en meget dyb talerken, da du valgte at bruge den "nemme måde" da du startede på din side.

Som jakobdo også skriver så skal du skrive en anelang funktion til noget som allerede er bygget ind i dato funktionen.

Så som svar på dit sidste spørgsmål - nej det er ikke muligt uden brug af et felt med typen date, alt andet ville være mega overkill!


Men fortvivl ikke, man kan heldigvis konvertere din hjemmebyggede dato-formatering til YYYY-MM-DD formatet:


$query = mysql_query("SELECT * FRIM spilarkiv");
while ($fetch = mysql_fetch_assoc($query))
{
  $day = $fetch['dato'];
  $month = $fetch['måned'];
  $year = $fetch['year'];

  mysql_query("UPDATE spilarkiv SET datofelt = '".$year."-".$month."-".$day."' WHERE spilID = '".$fetch['spilID']."'");
}


Du skal bare lige på forhånd oprette feltet datofelt (eller måske endda et bedre navn?) af typen date i din tabel, og rette felterne i mit script oven over, så de passer til felterne i din tabel.
Avatar billede fixxxer Nybegynder
21. november 2005 - 22:30 #14
Jeg glemte en detalje i løsningen oven over.

Du skriver måned som tekstformat, derfor skal vi lave en konvertering fra tekstformat til talformat.

function mt2mn($month_as_text)
{
  var $months = array('Januar'=>1, 'Februar'=>2, 'Marts'=>3, 'April'=>4, 'Maj'=>5, 'Juni'=>6, 'Juli'=>7, 'August'=>8, 'September'=>9, 'Oktober'=>10, 'November'=>11, 'December'=>12);

  return $month[$month_as_text];
}

Men vi kan ikke tage højde for hvis du har skrevet "Oktoper" eller lign. stave/slå-fejl, uden at skulle skrive dem ind i array'et.


Nu kommer UPDATE-sætning fra før til at se sådan ud:
  mysql_query("UPDATE spilarkiv SET datofelt = '".$year."-".mt2mn($month)."-".$day."' WHERE spilID = '".$fetch['spilID']."'");
Avatar billede n-emy Nybegynder
21. november 2005 - 22:46 #15
Okay:)

Så skal jeg bare vide en sidste ting.

Når jeg indsætter en dato til et spil har jeg ikke altid hele datoen, nogen gange har jeg kun måned og år, og andre gange kun år.

Hvordan sætter jeg det ind?
Avatar billede fixxxer Nybegynder
21. november 2005 - 22:56 #16
Det forklarer jo hvorfor du valgte den første fremgangsmåde - det er også en ny vinkel som kunne have været god at få afklaret tidligere, for du kan så ikke benytte date-feltet ordenligt.

Umiddelbart er der ikke noget galt i at skrive en dato som '2005-00-00' eller '2006-08-00' men jeg ser for mig, at det vil give nogle problemer når du skal til at sortere på dem.
Avatar billede n-emy Nybegynder
21. november 2005 - 23:08 #17
Hmm kan du give mig en kode til hvordan man sætter ind i et date felt, for så kan jeg jo bare lave så det kun er hvis alle 3 er udfyldt den også sætter ind til date:)

Så er problemet løst:)
Avatar billede n-emy Nybegynder
21. november 2005 - 23:48 #18
Fik det til at virke selv:)

Tak for hjælpen:)

Svar?
Avatar billede fixxxer Nybegynder
22. november 2005 - 00:01 #19
Jeg tillader mig at svare..
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