Toon posts:

[PHP & SQL] ORDER BY datum probleem

Pagina: 1
Acties:
  • 38 views sinds 30-01-2008

Verwijderd

Topicstarter
Hee mensen,

Ik ben nu al een tijdje aan het kl*ten met mijn script, maar ik kom er echt niet uit.
Ik heb een script waarmee ik nieuwsitems toevoeg aan een database. Hierbij wordt ook een datum en een tijd toegevoegd. En op die twee items wordt het nieuws later gesorteerd bij het uitlezen.
Ik kwam er al achter dat de datum en tijd in een VARCHAR wegschrijven problemen opleverd, dus heb ik de twee kollomen veranderd naar DATE en TIME. Met de volgende query haal ik het nieuws op.
code:
1
2
3
4
5
6
<?   
$teller = 0; 
$query = mysql_query("SELECT DATE_FORMAT(nieuws_datum, '%d-%m-%Y') AS nieuws_datum, nieuws_onderwerp, nieuws_titel, nieuws_tijd, nieuws_id, nieuws_bericht FROM admin_nieuws ORDER BY nieuws_datum ASC, nieuws_tijd ASC LIMIT 5");    
while($row = mysql_fetch_assoc($query))   
{       
?>

Echter wordt het nieuws als volgt gesorteerd
02-01-06 | 16:49:27
03-01-06 | 09:19:07
31-12-05 | 12:28:45

en het moet zijn:

03-01-06 | 09:19:07
02-01-06 | 16:49:27
31-12-05 | 12:28:45

Kan iemand me vertellen wat ik fout doe.

[ Voor 3% gewijzigd door Verwijderd op 04-01-2006 01:41 ]


  • iH8
  • Registratie: December 2001
  • Laatst online: 17-06-2024

iH8

als je gebruikt maakt van een tijd/datum-kolom in sql dan hoef je niet zo moeilijk te doen? dan kun je gewoon gebruik maken van sort by.

[ Voor 8% gewijzigd door iH8 op 04-01-2006 01:49 ]

Aunt bunny is coming to get me!


  • mcB
  • Registratie: Mei 2002
  • Laatst online: 31-03 00:11

mcB

En als je dan toch deze constructie wilt gebruiken moet je de variabele 'nieuws_datum' een andere naam geven. Bij het sorteren refereer je namelijk gewoon naar de standaard kolomwaarden en niet naar de gedateformatte waarden

Strix (Skullflame)


Verwijderd

Topicstarter
SORT BY date werkt niet. dan krijg ik een error.
wanneer ik blabla AS nieuws_datum weghaal werk het ook niet

Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in /home/aquanl/public_html/home.php on line 27

en regel 27 is de regel na de query. dus wat ik hier net boven gepost had.

[ Voor 13% gewijzigd door Verwijderd op 04-01-2006 01:55 ]


  • FragFrog
  • Registratie: September 2001
  • Laatst online: 23:10
Probeer dit eens:
PHP:
1
2
3
4
5
6
7
8
9
10
11
<?   
$teller = 0; 
$query = mysql_query(" 
    SELECT UNIX_TIMESTAMP(nieuws_datum) AS nieuws_timestamp, *
    FROM admin_nieuws 
    ORDER BY nieuws_timestamp ASC
    LIMIT 5");    

while( $row = mysql_fetch_assoc($query) ) { 

?>
En ruim voortaan zelf even je code op voor je't post ;)

Mocht dit nog niet werken gebruik dan een DATETIME kolom voor nieuws_datum waarin je in 1 keer zowel datum als tijd verwerkt, daar is't kreng tenslotte voor bedoelt. Hierop sorteren gaat bij mij altijd gewoon goed :+

[ Voor 39% gewijzigd door FragFrog op 04-01-2006 02:02 ]

[ Site ] [ twitch ] [ jijbuis ]


Verwijderd

Topicstarter
FragFrog schreef op woensdag 04 januari 2006 @ 02:00:
Probeer dit eens:
PHP:
1
2
3
4
5
6
7
8
9
10
11
<?   
$teller = 0; 
$query = mysql_query(" 
    SELECT UNIX_TIMESTAMP(nieuws_datum) AS nieuws_timestamp, *
    FROM admin_nieuws 
    ORDER BY nieuws_timestamp ASC
    LIMIT 5");    

while( $row = mysql_fetch_assoc($query) ) { 

?>
En ruim voortaan zelf even je code op voor je't post ;)

Mocht dit nog niet werken gebruik dan een DATETIME kolom voor nieuws_datum waarin je in 1 keer zowel datum als tijd verwerkt, daar is't kreng tenslotte voor bedoelt. Hierop sorteren gaat bij mij altijd gewoon goed :+
Wanneer ik dit gebruik wordt datum en tijd alsvolgt weergegeven

1136070000 om

Dus datum wordt een reeks codes, en tijd wordt niet weergegeven

  • FragFrog
  • Registratie: September 2001
  • Laatst online: 23:10
Verwijderd schreef op woensdag 04 januari 2006 @ 02:05:
[...]


Wanneer ik dit gebruik wordt datum en tijd alsvolgt weergegeven

1136070000 om

Dus datum wordt een reeks codes, en tijd wordt niet weergegeven
Nee druif, da's geen reeks codes, da's een unix timestamp :+

Vervolgens kun je daar met de date functie weer eenvoudig een herkenbare datumrepresentatie van maken :)

Oftewel:
PHP:
1
$datum = date("d, m, y", $row["nieuws_timestamp"])

Het is dubbelop, ja, maar het zorgt er wel voor dat je eenvoudig ZELF je datumformat kan veranderen - mysql slaat'm namelijk standaart op in de vorm maand-dag-jaar wat je denk ik sowieso niet wilt hebben (getuige ook je gebruik van DATE_FORMAT).

Blijf er trouwens bij dat je't beste DATETIME kan gebruiken ipv losse DATE en TIME tabellen, maar da's misschien persoonlijk :)

[ Voor 22% gewijzigd door FragFrog op 04-01-2006 02:20 ]

[ Site ] [ twitch ] [ jijbuis ]


Verwijderd

Topicstarter
Wokee ik heb nu de kolom nieuws_tijd weggehaald en alleen nog nieuws_datum en deze is DATETIME. de query is nu als volgt.

PHP:
1
2
3
4
5
6
7
8
9
10
<?   
$teller = 0; 
$query = mysql_query("
SELECT DATE_FORMAT(nieuws_datum, '%d-%m-%Y om %H:%i:%s') AS nieuws_datum, * 
FROM admin_nieuws 
ORDER BY nieuws_datum ASC LIMIT 5");

while($row = mysql_fetch_assoc($query))   
{       
?>


Maar ik heb nog steeds hetzelfde probleem.
02-01-06 | 16:49:27
03-01-06 | 09:19:07
31-12-05 | 12:28:45

en het moet zijn:

03-01-06 | 09:19:07
02-01-06 | 16:49:27
31-12-05 | 12:28:45

  • FragFrog
  • Registratie: September 2001
  • Laatst online: 23:10
Lees m'n vorige post: het gaat juist mis wanneer je DATE_FORMAT gebruikt om de tijd te formatten. Zodra je dat doet verandert het namelijk in een string-representatie van de datum waar MySQL zich kennelijk in verslikt. Standaart zou'ie het goed moeten doen als je 'm niet format en hij doet het in ieder geval goed wanneer je'm omzet naar een INT - wat UNIX_TIMESTAMP doet.

Als je toch per se DATE_FORMAT wilt gebruiken kun je dit proberen:
PHP:
1
2
3
SELECT DATE_FORMAT(nieuws_datum, '%d-%m-%Y om %H:%i:%s') AS nieuws_representatie, *  
FROM admin_nieuws  
ORDER BY nieuws_datum ASC LIMIT 5

En dan nieuws_representatie gebruiken voor de weergave.

[ Voor 14% gewijzigd door FragFrog op 04-01-2006 02:25 ]

[ Site ] [ twitch ] [ jijbuis ]


  • disjfa
  • Registratie: April 2001
  • Laatst online: 08-01 11:17

disjfa

be

Hoe ziet je tabel eruit. Is je nieuws_datum een date veld of niet. Zo ja dan moet je de naam zoals je deze uit de database haalt (AS `nieuws_datum`) aanpassen zodat mysql het gewoon kan ordenen.

Zoals je het er nu uit haalt sorteert hij nogallogisch op 01-etc, 02-etc eruit aangezien dat de alfabetisch correcte manier is. En niet de datum manier van sorteren :P

disjfa - disj·fa (meneer)
disjfa.nl


Verwijderd

Topicstarter
wokee, ik was weer te snel.

<?
$datum = date("d-m-y H:i:s", $row["nieuws_timestamp"])
?>


werkte idd in combinatie met timestamp.
Echter lijkt ASC en DESC nu andersom te werken, maar het werkt nu uiteindelijk wel.

  • FragFrog
  • Registratie: September 2001
  • Laatst online: 23:10
Latere datum is nu een groter getal, dus dat zou wel kunnen kloppen ja :) In ieder geval mooi dat't zo opgelost is :+

* FragFrog bedenkt zich net dat mcB zijn laatste antwoord ookal gaf, zit er weer eens vrolijk overheen te lezen 8)7

[ Voor 34% gewijzigd door FragFrog op 04-01-2006 02:30 ]

[ Site ] [ twitch ] [ jijbuis ]


Verwijderd

Topicstarter
Mijn dank is groot :D
en dat op het late/vroege uur

hier is het in werking het ging om de eerste 'home' pagina
spam

[ Voor 58% gewijzigd door whoami op 04-01-2006 08:34 ]


  • whoami
  • Registratie: December 2000
  • Laatst online: 20-04 18:20
Het is wel opgelost, maar dit is gewoon een 'bij het handje neem topic'.
Met een beetje in de docs te lezen was je er zelf ook wel opgekomen.

https://fgheysels.github.io/

Pagina: 1

Dit topic is gesloten.