[PHP] Sorteren op laatste post

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • floriske.nl
  • Registratie: Januari 2002
  • Laatst online: 16-09 20:12

floriske.nl

Wie ik? Echt niet!

Topicstarter
Waarschijnlijk voor velen een simpele vraag, maar ik ben redelijk nieuw met php en kom er gewoon echt niet uit.

Ik heb voor de frontpage van een forum de volgende select:

"SELECT from mie_forum WHERE forum_reply<'1' ORDER BY forum_datum DESC";

nu is het probleem dat de order gebeurt op basis van het resultaat uit de selectie (en dus op de datum van het laatste nieuwe topic), maar ik wil de order laten gebeuren op de gehele kolom "forum_datum" zodat de post met de laatste reply bovenaan komt te staan.

[ Voor 11% gewijzigd door floriske.nl op 19-02-2005 22:32 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Ik begrijp het echt niet wat je nu wilt. SQL verwerkt alles met een welbepaalde volgorde. En een 'order by' is het laatste wat er gebeurt. Dus de order by wordt altijd op basis van het resultaat uit de selectie uitgevoerd en niet op de hele tabel. Trouwens, wat wil je bereiken met een order by op een hele tabel als je er toch maar een stukje uit selecteert? Zo onlogisch als maar zijn kan.

Post eens iets meer over je tabellen en geef eens een voorbeeld van wat je als resultaat wilt.

Heb je nergens een veld zoals laatste_reply_datum ofzo??

Acties:
  • 0 Henk 'm!

  • floriske.nl
  • Registratie: Januari 2002
  • Laatst online: 16-09 20:12

floriske.nl

Wie ik? Echt niet!

Topicstarter
nope, zoals gezegd ben een newbie mbt php, maar ik begrijp uit je opmerking dat wat ik wil niet mogenlijk is en dat ik dus een veld toe moet voegen per " topic" waarin een laatste reply datum vermeld moet staan, ik zal morgen eens kijken of ik dat uitgevogeld kan krijgen.

op zich wel logisch, maar ik had het vermoeden dat het ook eenvoudiger zou kunnen,..

edit:

heb zojuist bedacht hoe ik het voor elkaar ga krijgen :D

* floriske.nl heeft toch weer te hard geroepen dat hij het niet voor elkaar kreeg, maar bovenstaande post heeft mijn hoofd dusdanig doen spinnen dat ik er nu toch uit gekomen ben thx :*)

edit 2, en onderstaande erbij ;)

[ Voor 32% gewijzigd door floriske.nl op 20-02-2005 00:34 ]


Acties:
  • 0 Henk 'm!

  • cavey
  • Registratie: Augustus 2000
  • Laatst online: 29-05 01:29
heel makkelijk

SQL:
1
2
3
select reply_date from forum
inner join threads on forum.id =thread.forumid
order by reply_date


mooi in pseudo code......

maar aangezien m'n glazenbol beperkt is tot de summiere info die je geeft, zul je het hier mee moeten doen.

ps: dit heeft geen moer te maken met een newbie mbt php zijn, maar eerder een newbie met betrekking tot sql.

Ga wat sql tutorials napluizen over joins, want dat is klaarblijkelijk wat je nodig hebt....... en ga ook wat zoeken over eventueel je database te normaliseren.

Acties:
  • 0 Henk 'm!

Verwijderd

Het is zoals komakeef al zei. Dit heeft alles met joinen van tabellen te maken. Als je hier eens wat meer gegevens zou zetten over de tabel met topics en de tabel met replys dan staan we al wat verder

Acties:
  • 0 Henk 'm!

  • floriske.nl
  • Registratie: Januari 2002
  • Laatst online: 16-09 20:12

floriske.nl

Wie ik? Echt niet!

Topicstarter
Verwijderd schreef op zondag 20 februari 2005 @ 15:45:
Het is zoals komakeef al zei. Dit heeft alles met joinen van tabellen te maken. Als je hier eens wat meer gegevens zou zetten over de tabel met topics en de tabel met replys dan staan we al wat verder
reply's en topics staan in 1 tabel

maar heb het inmiddels opgelost
code:
1
2
3
4
5
//weegavedatum
$datum = date("d-m-Y G:i"); 

 //sorteerdatum annex laatste replydatum
$datum2 = date("Y-m-d G:i:s");


code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
$sql = "INSERT INTO mie_forum (forum_naam, forum_email, forum_onderwerp, forum_bericht, forum_homepage, forum_titel_page, forum_plaatje, forum_datum, forum_replyto)

        VALUES ('$forum_naam', '$forum_email', '$forum_onderwerp', '$forum_bericht', '$forum_homepage', '$forum_titel_page', '$forum_plaatje', '$datum', '$forum_replyto')";
        

        mysql_query($sql) or die("$sql");
        

if ($forum_replyto>0)

{
        
$sql = "UPDATE mie_forum SET reply_datum='$datum2' WHERE forum_id='$forum_replyto'";

         mysql_query($sql2) or die("$sql2");
         
}

else

{               

$sql = "UPDATE mie_forum SET reply_datum='$datum2' WHERE forum_onderwerp='$forum_onderwerp'";

         mysql_query($sql) or die("$sql");
         
}


en zo sorteer ik nu:

code:
1
2
3
4
5
$sql = "SELECT * FROM mie_forum WHERE forum_replyto<'1' ORDER BY 'reply_datum' DESC";

$result = mysql_query($sql) or die(mysql_error());

  while ($row = mysql_fetch_object($result))


de tabel heeft dus de volgende velden:

forum_naam <-naam van de poster
forum_email < -e-mail van de poster
forum_onderwerp <-onderwerp van de post
forum_bericht <-inhoud van de post
forum_homepage <-homepage van de poster
forum_titel_page < titel van die homepage
forum_plaatje <-toegevoegd plaatje als soort van handtekening/avatar
forum_datum <-datum dat de post geplaatst is
reply_datum <- datum waarop de laatste reply op de post geplaatst is (anders opgebouwd ivm sorteren jaar, maand, dag, tijd)
forum_id <- elk bericht krijgt oplopend een eigen id nummer
forum_replyto <- id waarvan het bericht een reply is, indien geen reply "0"


Heeft me even wat tijd gekost en het zal vast wel makkelijker kunnen, maar het werkt in ieder geval :D

[ Voor 100% gewijzigd door floriske.nl op 20-02-2005 20:16 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Nee dat is op zich nog een goed genormaliseerde database. Het hangt gewoon van je eisen, en wat je wilt bereiken, af hoe je moet normaliseren. Ik denk dat er goede redenen zijn aan te halen om het zo te doen.
Pagina: 1