login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Sticky topics bovenaan (Opgelost)

Offline Ultimatum - 03/07/2008 21:23
Avatar van UltimatumPHP expert Ik ben nu bezig met een forum en loop tegen volgend probleem aan. Ik heb nu deze query om topics te laten zien:
  1. SELECT topic_id, user_id, subject, status_id
  2. FROM forum_topics
  3. WHERE forum_id = ". $this->iId ."
  4. ORDER BY topic_id DESC


Ik heb nu de volgende statussen:
0 = gesloten
1 = open
2 = sticky
3 = sticky + gesloten

Maar als ik nu status_id DESC aan de query toevoeg dan staat de sticky topics bovenaan, daartussen de open topics en onderaan de gesloten. Maar dat wil ik niet echt . Ik wil graag dat alleen de sticky topics bovenaan staan en de open en gesloten topics gewoon op de normale plaats. Hoe kan ik dit het beste oplossen?

14 antwoorden

Gesponsorde links
Offline jerre - 03/07/2008 21:32
Avatar van jerre Nieuw lid gewoon 2 keer ophalen?
Een keer de bestanden uit je db halen die sticky staan (dus met id 2) en vervolgens in een 2e query de bestandne die niet sticky zijn?
Offline GTW - 03/07/2008 21:33 (laatste wijziging 03/07/2008 21:35)
Avatar van GTW Gouden medaille

PHP gevorderde
order by status ASC,topic_id ASC

edit, pardon, verkeerd gelezen

of je voegt een extra veld eraan toe met de naam gesloten ofzo
Offline timmie_loots - 03/07/2008 23:47
Avatar van timmie_loots PHP gevorderde Of je doet niet moeilijk en je maakt die nummering anders? Je verplaatst de huidige 2 en 3 één plaatsje omlaag, en de 1 doe je naar 3. Dat lijkt me simpel genoeg?
Offline Ultimatum - 03/07/2008 23:54 (laatste wijziging 03/07/2008 23:56)
Avatar van Ultimatum PHP expert @jerre, dat is een oplossing maar omdat het forum al genoeg queries bevat, wil ik het zo min mogelijk houden dus zoveel min mogelijk queries doen als mogelijk is.

@GTW, dat is toch hetzelfde als een cijfer in de status_id veld geven of niet?

@timmie_loots, nee, want zoals ik al zei dan word het dus zo:
sticky
open
open
gesloten

en ik wil graag dat het zo blijft
sticky
open
gesloten
open

Offline Gerard - 04/07/2008 00:17
Avatar van Gerard Ouwe rakker
Citaat:
@jerre, dat is een oplossing maar omdat het forum al genoeg queries bevat, wil ik het zo min mogelijk houden dus zoveel min mogelijk queries doen als mogelijk is.

Wil je de sticky topics altijd bovenaan hebben, ook al navigeer je naar pagina 2 van je topics-list? Zoja, dan moet je toch echt gaan voor 2 queries.

Ik denk dat je sowieso voor 2 queries moet gaan joh. Gewoon eerst de sticky ophalen op basis van dat id. Daarna de rest ophalen op basis van lastreaction (DATETIME) ofzo.
Offline Ultimatum - 04/07/2008 00:20
Avatar van Ultimatum PHP expert Nee, op pagina 2 hoeven de sticky niet bovenaan. Is er echt geen manier om het met maar 1 query te doen  
Offline Gerard - 04/07/2008 00:21
Avatar van Gerard Ouwe rakker Op het moment dat je op dat status gaat ordenen dan krijg je gewoon dat ze eerst op die basis worden geordened, daarna pas op het id/tijd. Het moet echt met 2 queries anders krijg je niet het resultaat wat jij wilt.
Offline Ultimatum - 04/07/2008 00:23
Avatar van Ultimatum PHP expert Jammer, mijn forum queries blijven maar stijgen dan . Zal morgen even proberen en laat dan wel even weten of het gelukt is . Bedankt in ieder geval.
Offline Gerard - 04/07/2008 00:56
Avatar van Gerard Ouwe rakker Hoeveel queries praten we dan over? Heb je tevens wat controlepunten ingebouwd? Gewoon een paar keer het volgende kan je daar wel mee helpen:
  1. <?php
  2. $parseTime[] = array('title' => 'Na inladen sticky', 'time' => microtime(true));


Of je maakt gebruik van een database class die dit al voor je doet, wat ik eigenlijk wel verwacht bij jou  
Offline Ultimatum - 04/07/2008 21:35 (laatste wijziging 05/07/2008 14:53)
Avatar van Ultimatum PHP expert Wat bedoel je met controle punten? Ik zit bij viewforum rond de 22 queries, dat is via mijn "handige" log functie .

Hoezo ga je er vanuit dat ik een database class gebruikt, omdat dat makkelijker is? 

Ik heb het nu zo aangepast:
  1. <?php
  2. private function createTopicList($iForumId) {
  3.  
  4. $i = 0;
  5. $aTopicList = array();
  6.  
  7. $sSticky = Database::query("SELECT forum_topics.topic_id, forum_topics.user_id, subject, status_id
  8. FROM forum_topics
  9. LEFT JOIN forum_replies
  10. ON (forum_topics.topic_id = forum_replies.topic_id)
  11. WHERE forum_id = ". $iForumId ."
  12. AND status_id IN (2, 3)
  13. ORDER BY forum_replies.date DESC, forum_topics.date DESC");
  14. if(Database::numRows($sSticky) >= 1) {
  15.  
  16. while($aSticky = Database::fetch($sSticky)) {
  17.  
  18. $aTopicList[$i++] = $aSticky;
  19.  
  20. }
  21. }
  22.  
  23. $sTopics = Database::query("SELECT forum_topics.topic_id, forum_topics.user_id, subject, status_id
  24. FROM forum_topics
  25. LEFT JOIN forum_replies
  26. ON (forum_topics.topic_id = forum_replies.topic_id)
  27. WHERE forum_id = ". $iForumId ."
  28. AND status_id IN (0, 1)
  29. ORDER BY forum_replies.date DESC, forum_topics.date DESC");
  30. if(Database::numRows($sTopics) >= 1) {
  31.  
  32. while($aTopics = Database::fetch($sTopics)) {
  33.  
  34. $aTopicList[$i++] = $aTopics;
  35.  
  36. }
  37. }
  38.  
  39. return $aTopicList;
  40. }
  41. ?>


Is er een betere manier of is er een effectievere manier?
Offline Flex1986 - 05/07/2008 18:42 (laatste wijziging 05/07/2008 18:42)
Avatar van Flex1986 Gouden medaille

Senior Member
Het zou denk ik wel met een mysql fulltext search kunnen. Het enigste probleem is dat die alleen met de data types. Char, VarChar, Text werken.

Hiermee zou je door de specifieke waardes hoger of lager te laten mee wegen. Het geheel kunnen sorteren op score + datum

Of dat sneller is als 2 queries dat durf ik je niet te zeggen.
Offline Ultimatum - 07/07/2008 16:12
Avatar van Ultimatum PHP expert Dat met die datatypes maakt niet uit, want dan maak ik het wel varchar(1). Maar zou je kunnen uitleggen hoe je dan precies die fulltext search doet?
Offline Ontani - 07/07/2008 16:15
Avatar van Ontani Gouden medailleGouden medailleGouden medailleGouden medaille

-1
het gemakkelijkste is gewoon een extra kolom toevoegen aan je topics tabel 'Sticky' die zet je default op 0 en voor een sticky op 1 en daar sorteer je gewoon als eerste op.
Offline Ultimatum - 07/07/2008 21:31 (laatste wijziging 07/07/2008 22:09)
Avatar van Ultimatum PHP expert Dat is inderdaad wel een goeie oplossing, zal even testen .
Bedankt Ontani, heb het via jouw manier opgelost .
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.188s