Avatar billede kwudo Nybegynder
09. juni 2007 - 15:08 Der er 12 kommentarer og
1 løsning

Hvordan henter man resten, undtagen den nyeste?

Hej alle sammen, overskriften forklare næsten alt.

Hvordan henter man f.x. Nyheder fra en database, men hvor den så henter alle sammen, undtagen den der sidst er blevet tilføjet?

lad os anslå der er 10 nyheder, så skal den hente nyhed 1,2,3,4,5,6,7,8 og 9, men ikke id 10 altså den nyeste?

kan man det?
Avatar billede intenz Novice
09. juni 2007 - 17:23 #1
Ja, det kan man godt.

Men det kommer an på hvordan man ved hvilken der er den nyeste. Har de et ID, timestamp eller lign? Du er nødt til at forklare hvordan den tabel de ligger i ser ud.
Avatar billede thesurfer Nybegynder
09. juni 2007 - 18:17 #2
Det kan gøre med noget i  stil med:

select * from TabelNavn where id not in (select top 1 from TabelNavn order by id desc)

Jeg mener at man kan bruge "not in"..

Ellers må man lave noget i stil med:

select * from TabelNavn where id < (select top 1 from TabelNavn order by id desc)


Jeg mener at "top 1" er Access.. hvis det ikke kan bruges, hedder det vist:

select * from TabelNavn = ... Limit 1

Eller noget i den stil :-)
Avatar billede 0xffff Nybegynder
09. juni 2007 - 21:47 #3
ved mysql skal du bruge limit.

select xxx from xxx where xxx = xxx
order by xxx asc
limit [startpunkt, antal]

dvs. hvis du vil have de 10 nyeste id UNDTAGEN den allernyeste vil din sql se således ud.

select id from xxxx where xxx = xxx
order by xxx asc
limit 1, 10;
Avatar billede thesurfer Nybegynder
09. juni 2007 - 23:31 #4
0xffff> Men du skal huske på, at værdien (i eksemplerne, "10") er variabelt..

Det er derfor jeg bruger en ekstra sql sætning..
Avatar billede 0xffff Nybegynder
10. juni 2007 - 09:30 #5
thesurfer:
Ja ok, den havde jeg ikke lige set. Jeg vil dog anbefale at vælge et antal og holde sig til det.

Man har jo også mulighed for bare at lave en limit 1, 99999999999. Den vil sikkert tage alle de rækker med man havde tænkt sig at returnere alligvel :)
Avatar billede thesurfer Nybegynder
10. juni 2007 - 16:12 #6
Ang "limit 1, 99999999999":
Huh? :-)

Den skal jo netop ikke tage alle rækker med..

Den skal begrænse til "max - 1"..
Avatar billede kwudo Nybegynder
10. juni 2007 - 17:24 #7
altså der kommer til at være mere end 10 nyheder, og den henter pr id. Kan jeg så bare gøre følgene:

mysql_query("SELECT * FROM nyheder ORDER BY id ASC LIMIT 1,999999")
Avatar billede 0xffff Nybegynder
10. juni 2007 - 18:01 #8
thesurfer:
limit 1, 99999999999 giver skam også alt undtagen den nyeste :P

Ellers ville den hedde
limit 0, 99999999999

Kwudo:
Du skal nok bruge "order by ID desc" da jeg vil gå ud fra at højeste id er det nyeste ?

Hvis du så ordner det desc vil det f.eks give denne række

5 <--- Nyeste
4
3
2
1

Limit 1, 99999999 vil så springe det første resultat over. Nemlig 5 tallet og returnere 4 3 2 1. Som jeg læser det, er det det som du gerne vil have.
Avatar billede kwudo Nybegynder
11. juni 2007 - 13:31 #9
altså med limit 1,999999 springer den det nyeste over uanset hvor højt id'et er så længe det der højeste?
Avatar billede kwudo Nybegynder
11. juni 2007 - 13:31 #10
mysql_query("SELECT * FROM nyheder ORDER BY id DESC LIMIT 1,999999")

Vil være den rigtig sql sætning?
Avatar billede 0xffff Nybegynder
11. juni 2007 - 17:30 #11
jeps

Limit virker på den måde at første parameter er antallet den skal springe over fra start af dataset. Parameter 2 er antal den skal returnere.

Så f.eks. en limit 1,10; vil springe første fundne over og returnere de 10 efter det.
Avatar billede kwudo Nybegynder
15. juni 2007 - 19:02 #12
okay, fedt :)
smid svar (;
Avatar billede kwudo Nybegynder
24. oktober 2009 - 17:39 #13
svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester