[PHP & MYSQL] Laatste records tonen

Pagina: 1
Acties:
  • 485 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

  • wayne1984
  • Registratie: November 2004
  • Laatst online: 01-01-2021
hey mensen,

ik weet dat er een paar topics hierover zijn, maar kom er niet echt wijs uit..heb maar wat basis kennis heb hoop doormiddel van jullie kennis hiervan wat op te steken. ik heb eigenlijk een simpel vraagje waar ik het antwoord al meer dan een uur aan het zoeken ben.

Ik heb een tabel met berichten.. Ik wil hier gewoon simpel de laatste bv 10 records van laten tonen op de website:

$qbericht = mysql_query("SELECT * FROM berichten ORDER BY 'id'");

Ik heb met limit 10 geprobeerd, maar dan pakt ie de eerste 10 records. is er ook een functie die de laatste 10 records pakt?

bedankt alvast

Acties:
  • 0 Henk 'm!

  • truegrit
  • Registratie: Augustus 2004
  • Laatst online: 19-09 19:31
andersom sorteren? dus iets van ORDER BY id DESC of ASC

oh en dan ook nog die limit 10

[ Voor 23% gewijzigd door truegrit op 21-01-2008 16:47 ]

hallo


Acties:
  • 0 Henk 'm!

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 17:31

gorgi_19

Kruimeltjes zijn weer op :9

ORDER BY DESC

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Acties:
  • 0 Henk 'm!

  • remco_k
  • Registratie: April 2002
  • Laatst online: 17:44

remco_k

een cassettebandje was genoeg

Kijk nog even goed naar de functies LIMIT en daarbij ook naar de parameters bij ORDER BY.
En dan met name descending.

/spuit11
:P

[ Voor 6% gewijzigd door remco_k op 21-01-2008 16:47 ]

Alles kan stuk.


Acties:
  • 0 Henk 'm!

  • Patriot
  • Registratie: December 2004
  • Laatst online: 16-09 13:49

Patriot

Fulltime #whatpulsert

PHP:
1
$qbericht = mysql_query("SELECT * FROM berichten ORDER BY id DESC LIMIT 0,10");


EDIT: Heh, ik geloof dat ik wat traag ben :P Nouja, dan maar de eerste die het in code-tags durft te verwerken :+

[ Voor 38% gewijzigd door Patriot op 21-01-2008 16:49 ]


Acties:
  • 0 Henk 'm!

  • wayne1984
  • Registratie: November 2004
  • Laatst online: 01-01-2021
ff proberen en kijken hoe dat gaat.. maar bij desc gaat ie tellen van 10,9,8.... 0 toch?

Acties:
  • 0 Henk 'm!

  • wayne1984
  • Registratie: November 2004
  • Laatst online: 01-01-2021
asc werkt niet .. dan krijg ik toch nog bericht 0 tot en met 10 te zien, terwijl ik bv 15 tot 25 wil laten weergeven. bij desc werkt het wel, alleen heb ik de berichten verkeerd gesorteerd. in plaats van boven naar beneden doet ie ze van beneden naar boven weergeven.. dus dat werkt tegenstrijdig.. ut hoeft maar een simpel ding te zijn of niet? :D

[ Voor 49% gewijzigd door wayne1984 op 21-01-2008 16:56 ]


Acties:
  • 0 Henk 'm!

  • Patriot
  • Registratie: December 2004
  • Laatst online: 16-09 13:49

Patriot

Fulltime #whatpulsert

Ja klopt, dat wil je ook aangezien het hoogste id vaak het nieuwste bericht is. Wil je invloed hebben op die volgorde (bijv. het kunnen beinvloeden van de in de database aanwezige timestamp), dan kun je ook op de timestamp sorteren (waarbij 'id' in de bovenstaande code vervangen moet worden door de naam van het veld met daarin de timestamp van het bericht).

EDIT:

Wacht, hè? Je wilt de 10 nieuwste berichten ophalen, maar daarvan wil je de oudste eerst?

[ Voor 13% gewijzigd door Patriot op 21-01-2008 16:57 ]


Acties:
  • 0 Henk 'm!

  • Plague
  • Registratie: Januari 2001
  • Niet online
Dan voer je toch 2 queries uit?

1 doe je een MAX op de tabel, en 't resultaat daarvan gooi je in je limit.

Dan krijg je dus:
$max = SELECT MAX(id) FROM berichten;
SELECT * FROM berichten ORDER BY id ASC LIMIT $max-10,10;

Zo, maar dan goed uitgewerkt in PHP. :)

Acties:
  • 0 Henk 'm!

  • wayne1984
  • Registratie: November 2004
  • Laatst online: 01-01-2021
eens kijken of dat werkt.. pff op timestamp wilt het ook nie tlukken omdat het id met 1 omhoog gaat en tijd ook omhoog gaat. dus kom je op hetzelfde uit

Acties:
  • 0 Henk 'm!

  • pkuppens
  • Registratie: Juni 2007
  • Laatst online: 18-09 07:32
wayne1984 schreef op maandag 21 januari 2008 @ 16:52:
ff proberen en kijken hoe dat gaat.. maar bij desc gaat ie tellen van 10,9,8.... 0 toch?
Bij DESC zet ie de sorteervolgorde op z'n kop.
0..10 zijn dan de laatste records.

Heb je de limit wel na het sorteren?
Als dat wat uitmaakt, want zo'n grote kenner ben ik ook weer niet.

code includen?

Gr/P

Acties:
  • 0 Henk 'm!

  • Patriot
  • Registratie: December 2004
  • Laatst online: 16-09 13:49

Patriot

Fulltime #whatpulsert

Je probleem is dat je iets wilt wat voor zover ik weet niet in één query te fixen, wat Plague voorsteld kan maar dan neig ik toch meer naar simpelweg de boel reversen in PHP. Wat de beste oplossing is hangt af van je script, geef eens wat code?

Acties:
  • 0 Henk 'm!

Verwijderd

Ik zou ook gewoon in PHP de data omgekeerd afdrukken, is zeer gemakkelijk te doen door wat te spelen met de mysql pointer :)

Acties:
  • 0 Henk 'm!

  • DataGhost
  • Registratie: Augustus 2003
  • Laatst online: 19-09 21:26

DataGhost

iPL dev

Plague schreef op maandag 21 januari 2008 @ 17:07:
1 doe je een MAX op de tabel, en 't resultaat daarvan gooi je in je limit.

$max = SELECT MAX(id) FROM berichten;
SELECT * FROM berichten ORDER BY id ASC LIMIT $max-10,10;
Ik zie een race conditie... maar het resultaat zal in dit geval waarschijnlijk toch weinig boeien.
Anyway, TS, het is misschien handiger je eerst een beetje in te lezen, als je niet snapt dat "ORDER BY id" en "ORDER BY id ASC" hetzelfde doen of denkt dat je dan opeens de 10 laatste krijgt "omdat dat bij DESC wel zo is" denk ik dat je nog vaak in de problemen gaat komen. Als het echt onoverkomelijk is dat de laatste 10 rijen achterstevoren naar je script komen kan je dat in een subquery gooien en dat daarna ASC sorteren. Iets als "select (select order desc limit 10) order asc" zou wel moeten werken, denk ik, mits je database voldoende up-to-date is.

[ Voor 3% gewijzigd door DataGhost op 21-01-2008 17:20 ]


Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Patriot schreef op maandag 21 januari 2008 @ 16:55:
Wacht, hè? Je wilt de 10 nieuwste berichten ophalen, maar daarvan wil je de oudste eerst?
Wat dus compleet niet intuitief is. Als je de laatste berichten laat zien, laat dan ook merken dat ze in chronologisch desc volgorde staan.

En het is overigens zeer eenvoudig om te implementeren als je het echt wil, je weet immers al hoe order by werkt. :Y)
Patriot schreef op maandag 21 januari 2008 @ 17:11:
Je probleem is dat je iets wilt wat voor zover ik weet niet in één query te fixen, wat Plague voorsteld kan maar dan neig ik toch meer naar simpelweg de boel reversen in PHP. Wat de beste oplossing is hangt af van je script, geef eens wat code?
Plague zijn query moet inderdaad vermeden worden, aangezien LIMIT 1000000, 10 niet zo snel is als het klinkt. Je kan dan beter gewoon een query er omheen schrijven met de gewenste order by.
Overigens is ook zo'n query niet ideaal, want die buitenste sortering gaat middels een filesort. Maar goed, je moet ook gewoon op een logische manier willen sorteren. :Y)

{signature}


Acties:
  • 0 Henk 'm!

  • steffex
  • Registratie: Augustus 2003
  • Laatst online: 12-08 00:24
PHP:
1
$result = mysql_query("SELECT * FROM berichten ORDER BY `id` DESC, tijdstempel ASC LIMIT 0,10");


bovenstaande laat de laatste 10 berichten zien, gesorteerd op timestamp met de oudste bovenaan!

Het lijkt er trouwens ook op dat je opzoek bent naar een paginascript (dat je je berichten verdeeld over meerdere pagina's). Gebruik dus hetvolgende zoekwoord: "paginascript"

[ Voor 29% gewijzigd door steffex op 21-01-2008 17:22 ]


Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
stef-o schreef op maandag 21 januari 2008 @ 17:20:
PHP:
1
$result = mysql_query("SELECT * FROM berichten ORDER BY `id` DESC, tijdstempel ASC LIMIT 0,10");


bovenstaande laat de laatste 10 berichten zien, gesorteerd op timestamp met de oudste bovenaan!
Nofi, maar dit is absoluut niet waar, hier wordt op secundair op tijdstempel ASC gesorteerd voor de rijen waarbij id hetzelfde is.

{signature}


Acties:
  • 0 Henk 'm!

  • wayne1984
  • Registratie: November 2004
  • Laatst online: 01-01-2021
ik heb het al opgelost.. ik had de berichten vanboven naar beneden gesorteerd. dus 1,2 ,3 ... 10. maar ik merk dat het vertragend is omdat ik in een iframe werk waardoor de iframe steeds naar beneden vanzelf moet scrollen door een stukje javascript. nu heb ik dit maar eruit gehaald omda thet laden steeds vertraagde. nu heb ik ze gewoon van 10, 9 8 7 enz laten zien.. werkt veel sneller en beter. nu ga ik nog een manier zoeken om elk bericht om en om te laten kleuren. dus bv wit, blauw, wit blauw enz

Dank jullie voor jullie hulp :D

Acties:
  • 0 Henk 'm!

  • Plague
  • Registratie: Januari 2001
  • Niet online
Voutloos schreef op maandag 21 januari 2008 @ 17:20:
[...]
Wat dus compleet niet intuitief is. Als je de laatste berichten laat zien, laat dan ook merken dat ze in chronologisch desc volgorde staan.
Dat is weer niet waar. GoT is toch ook zo gesorteerd? (in topics) Althans, by default. Verder heb je gelijk, en is mijn oplossing toch niet ideaal. Ik zal al te denken aan een subquery, maar daar kwam ik niet helemaal uit. :)

Acties:
  • 0 Henk 'm!

  • wayne1984
  • Registratie: November 2004
  • Laatst online: 01-01-2021
ach ja.. ik ben nog in de leer. het probleem bij mij is dat als ik basis heb ik niet verder kom :S

Acties:
  • 0 Henk 'm!

  • dev10
  • Registratie: April 2005
  • Laatst online: 18-09 19:18
Voutloos schreef op maandag 21 januari 2008 @ 17:26:
[...]
Nofi, maar dit is absoluut niet waar, hier wordt op secundair op tijdstempel ASC gesorteerd voor de rijen waarbij id hetzelfde is.
En ervanuitgaande dat id de primary key is, zal dit niet gebeuren.

Acties:
  • 0 Henk 'm!

  • Plague
  • Registratie: Januari 2001
  • Niet online
letinon schreef op maandag 21 januari 2008 @ 18:01:
[...]


En ervanuitgaande dat id de primary key is, zal dit niet gebeuren.
Klopt, maar je wil in dit voorbeeld juist WEL dat dit gebeurt.

Nu sorteert 'ie eerst op ID, die allemaal op/aflopend zijn, en MOCHT het zo zijn dat er dubbele ID's zijn, DAN pas zal hij op timestamp sorteren. M.a.w. je blijft op ID's sorteren, en dat wil je niet.

Acties:
  • 0 Henk 'm!

  • Patriot
  • Registratie: December 2004
  • Laatst online: 16-09 13:49

Patriot

Fulltime #whatpulsert

Plague schreef op maandag 21 januari 2008 @ 17:51:
[...]

Dat is weer niet waar. GoT is toch ook zo gesorteerd? (in topics) Althans, by default. Verder heb je gelijk, en is mijn oplossing toch niet ideaal. Ik zal al te denken aan een subquery, maar daar kwam ik niet helemaal uit. :)
Ik weet niet hoe het met jou zit, maar bij mij staan de nieuwste topics bovenaan hoor?

Acties:
  • 0 Henk 'm!

  • Plague
  • Registratie: Januari 2001
  • Niet online
Patriot schreef op maandag 21 januari 2008 @ 18:41:
[...]


Ik weet niet hoe het met jou zit, maar bij mij staan de nieuwste topics bovenaan hoor?
Daarom zeg ik: in topics. In topics staan de nieuwste posts onderaan. :)

Acties:
  • 0 Henk 'm!

  • Patriot
  • Registratie: December 2004
  • Laatst online: 16-09 13:49

Patriot

Fulltime #whatpulsert

Ah zo; dat is inderdaad zo, maar dat is natuurlijk niet van toepassing hier. In dat geval wordt namelijk een bepaald getal als begingetal gekozen voor de LIMIT. Bovendien is het verband in dat geval belangrijk, hier gaat het om tien willekeurige berichten vergelijkbaar met de nieuwste topic ticker op de frontpage. En daarom is het gewoon compleet niet intuitief om bij een selectie van de nieuwste items die in zekere zin niet in verband staan met elkaar de uiteindelijk geretourneerde selectie om te draaien.

Ofzo :P

Acties:
  • 0 Henk 'm!

  • pedorus
  • Registratie: Januari 2008
  • Niet online
Toch nog even voor mensen die echt de laatste 10 records in normale volgorde willen hebben:
SQL:
1
2
3
SELECT * FROM
   (SELECT * FROM berichten ORDER BY 'id' DESC LIMIT 10) AS t 
ORDER BY 'id'

Qua snelheid maakt dit niet echt uit.

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten


Acties:
  • 0 Henk 'm!

  • DataGhost
  • Registratie: Augustus 2003
  • Laatst online: 19-09 21:26

DataGhost

iPL dev

Ja, dat zei ik dus al min of meer... wat je nu echter doet is een mogelijke oplossing volledig voorkauwen, zodat de TS er geen ruk van leert. Ik heb nog steeds geen antwoord mbt de query van hem gezien dus ik vraag me af of hij snapt WAT het doet, behalve DAT het werkt. Dat kan nooit de bedoeling zijn, toch? Er is niks mis met zelf even in de manual duiken om de goede syntax door te krijgen.

[ Voor 12% gewijzigd door DataGhost op 21-01-2008 23:30 ]


Acties:
  • 0 Henk 'm!

  • Gomez12
  • Registratie: Maart 2001
  • Laatst online: 17-10-2023
pedorus schreef op maandag 21 januari 2008 @ 22:39:
Qua snelheid maakt dit niet echt uit.
Hmmm, zeg dit nog eens als ik veel meer items zo wil sorteren . Bij 10 items maakt die filesort niet uit. Maar verplaats de limit eens naar buiten de subquery ( omdat je nog 1 extra conditie / join wilt hebben ) en je idee zakt als een plumpudding in elkaar.

Het werkt in dit geval goed, maar het is niet echt een algemeen handige manier die zo maar even overal toe te passen is.

Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Plague schreef op maandag 21 januari 2008 @ 18:47:
[...]
Daarom zeg ik: in topics. In topics staan de nieuwste posts onderaan. :)
En de 1e pagina eerst en je hebt de beschikking over een compleet scale aan pagina navigatie links. TS vroeg om enkel de laatste pagina (nieuwste reacties), maar dan in tijd ASC (oudste van die pagina eerst), en dat is minder intuitief dan gewoon de laatste paar aflopend.

{signature}


Acties:
  • 0 Henk 'm!

  • pedorus
  • Registratie: Januari 2008
  • Niet online
@DataGhost: sorry, overheen gekeken, je reactie was een beetje ondergesneeuwd, zo zonder code-tag. Mijn reactie was bedoeld voor de zoekende medemens. Zoek maar eens, en je ziet de meest foute oplossingen. TS ging toch al DESC gebruiken, en ik mag hopen dat hij geen "SELECT *" doet...
Gomez12 schreef op maandag 21 januari 2008 @ 23:44:
Hmmm, zeg dit nog eens als ik veel meer items zo wil sorteren . Bij 10 items maakt die filesort niet uit. Maar verplaats de limit eens naar buiten de subquery ( omdat je nog 1 extra conditie / join wilt hebben ) en je idee zakt als een plumpudding in elkaar.
Er wordt als het goed is niet eens gesorteerd, misschien alleen 2x omgedraaid. Uitgaande van niet-brakke implementaties natuurlijk. (Ik zie trouwens niet hoe de limit "buiten de subquery" kan worden geplaatst. Bij bijvoorbeeld "geef de x laatste posts van poster y in normale volgorde", zie ik een where en een join binnen de subquery.)

Als je het mij vraagt is deze oplossing vaak zelfs 'beter' dan de sortering in PHP omdraaien. Je hebt dan namelijk geen aparte logica nodig en je opent de dataset gewoon voorwaarts (goed voor snelheid; ga uit van aparte database-server).

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten

Pagina: 1