[PHP][MYSQL] Record nummer uit Tabel

Pagina: 1
Acties:

  • Basszje
  • Registratie: Augustus 2000
  • Laatst online: 11:10

Basszje

Reisvaap!]

Topicstarter
Ik heb een probleempje met PHP en MYSQL :) .

Ik heb nu een LIMIT / OFFSET query waarmee ik een paging systeem heb gemaakt.
Dit werkt perfect , je kan nu gewoon een aantal records laden en via een page navigeren .

Het probleem zit hem in dat er soms een datum meegegeven moet worden ( datum ) wat dus de paging in de war schopt . Je weet n.l. niet meer wat je page is en wat de volgende en vorige moeten zijn.

Ik zat te denken ( en te zoeken ) dat als je misschien op basis van een ID kon bepalen in een mysql tabel wat de positie is van die ID ( als tabel niet als result ) .
Dan kan je n.l. ook uitrekenen op welke pagina hij moet beginnen :)

Maar de vraag is dus : Hoe doe ik dat :? . Is er een functie die teruggeeft wat de positie is in de tabel :?

Beware of listening to the imposter; you are undone if you once forget that the fruits of the earth belong to us all, and the earth itself to nobody.


  • Postman
  • Registratie: Februari 2000
  • Laatst online: 15-08 20:11
Positie van een ID in een tabel is afhankelijk van je query (hangt er natuurlijk vanaf hoe je het bekijkt). Autonumber ID's zijn misschien wel een oplossing, maar ik snap eigenlijk niet goed wat je wilt/doet.

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Als je de query elke keer sorteert a.d.h.v. de zelfde kolommen zal het weinig uitmaken dat je het sorteert op datum.

Maar er is in sql niet echt een "positie" binnen een tabel, simpelweg omdat er geen volgorde garanties etc zijn. Juist door opgave van 'order by blaat' krijg je een specifieke volgorde.

Dus denk dat je idd nog iets beter uit moet leggen wat je wilt bereiken en waarom het mis gaat met je huidige methode?

Verwijderd

Lees de tabel in, in een array en kijk op welke positie in de array de gezochte waarde voorkomt. de indexering is komt dan (waarschijnlijk) overeen met die in de tabel.

Ik hoop dat je er wat aan hebt, want het is me niet geheel duidelijk wat je pcies wilt. :)

  • Basszje
  • Registratie: Augustus 2000
  • Laatst online: 11:10

Basszje

Reisvaap!]

Topicstarter
FlamerX schreef op 06 oktober 2002 @ 22:42:
Positie van een ID in een tabel is afhankelijk van je query (hangt er natuurlijk vanaf hoe je het bekijkt). Autonumber ID's zijn misschien wel een oplossing, maar ik snap eigenlijk niet goed wat je wilt/doet.
Nou goed dit is het probleem dus :

Ik heb een agenda functie die meerdere pagina's moet kunnen bevatten. Echter moet er ook naar het verleden teruggebladerd moeten kunnen worden .

Ik doe nu gewoon iedereen keer een $offset variable die bij 0 start en iedere keer het aantal te bekijken items erbij krijgt. Daar doe ik dus een LIMIT op met een offset op Mysql .

Als je binnenkomt krijg je standaard de eerst x aantal items te zien vanaf de huidige datum met een offset van 0, als je nou wilt terugbladeren krijg je een offset van -1 en daar krijg je natuurlijk geen records op , terwijl er wel records zijn die eerder zijn dan de datum .

Oftwel ik moet weten op welke 'pagina' de gebruiker binnenkomt ( met een date van vandaag dus ) en daar leek het mij verstandig om te weten op welke positie het item staat in de tabel.

Met auto_increment werken is niet handig, omdat er ook wel eens ID's 'geskipt' worden ivm deleten etc.

[edit]
Bedenk een situatie als deze :
http://www.vrijwazig.org/agenda/agenda.asp

Alleen dan met een multi-paging systeem :)

Beware of listening to the imposter; you are undone if you once forget that the fruits of the earth belong to us all, and the earth itself to nobody.


  • Postman
  • Registratie: Februari 2000
  • Laatst online: 15-08 20:11
Toch is auto_increment wel makkelijk. Ok, gedelete ID's vormen een probleem maar deze kun je opvangen door te kijken of een resultset leeg is als je een ID opvraagt (select werkend id geeft een gevulde result, select gedelete id geeft een lege result). Als je dus een lege result krijgt ga je 1 ID naar onder (of boven).
Hoop dat ik nu een beetje en probleem heb begrepen.

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Denk dat je met tijden moet gaan werken dan?

Dus zoiets:
browse.php?current_day=[huidige tijd]&direction=back

etc waarna je er een dag af haalt of een dag erbij optelt en verder kan je dan per dag multi-paging hebben etc.

Je zult iig een beetje moeten goochelen met de tijd van de dag die je aan het bekijken bent vermoed ik.

  • Basszje
  • Registratie: Augustus 2000
  • Laatst online: 11:10

Basszje

Reisvaap!]

Topicstarter
ACM schreef op 06 oktober 2002 @ 23:04:
Denk dat je met tijden moet gaan werken dan?

Dus zoiets:
browse.php?current_day=[huidige tijd]&direction=back

etc waarna je er een dag af haalt of een dag erbij optelt en verder kan je dan per dag multi-paging hebben etc.

Je zult iig een beetje moeten goochelen met de tijd van de dag die je aan het bekijken bent vermoed ik.
Hum ja dat zou kunnen idd, ware niet dat ik meerdere rijen wil laten zien ( 50 ofzo ) en daar dus tussen pagen . Dan kan ik dus niet voorspellen in welke datum range de vorige 50 dagen lagen.


FlamerX -> nee je begrijpt het nog niet echt >:) . Maar maakt niet uit, kijk anders even op boven geposte link, dan wordt het wel duidelijk .

Beware of listening to the imposter; you are undone if you once forget that the fruits of the earth belong to us all, and the earth itself to nobody.


  • Postman
  • Registratie: Februari 2000
  • Laatst online: 15-08 20:11
Nog een poging dan: je hebt data vanaf 1-1-2002 tot 1-1-2003. Als je binnenkomt krijg je dat data te zien vanaf 6-10-2002 tot 1-1-2003 (of net zoveel als er in je LIMIT zitten). Stel je wilt dus de volgende 50 zien dan doe je:
SELECT * FROM table WHERE datum > $laatstedatum LIMIT 50
Teruggaan kun je ook doen (wel resultset omdraaien):
SELECT * FROM table WHERE datum < $eerstedatum LIMIT 50
Of heb ik het nu nog steeds niet?? Zo ja: I give up...

  • Basszje
  • Registratie: Augustus 2000
  • Laatst online: 11:10

Basszje

Reisvaap!]

Topicstarter
Woef wat een gedachtengang :D . Dat ik daar niet op gekomen was.

Okee, wat ik nu dus heb gedaan is idd bij een offset lager dan 0 de query gewoon compleet omdraaien, dus lager < date en een andere order geven .

En nu werkt het :) Bedankt :)

Beware of listening to the imposter; you are undone if you once forget that the fruits of the earth belong to us all, and the earth itself to nobody.


  • smaij
  • Registratie: November 2000
  • Laatst online: 31-08 23:05
Basszje schreef op 06 oktober 2002 @ 23:37:
Woef wat een gedachtengang :D . Dat ik daar niet op gekomen was.

Okee, wat ik nu dus heb gedaan is idd bij een offset lager dan 0 de query gewoon compleet omdraaien, dus lager < date en een andere order geven .

En nu werkt het :) Bedankt :)
het is al laat he :P
Pagina: 1