Toon posts:

[mysql] limit & order by

Pagina: 1
Acties:

Verwijderd

Topicstarter
Net een topic gesloten, maar ik denk dat ik mijn vraga niet goed had gesteld. Dus bij deze nog even:

Ik heb de volgende sql gemaakt:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
SELECT  
    chat.bericht,
    chat.userid,
    chat.datum,
    members.gebruikersnaam,
    members.geslacht,
    members.status
FROM 
    chat
LEFT JOIN 
    members ON chat.userid = members.id
ORDER BY 
    chat.datum
ASC
LIMIT 50

Dit werkt, echter limit hij niet goed. Hij pakt nu gewoon alleen de 1e 50 records, maar hij moet juist de laatste 50 records pakken... als ik DESC gebruik ipv ASC, dan zet hij de laatste record bovenaan maar dat moet niet:


code:
1
2
3
4
Database:
[a]
[b]
[c]

Bij limit 2 asc doet ie nu:
code:
1
2
[b]
[a]

Maar hij moet:
code:
1
2
[c]
[b]

Doen, en niet zoals met desc
code:
1
2
[b]
[c]


Hoop dat 't nu duidelijker is :)

  • whoami
  • Registratie: December 2000
  • Laatst online: 23:52
code:
1
2
3
4
5
6
7
8
SELECT * FROM
(
SELECT ....
...
ORDER BY datum DESC
LIMIT 50
)
ORDER BY datum ASC


Als dat lukt in MySQL natuurlijk

[ Voor 19% gewijzigd door whoami op 24-06-2004 15:43 ]

https://fgheysels.github.io/


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 24-05 14:53

NMe

Quia Ego Sic Dico.

whoami schreef op 24 juni 2004 @ 15:42:
code:
1
2
3
4
5
6
7
8
SELECT * FROM
(
SELECT ....
...
ORDER BY datum DESC
LIMIT 50
)
ORDER BY datum ASC


Als dat lukt in MySQL natuurlijk
Lukt niet. ;) Subqueries mogen pas vanaf een bepaalde versie.

Je kan de resultaten van je query in een array zetten en dit array achterstevoren doorlopen.
Verwijderd schreef op 24 juni 2004 @ 15:41:
code:
1
2
3
4
Database:
[a]
[b]
[c]

Bij limit 2 asc doet ie nu:
code:
1
2
[b]
[a]

Maar hij moet:
code:
1
2
[c]
[b]

Doen, en niet zoals met desc
code:
1
2
[b]
[c]
Ehm, DESC maakt er juist wel [c][b] van (descending -> van onder naar boven)... :/

[ Voor 33% gewijzigd door NMe op 24-06-2004 15:49 ]

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • Gerwin
  • Registratie: Juli 2001
  • Laatst online: 08-06-2025

Gerwin

Ik ben er klaar voor!

Je moet kijken hoeveel results je hebt en dan vervolgens de laatste 50 pakken.

Station van Gerwin Prins op Apple Music


Verwijderd

NMe84 schreef op 24 juni 2004 @ 15:47:
[...]

Lukt niet. ;) Subqueries mogen pas vanaf een bepaalde versie.

Je kan de resultaten van je query in een array zetten en dit array achterstevoren doorlopen.


[...]

Ehm, DESC maakt er juist wel [c][b] van (descending -> van onder naar boven)... :/
En valt een subquery als
code:
1
2
3
select * 
from tbUsers 
where id in (select id from tbUsers)


daar ook onder?

p.s. onzinnige stukje SQL, maar hiermee kan je wel uitbouwen naar wat de TS wilt

  • Skaah
  • Registratie: Juni 2001
  • Niet online
PHP:
1
2
3
4
5
$gewenst = 50;
$result = mysql_query('SELECT count(*) FROM tabel');
$result = mysql_fetch_array($result);
$aantal = $result[0];
$result = mysql_query(sprintf('SELECT * FROM tabel ORDER BY kolom LIMIT %d,%d',$aantal-$gewenst,$gewenst));

[ Voor 44% gewijzigd door Skaah op 25-06-2004 09:15 . Reden: Bedankt, Gerwin :P ]


Verwijderd

Topicstarter
Ik heb dit opgelost door met DESC te selecten en de array andersom uit te lezen met php. :)

(sorry skaah, lees je berichtje net te laat :P)

[ Voor 22% gewijzigd door Verwijderd op 24-06-2004 16:43 ]


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 24-05 14:53

NMe

Quia Ego Sic Dico.

Verwijderd schreef op 24 juni 2004 @ 16:29:
[...]


En valt een subquery als
code:
1
2
3
select * 
from tbUsers 
where id in (select id from tbUsers)


daar ook onder?

p.s. onzinnige stukje SQL, maar hiermee kan je wel uitbouwen naar wat de TS wilt
MySQL kan pas vanaf versie 4.0.18 oid met subqueries overweg...dus nee. :P

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • Skaah
  • Registratie: Juni 2001
  • Niet online
Verwijderd schreef op 24 juni 2004 @ 16:42:
Ik heb dit opgelost door met DESC te selecten en de array andersom uit te lezen met php. :)

(sorry skaah, lees je berichtje net te laat :P)
Hé, en ik me maar uitsloven. Ik vond het nog wel zulke mooie code :P

Om dit soort dingen te voorkomen kun je een Database Abstaction Layer gebruiken die ook je resultset weer kan hersorteren... bijvoorbeeld.

  • Gerwin
  • Registratie: Juli 2001
  • Laatst online: 08-06-2025

Gerwin

Ik ben er klaar voor!

Skaah schreef op 24 juni 2004 @ 16:35:
PHP:
1
2
3
4
5
$gewenst = 50;
$result = mysq_query('SELECT count(*) FROM tabel');
$result = mysql_fetch_array($result);
$aantal = $result[0];
$result = mysql_query(sprintf('SELECT * FROM tabel ORDER BY kolom LIMIT %d,%d',$aantal-$gewenst,$gewenst));
Precies ;)

Station van Gerwin Prins op Apple Music

Pagina: 1