Avatar billede rasmus-madsen Nybegynder
31. maj 2004 - 14:08 Der er 37 kommentarer og
1 løsning

Fejl ved select

Hejza allesammen.
Jeg har to felt i min database (mysql) som hedder dato, klokken.
dato indeholder eks : 06-05-04
Klokken indeholder eks : 21:03:00

Det også fint nok. Det bliver så gemt i databasen unden og fejl.
Når jeg så selecter fra databsen kommer fejlen. Se billedet her under:
www.rasmus-madsen.dk/fejl.jpg .
Kan i se hvad der er galt, den selcter på en forkert måde. Den nyeste nyhed skal være til venstre.
Koden er:
$res2 = mysql_query("SELECT * FROM news order by dato asc, klokken asc");

Kan nogen hjælpe mig?
Avatar billede dennismp Nybegynder
31. maj 2004 - 14:12 #1
Når du indsætter, prøv at bruge datoformatet:
YYYY-MM-DD HH:MM:SS
fx.
2004-05-16 02:41:58
Avatar billede rasmus-madsen Nybegynder
31. maj 2004 - 14:13 #2
ok prøver lig
Avatar billede rasmus-madsen Nybegynder
31. maj 2004 - 14:16 #3
Dato : 2004200420042004-MayMay-ThuThu
Klokken :1414:MayMay:thth


Virker ikke helt :D
Avatar billede dennismp Nybegynder
31. maj 2004 - 14:16 #4
Hvordan ser den kode ud der viser datoen?
Avatar billede rasmus-madsen Nybegynder
31. maj 2004 - 14:18 #5
$Data[$i] = "<center>( " .$row['dato'] ."/" .$row['klokken'] ." )</center>";

Men der er jo fejl i den måde deR:
YYYY-MM-DD HH:MM:SS
Avatar billede dennismp Nybegynder
31. maj 2004 - 14:19 #6
hvad type har de to dato kolonner i mysql?
Avatar billede rasmus-madsen Nybegynder
31. maj 2004 - 14:19 #7
tekst .. og det skal ikke ændres
Avatar billede dennismp Nybegynder
31. maj 2004 - 14:20 #8
Ah...

Når du indsætter en dato i databasen, hvordan gør du så? Hvordan ser sql'en ud?
Avatar billede rasmus-madsen Nybegynder
31. maj 2004 - 14:22 #9
$res3 = mysql_query("INSERT INTO news (tekst, over, galid, klokken, dato, billede, bil_align, fil) VALUES ('$text','$over','$galid','$klokken','$dato','$bil','$bila','$fil')");
echo mysql_error();
Avatar billede dennismp Nybegynder
31. maj 2004 - 14:24 #10
tekst? Brug dog datetime - så vil din sortering også virker efter hensigten. Hvorfor vil du kun bruge tekst?
Avatar billede rasmus-madsen Nybegynder
31. maj 2004 - 14:24 #11
fordi det vil tage lang tid at ændre !
Avatar billede dennismp Nybegynder
31. maj 2004 - 14:25 #12
.. og hvordan ser så $klokken og $dato ud? Nøjagtigt som du skrev i spørgsmålet? I så faldt fatter jeg ikke hvorfor der er blevet ændret på det. Da du ikke (i det viste) kode ændrer på formatet.
Avatar billede rasmus-madsen Nybegynder
31. maj 2004 - 14:26 #13
what ? fatter jeg hat af. det du siger der
Avatar billede dennismp Nybegynder
31. maj 2004 - 14:29 #14
Jeg vil gerne se SQL'en, ikke koden der genererer SQL'en da jeg ikke aner hvad $text,$over$,$klokken,$dato .. osv indholder..
Avatar billede rasmus-madsen Nybegynder
31. maj 2004 - 14:34 #15
er ikke helt med på hvad for en du mener:
$res2 = mysql_query("SELECT * FROM news order by dato desc, klokken desc");
denne ?
Avatar billede rasmus-madsen Nybegynder
31. maj 2004 - 14:38 #16
Den går galt i byen når der kommer en anden dato op.. 06-05-04 er de andre. .. Når så 08-02-04 bliver oprettet kommer den som den nyeste nyhed :(
Avatar billede dennismp Nybegynder
31. maj 2004 - 14:47 #17
06 kommer før 08. Det er en konsekvens af at du bruger et tekstfelt, så mysql ved ikke bedre end at sorterer det som tekst, uden hensyntagen til måned ellers årstal.

Langt den bedste løsning er at lave det om et til et datofelt og lade mysql klare resten. Jeg forstår ikke hvorfor du mener det er et stort arbejde - men jeg ved ikke hvordan du kan få den til at sortere på den måde du ønsker det, uden at lave det om til en ægte dato. Udover self. at bruge substr() eller lign. til at opdele datoen i dag/mdr/år så du får to kolonner, som du kan bruge på din order-by. Men det bliver noget hø.

Jeg kan desværre ikke hjælpe dig.
Avatar billede rasmus-madsen Nybegynder
31. maj 2004 - 15:48 #18
ok.. prøver... hvordan opretter man et dato felt ?
Avatar billede dennismp Nybegynder
31. maj 2004 - 15:51 #19
ALTER TABLE news ADD dato datetime not null;

eller

CREATE TABLE news2 (
..
dato datetime not null,
..
)

eller noget i den dur..
Avatar billede rasmus-madsen Nybegynder
31. maj 2004 - 16:57 #20
se nu har jeg gjordt det til date time begge to... bruger denne kode :
$klokken = date("H:i:s");
$dato = date("d-m-Y");

Men den giver:
2006-05-06 04:00:00/0000-00-00 00:00:00

Ved det hvorfor det?
Avatar billede dennismp Nybegynder
31. maj 2004 - 17:10 #21
et DATETIME felt kan indeholde både tidspunkt og dato. Der findes også en DATE-type og en TIME type, hvis du gerne vil holde de to ting adskildt

date("etformat") giver dig dagsdato.. Hvis du ønsker at bruge date().. så skal du gøre noget i stil med.

SELECT unix_timestamp(dato) FROM ...

..

print date('H:i:s',$row[0]);
Avatar billede rasmus-madsen Nybegynder
31. maj 2004 - 19:18 #22
Hejza igen. Jeg må IKKE smelte dem sammen i et felt ! .. Hvad skal jeg så lave felterne om til ?Time, men hvordan ?=


//MAdsen
Avatar billede dennismp Nybegynder
31. maj 2004 - 19:35 #23
På samme måde som du lavede dem om til datetime.. btw; tag lige en backup hvis du ikke har..
Avatar billede rasmus-madsen Nybegynder
01. juni 2004 - 01:55 #24
jeg har følengde felter:
dato date not null,
klokken time not null,

Det kommer så data i dem. Har tjecket disse data, ved at udskrive dem, og er 100 % sikker på de kommer rigtigt ind i databaseb. Men når dataen skal ud, går det galt...

:
2007-05-04/01:41:32 Men der skulle rigtigt stå 2004-05-07/01:41:32 !
Ved du hvorfor ?

Der bliver bare brugt denne:

( " .$row['dato'] ."/" .$row['klokken'] ." )


Sætter pointsne op til 100 !
Avatar billede dennismp Nybegynder
01. juni 2004 - 01:58 #25
Det virker udmiddelbart som om at den tror at dag = år, og år = dag. Hvordan konverterede du?
Avatar billede dennismp Nybegynder
01. juni 2004 - 02:22 #26
Hvis du har en backup så prøv følgende SQL (een gang):

UPDATE news SET dato=concat( ( 2000 + dayofmonth( dato )  ) ,'-', month( dato ) , '-',year( dato ) - 2000 );
Avatar billede rasmus-madsen Nybegynder
01. juni 2004 - 11:59 #27
desværre det samme:
2007-05-04/11:59:51
Avatar billede rasmus-madsen Nybegynder
01. juni 2004 - 12:02 #28
7-05-04 sådan lægger jeg det ind :(
Avatar billede dennismp Nybegynder
01. juni 2004 - 12:41 #29
Hmm underligt.. Hvis jeg indsætter følgende dato i mysql
2007-05-04
og kører update så får jeg
2004-05-07
ud.

Der sker ingenting hvis du laver den update?
Avatar billede rasmus-madsen Nybegynder
01. juni 2004 - 20:42 #30
hmm mærkeligt.. hvad med feltet ? det heder time og date i stedet for datetime ! Er det forkert?
Avatar billede dennismp Nybegynder
01. juni 2004 - 20:59 #31
Jeg har oprettet en tabel med en dato af type date. (gad ikke at lave klokken, da den ser fin ud).

Det er ikke forkert, hvis du ønsker at holde de to ting adskildt.
Avatar billede rasmus-madsen Nybegynder
03. juni 2004 - 01:25 #32
nu jeg kommet lidt længere.. Bruger jeg din kode efter nyheden er opretten kommer den rigtige dato frem. ! Næsten. MYSQL for den til at skrive datoen som 2004-05-04 hvor den skulle være 04-05-04.. Kan du hjælpe med det? Den bliver sat ind rigtigt !
Avatar billede dennismp Nybegynder
03. juni 2004 - 01:30 #33
Når du selecter så kan du skrive

SELECT DATE_FORMAT(dato,'%d-%m-%y') as dato FROM news ..

Så skulle den gerne komme ud som du ønsker.

Se evt her: http://dev.mysql.com/doc/mysql/en/Date_and_time_functions.html

hvis du vil se hvad DATE_FORMAT ellers kan.
Avatar billede rasmus-madsen Nybegynder
06. juni 2004 - 12:58 #34
det virker ikke... for en masse fejl :(
Avatar billede dennismp Nybegynder
06. juni 2004 - 13:04 #35
I'm the fejl-terminator.. Giv mig "en masse fejl" :-)
Avatar billede rasmus-madsen Nybegynder
24. juni 2004 - 13:22 #36
syntes lig du skal have pointsne..

Så svar lig
Avatar billede dennismp Nybegynder
24. juni 2004 - 13:26 #37
Sure.. Men blev dit problem løst?
Avatar billede rasmus-madsen Nybegynder
24. juni 2004 - 13:40 #38
jepper. ..
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