login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Aantalste reactie

Offline Voldemort - 16/08/2006 22:40
Avatar van VoldemortPHP ver gevorderde Ik heb een forum zelf gescript en daarop een meld spam systeem. Een moderator kan zo spam zien die leden rapporteerden. Nu werk ik ook met pagina's. Dus wil ik dat men naar de juiste pagina wordt gevoerd. Hoe pak ik dit het beste aan? Ik dacht aan zoiets:

  1. <?php
  2. //Query die het id ophaalt
  3. $i = 0;
  4. $i2 = 0;
  5.  
  6. while($fetch = mysql_fetch_assoc($query_die_het_id_ophaalt))
  7. {
  8. $i++;
  9. if($fetch['reactie_id'] == $gezochte_id)
  10. $i2 = $i;
  11. }
  12. ?>


Zo heb ik in $i2 de hoeveelste reactie het is. Zo kan ik de pagina berekenen.

Maar is er geen andere manier, want als het de laatste reactie in een heel lang topic zal dit even duren. Dus is er een beter manier dan dit?

10 antwoorden

Gesponsorde links
Offline Stefan14 - 16/08/2006 22:54 (laatste wijziging 16/08/2006 22:56)
Avatar van Stefan14 PHP gevorderde ik denk dat ik het zou doen dmv een query die alle records selecteert met betrekking tot dat topic.

Aangezien je weet welke kant je op sorteert kan je dan dus berekenen op welke pagina de desbetreffende post staat aan de hand van de plaats in de opgehaalde records.

dus stel dat je 10 posts per pagina hebt, en je haalt alle posts op, dit zijn er bijv. 35, en de post die jij zoekt staat hierbij in het resultaat op plaats 12, dan kun je berekenen dat je op pagina 2 moet zijn.
Ik weet niet helemaal zeker of dit te doen zou zijn, maar ik denk het wel.
Offline ThAlmighty - 16/08/2006 23:02
Avatar van ThAlmighty HTML beginner
  1. SELECT MAX(reactie_id) AS max FROM reacties GROUP BY reactie_naar_topic


Dan krijg je dus van elk topic het aantal reacties. Met ceil(); kan je een getal naar boven afronden. Dus 4.1 => 5, dit lijkt mij genoeg informatie om iets moois mee te maken.

  1. ceil(Aantal reacties / aantal items per pagina); // Aantal pagina's

en verder...
Offline Rens - 16/08/2006 23:23 (laatste wijziging 16/08/2006 23:24)
Avatar van Rens Gouden medaille

Crew algemeen
ThAlmighty, max is voor het hoogste ID van reacties...
Count is voor het aantal reacties.

Dus als je het volgende in je tabel hebt:
Citaat:
reactie_id | iets anders | nog iets
1 | blaat | blaat
2 | blaat | blaat
3 | blaat | blaat
4 | blaat | blaat
6 | blaat | blaat
5 | blaat | blaat
7 | blaat | blaat
44 | blaat | blaat
8 | blaat | blaat

En je gebruikt MAX(reactie_id) zul je 44 krijgen.
Offline Voldemort - 17/08/2006 10:02
Avatar van Voldemort PHP ver gevorderde @Stefan14: Ik ga natuurlijk in die query erbij zetten WHERE topicid=, anders heeft het niet veel nut. Maar als ik moet berekenen dat het de 12e post de 2e pagina is, dan moet ik toch eerst weten dat het de 12e post is. Dus dan moet ik dat toch nog steeds met m'n eerste code ophalen?

@ThAlmighty: Als ik COUNT doe krijg ik het aantal. En het gemelde is niet perse de laatste reactie in een topic.
Offline Thomas - 17/08/2006 12:07 (laatste wijziging 17/08/2006 12:08)
Avatar van Thomas Moderator Als het goed is, is het id de key van je tabel, dus hier zit (automatisch) een index op. Als je in de query waarmee je de pagina bepaalt nu alleen id's ophaalt, en deze in aflopende volgorde ordent (van nieuw naar oud) - of andersom als je laatste reactie achteraan staat. Dit zou toch redelijk vlot moeten gaan?

Je hoeft dus niet het complete bericht op te halen om te bepalen op welke pagina deze staat.
Offline Voldemort - 17/08/2006 14:34 (laatste wijziging 17/08/2006 14:37)
Avatar van Voldemort PHP ver gevorderde @FangorN: Dat doe ik toch met dit (code van in de eerste reactie uitgewerkt)?

  1. <?php
  2. $i = 0;
  3. $i2 = 1;
  4.  
  5. $query3 = "SELECT `id`
  6. FROM `forum_reacties`
  7. WHERE `topicid`='".$fetch2['topicid']."'
  8. ORDER BY `id` ASC";
  9. $result3 = $db->query($query3);
  10.  
  11. while($fetch3 = $db->fetch($result3))
  12. {
  13. $i++;
  14.  
  15. if($fetch3['id'] == $fetch['soortid'])
  16. $i2 = $i;
  17. }
  18.  
  19. $delen = $i2 / 20;
  20. $page = ceil($delen);
  21. ?>


Dit werkt prima. Alleen is er geen handigere manier dan alle reacties op te halen?
Offline Thomas - 17/08/2006 16:12
Avatar van Thomas Moderator Hm, je zou van een reactie in een kolom kunnen bijhouden welke reactie (hoeveelste) dit is.

Maar als je een reactie ergens uit het rijtje verwijdert, zul je rest van de reactie-posities moeten updaten.

Tis het een of het ander...
Offline Voldemort - 17/08/2006 16:23
Avatar van Voldemort PHP ver gevorderde Dan blijf ik bij mijn code aangezien er toch geen betere variant op bestaat?
Offline Thomas - 17/08/2006 16:28
Avatar van Thomas Moderator Bij mijn weten niet - je moet toch op een of andere manier kunnen bepalen op welke pagina een reactie staat...
Offline bosgroen - 19/08/2006 13:01
Avatar van bosgroen Gouden medaille

PHP interesse
tip: doe het zoals ik (is zelfde probleem)
http://www.site...p;id=16451
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.203s