[php/mysql]search results opdelen over verschillende pages

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • megamuch
  • Registratie: Februari 2001
  • Laatst online: 08-12-2024

megamuch

Tring Tring!

Topicstarter
rotte titel maar het past net niet

Probleem: Het opdelen van een zoekresultaat over verschillende pagina's.

Ik heb hier een database met zo'n 300 discotheken waarop gezocht kan worden. Dat kan op 2 manieren. Via een full text search en via een selectbox met bepaalde criteria.

Werkt allemaal (redelijk) goed.

Nu het vervelende. Het kan zijn dat ik 250 results terug krijg. Dat wil ik netjes opdelen over verschillende pagina's.

De vraag is even.. hoe ga ik dat flikken. Ik kan de queries limiten op 25 en dan elke keer door lopen, maar dan weet ik nooit hoeveel results ik in totaal heb. En als ik dat niet weet kan ik ook niet het aantal pagina's bepalen. Tenzij iemand mij kan uitleggen hoe ik met "limit $start, $end" toch de totale count van de query kan ophalen.

Ik zou natuurlijk 2x de query uit kunnen voeren, maar dat lijkt me nogal inefficient. eerst de hele resultset ophalen en dan nog een keer met een limit. (of met een dataseek). Dus dat is niet echt een oplossing.

Ik hoop dat het ietwat duidelijk is.

edit:

de search wilde mij geen oplossing geven, en hotscripts en codewalkers bieden oplossingen voor complete searchengines voor mijn site. Iets wat ik niet wil.

[ Voor 10% gewijzigd door megamuch op 08-01-2004 15:29 ]

Verstand van Voip? Ik heb een leuke baan voor je!


Acties:
  • 0 Henk 'm!

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 18:44

gorgi_19

Kruimeltjes zijn weer op :9

De techniek die je zoekt heet paging.

Kijk eens hier :)

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Acties:
  • 0 Henk 'm!

  • Thijsmans
  • Registratie: Juli 2001
  • Laatst online: 21:35

Thijsmans

⭐⭐⭐⭐⭐ (5/5)

Zolang je query hetzelfde blijft, blijft het result - mits niet intussen iets ingevoerd - hetzelfde. Vervolgens vraag je met mysql_num_rows($result) het aantal rows op, en vervolgens deel die je die door het aantal resultaten dat je per pagina wilt hebben :) Daarna kun je idd met de limit werken.

Privacy-adepten vinden op AVGtekst.nl de Nederlandse AVG-tekst voorzien van uitspraken en besluiten.


Acties:
  • 0 Henk 'm!

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06 13:31

drm

f0pc0dert

Nee, je vraagt niet met mysql_num_rows() het totaal aantal resultaten op, dat doe je met een COUNT(). Anders ben je inderdaad erg inefficient bezig.

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Acties:
  • 0 Henk 'm!

  • ripexx
  • Registratie: Juli 2002
  • Laatst online: 17:49

ripexx

bibs

Zoals drm hierboven zegt. ik doe een count op een index en bepaal het aantal resultaten. Daarna doe ik een volledige query met beperkte resultset dmv LIMIT x,y Het aantal resultaten per pagina bepalen het aantal pagina's. Voor een forum is dit bijvoorbeeld user specifiek, terwijl mijn zoek resultaten in de config staan vast gesteld op 25.

buit is binnen sukkel


Acties:
  • 0 Henk 'm!

  • megamuch
  • Registratie: Februari 2001
  • Laatst online: 08-12-2024

megamuch

Tring Tring!

Topicstarter
ok als ik het goed begrijp zal ik dus toch 2 queries uit moeten voeren.. eerst de query in de vorm van een count om het totaal aantal results te weten te komen en vervolgens de query met de limit erachter geplakt.

Lees ik dit zo goed?

Verstand van Voip? Ik heb een leuke baan voor je!


Acties:
  • 0 Henk 'm!

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06 13:31

drm

f0pc0dert

megamuch:
ok als ik het goed begrijp zal ik dus toch 2 queries uit moeten voeren.. eerst de query in de vorm van een count om het totaal aantal results te weten te komen en vervolgens de query met de limit erachter geplakt.

Lees ik dit zo goed?
Er is imho geen betere manier.

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Acties:
  • 0 Henk 'm!

  • FlowinG
  • Registratie: Maart 2003
  • Laatst online: 19-09 17:00
megamuch schreef op 08 januari 2004 @ 16:42:
ok als ik het goed begrijp zal ik dus toch 2 queries uit moeten voeren.. eerst de query in de vorm van een count om het totaal aantal results te weten te komen en vervolgens de query met de limit erachter geplakt.

Lees ik dit zo goed?
Ja :) je moet gewoon een de zoekquery uitvoeren. Daarna kan je een count doen. Ik gebruik zelf een klein stukje voor een snel resultaat:
(dit is een stukje uit mijn mysql-klasse waarbij maak_query() gewoon de query uitvoert met mysql_query() en het resultaat in de variabele, $resultaat zet)
PHP:
1
2
$this->maak_query("SELECT COUNT(*) FROM `$table` $extra",false);
$this->rijen = mysql_result($this->resultaat,0,0);

Acties:
  • 0 Henk 'm!

  • marty
  • Registratie: Augustus 2002
  • Laatst online: 27-03-2023
In nieuwere mysql versies kan het tegenwoordig ook met 1 query. Je doet dan wel een LIMIT, maar je kan evengoed het aantal resultaten opvragen wat het was geweest zonder die LIMIT. Je zal de manual even moeten checken voor de versie vanaf wanneer het kan.

Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 21-09 14:28
Is het verboden om te limiten op een veld, iets als:
pageid moet je dus met PHP invoegen, 20 records per pagina.
code:
1
2
3
4
5
6
SELECT 
    COUNT(*) AS totaal, 
    pageid*20 AS start, 
    startid+20 AS end 
FROM tabel 
LIMIT start, end

[ Voor 5% gewijzigd door djluc op 08-01-2004 19:04 ]


Acties:
  • 0 Henk 'm!

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06 13:31

drm

f0pc0dert

Natuurlijk kan dat niet.
code:
1
2
3
4
5
6
7
SELECT
   aap,
   noot
FROM
   mies
LIMIT
   aap, noot;
Welk veld moet MySQL dan hebben? Die van het eerste record? Die van het tweede?

[ Voor 3% gewijzigd door drm op 08-01-2004 19:30 . Reden: typo ]

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 21-09 14:28
DAt vroeg ik me dus af, maar het kan dus niet...
Pagina: 1