[PHP & MYSQL] Query uitvoeren op een Recordset

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Probleemomschrijving :

Ik ben bezig met een website waarop je een aantal opties kunt selecteren voor het zoeken naar huizen, vervolgens zorg ik ervoor dat er maar 5 resultaten per pagina worden weergegeven en dat je middels linkjes de overige resultaten kunt bekijken, een soort blader functie.

Je hebt ook de mogelijkheid om op een huis te klikken om hier meer informatie over te krijgen.

Nu wil ik het zo maken dat als je in het "meer informatie" scherm bent dat je op next kan klikken en dan naar het volgende record gaat van de recordset hierboven.

Nu kunnen er huizen verdwijnen dus is het ID niet doorlopend, en kan ik dus niet op een simpele manier naar het volgende record springen.


Mijn vraag :

Is het mogelijk om een query uit te voeren op een recordset ?
Dan zou ik gewoon het hoogste ID op kunnen vragen daar waar het ID kleiner is als het huidige ID en andersom.

Acties:
  • 0 Henk 'm!

Verwijderd

code:
1
2
3
select id as nextid from table where id > $huidigid asc limit 0,1

select id as previousid from table where id < $huidigid desc limit 0,1

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Dat gaat dus net niet, want die had ik ook al bedacht.
De query die ik genereer voor de resultaten is ontzettend groot met verschillende OR's en AND's deze kan ik niet telkens rebuilden.

Ik zie op het moment alleen een optie als een Query uitvoeren op een Recordset.
Maar zou niet weten of het mogelijk is.

iig bedankt.

Acties:
  • 0 Henk 'm!

Verwijderd

Waar dacht je dat limit voor was... gewoon limit id,1 gebruiken. Ik raadt je aan wat meer tijd in de manual te steken.

Acties:
  • 0 Henk 'm!

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

drm

f0pc0dert

Het is heel eenvoudig, eigenlijk.

Zorg dat je bij elke pagina van een huis het id van het volgende huis en het vorige huis opzoekt, wat voldoet aan dezelfde zoekvoorwaarden. Je moet dus aan die pagina ook de zoekvoorwaarden meegeven.

Een andere oplossing is de "recordset", zoals je hem noemt, opslaan in een sessie. In deze sessie moet je dus enkel de id's opslaan en niet de rest van de informatie. Op die manier "weet" de pagina altijd wat het "vorige" en wat het "volgende" huis in de recordset is. Dan hoeft die pagina zich verder ook niet bezig te houden met wat voor zoekvoorwaarden er opgegeven zijn.

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


Acties:
  • 0 Henk 'm!

Verwijderd

Dan zou je maar één keer op vorige of volgende kunnen klikken omdat er dan geen verdere informatie meer is. Hierdoor zou je dus weer wel elke keer een query moeten draaien en is de sessie best wel loos.

Acties:
  • 0 Henk 'm!

Verwijderd

CYRHelios ben je altijd zo aggressieverig?

Maar goed, idd had hij voor de eerste query sowieso limit id, 2 kunnen nemen zodat hij iig de huidige en de next binnen heeft, maar dan heb je de previous nog steeds niet.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Verwijderd schreef op 12 February 2003 @ 16:01:
Waar dacht je dat limit voor was... gewoon limit id,1 gebruiken. Ik raadt je aan wat meer tijd in de manual te steken.
Hej, beetje rustig hoor je moest eens weten hoevaak ik de manual doorpluis !.
Dat wat jij daar zegt daarmee ga ik inderdaad naar het volgende record, in de gehele database maar ik heb een query gemaakt waarmee ik een geselecteerd aantal records krijg en daarbinnen wil ik naar de volgende.

Maar het is dus niet mogelijk om een query uit te voeren op een recordset ?
iedereen bedankt tot zover

Acties:
  • 0 Henk 'm!

Verwijderd

Verwijderd schreef op 12 February 2003 @ 16:10:
CYRHelios ben je altijd zo aggressieverig?

Maar goed, idd had hij voor de eerste query sowieso limit id, 2 kunnen nemen zodat hij iig de huidige en de next binnen heeft, maar dan heb je de previous nog steeds niet.
Je mist ook het punt en misschien heb je ook de manual niet gelezen ;)
Jullie proberen van te voren de query te draaien voor meerdere pagina's (nu heb je het over de huidige en de volgende). Dit slaat nergens op omdat je alleen gegevens weer wilt geven over de huidige pagina (opgeslagen in ID). Dan kun je simpele linkjes maken zoals <A href=pagina?ID=$ID-1>Vorige</a> en <A href=pagina?ID=$ID+1>Volgende</a>

[ Voor 32% gewijzigd door Verwijderd op 12-02-2003 16:27 ]


Acties:
  • 0 Henk 'm!

  • Rolandow
  • Registratie: Januari 2002
  • Laatst online: 15-09 16:56
Misschien kun je de ID's eerst in een array laden? Dan kun je gewoon de volgende in het array pakken.

Of je kunt een tijdjelijke tabel aanmaken waarin je de waarden gooit, als de query echt zo groot is?

Misschien is het anders handig de hele query te laten zien hier, met eventueel hoe je de tabellen hebt opgebouwd.

Koffie met thee is minder lekker.


Acties:
  • 0 Henk 'm!

Verwijderd

Verwijderd schreef op 12 February 2003 @ 16:26:
[...]
Maar het is dus niet mogelijk om een query uit te voeren op een recordset ?
iedereen bedankt tot zover
Kijk das een duidelijke vraag
Volgens mij kun je $rquery = mysql_query("SELECT blabla"); op verschillende pagina's gebruiken. Maar dat weet ik niet zeker.

Hmm jammer
you can free the resources associated with it by calling mysql_free_result(). Although, the memory will automatically be freed at the end of the script's execution.

[ Voor 22% gewijzigd door Verwijderd op 12-02-2003 16:33 ]


Acties:
  • 0 Henk 'm!

Verwijderd

CYRHelios; het hele probleem was toch juist dat die ID's niet achtereenvolgend waren en dat ID-1 en ID+1 juist niet werken... of mis ik het weer? :)

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Die duidelijkheid stond ook al in mijn eerste post hoor ;) bedankt.
Ik ga er maar eens een functie voor schrijven, met het idee van die array, zal
wel performance kosten maar het komt de bruikbaarheid ten goede..

Acties:
  • 0 Henk 'm!

Verwijderd

Verwijderd schreef op 12 February 2003 @ 16:34:
CYRHelios; het hele probleem was toch juist dat die ID's niet achtereenvolgend waren en dat ID-1 en ID+1 juist niet werken... of mis ik het weer? :)
Jup, mysql houdt zelf id's bij die je kunt gebruiken bij limit a,b. Hierin staat a voor het zoveelste record (id) waar je wilt beginnen en b voor het aantal wat je wilt terugkrijgen. Je hoeft dus zelf geen id's op te slaan.

Acties:
  • 0 Henk 'm!

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

drm

f0pc0dert

CYRHelios:
Dan zou je maar één keer op vorige of volgende kunnen klikken omdat er dan geen verdere informatie meer is. Hierdoor zou je dus weer wel elke keer een query moeten draaien en is de sessie best wel loos.

Natuurlijk niet. Als je een array van ID's in je sessie hebt staan, heb je als je op "volgende" klikt, die array toch nog steeds tot je beschikking...

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


Acties:
  • 0 Henk 'm!

Verwijderd

Je moet het id toch niet ophogen, maar de eerste waarde van de limit :? of zeg ik nu iets heel doms?
bv:
SELECT * FROM tabel WHERE clausule LIMIT start, 5
Dit levert de 5 eerste resultaten op indien start 0 is. In de link naar de volgende pagina zet je dan:
PHP:
1
2
volgende_pagina = 'pagina.php?sql=SELECT * FROM tabel WHERE clausule LIMIT
&start='.start+5;

in de volgende pagina kun je de query dan weer opnieuw draaien,
nadat je je LIMIT start, 5 er weer achter gezet hebt, en krijg je de volgende 5 resultaten.
Indien start groter is dan 0, dan kun je ervan uitgaan dat er terug gegaan kan worden, dus zet je ook nog een linkje terug:
PHP:
1
2
vorige_pagina = 'pagina.php?sql=SELECT * FROM tabel WHERE clausule LIMIT
&start='.start-5;

Volgens mij moet dit zo perfect werken.

!!!!TIP!!!!
Indien je query echt lang is en je wilt je url er niet mee verpesten, maak dan een klein formpje met sql en start als hiddenfield en een image of knop als submit.

[ Voor 7% gewijzigd door Verwijderd op 12-02-2003 23:03 . Reden: verduidelijking / typo ]


Verwijderd

Topicstarter
Of je gebruikt Sessie's.. Bedankt voor je reactie.

Verwijderd

LOL, sorry hoor...maar hoe grote idioot moet je zijn om je query in de url te zetten...
Bedenk zelf nou eens wat je dan allemaal kan doen |:(
*lalala* DROP TABLE *lalala*

Dus: zet het in een form, of in een sessie...maar zeker niet in de url!

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

drm

f0pc0dert

In een form is net zo onveilig. Je moet queries nooit aan de gebruiker ten toon stellen, da's wel een van de domste dingen die je op een db-driven website kunt doen.

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


Verwijderd

O'Reilly Network had dit te melden aangaande dit onderwerp.

edit:typo

[ Voor 10% gewijzigd door Verwijderd op 13-02-2003 10:33 ]


Acties:
  • 0 Henk 'm!

  • Rolandow
  • Registratie: Januari 2002
  • Laatst online: 15-09 16:56
Als je nou, op het moment dat je op "meer informatie" mee stuurt hoeveelste rij het is (en dat kun je gewoon met een tellertje doen, nietwaar?), dan kun je inderdaad gewoon met limit werken volgens mij.

Dat is de simpelste oplossing volgens mij, en dan hoef je ook niet een heel array te onthouden. Slechts 1 getalletje.

Zo maak je een normale bladerfunctie ook, bedenk ik me net. Dit is gewoon een bladerfunctie, maar dan met 1 record per pagina :)

Koffie met thee is minder lekker.


Acties:
  • 0 Henk 'm!

Verwijderd

Verwijderd schreef op 13 February 2003 @ 09:53:
LOL, sorry hoor...maar hoe grote idioot moet je zijn om je query in de url te zetten...
Bedenk zelf nou eens wat je dan allemaal kan doen |:(
*lalala* DROP TABLE *lalala*

Dus: zet het in een form, of in een sessie...maar zeker niet in de url!
drm schreef op 13 February 2003 @ 09:56:
In een form is net zo onveilig. Je moet queries nooit aan de gebruiker ten toon stellen, da's wel een van de domste dingen die je op een db-driven website kunt doen.
Vuistregel: Vertrouw *nooit* de input van je gebruikers.
Pagina: 1