Thread View: be.comp.programming
12 messages
12 total messages
Started by Passero
Mon, 08 Sep 2003 08:44
[(my)SQL] records selecteren uit database
Author: Passero
Date: Mon, 08 Sep 2003 08:44
Date: Mon, 08 Sep 2003 08:44
10 lines
1735 bytes
1735 bytes
Onlangs heb ik op een nieuwsgroep gelezen dat zo iets mogelijk: select top 3 * from tabel order by ...... Nu is mijn vraag, bestaat zo iets ook voor records die ergens in het midden liggen zodat je een bereik kan ingeven? De reden waarom ik dat nodig heb is omdat mijn database dient voor op het net en als ik enkele duizenden records heb laat ik er maar 50 per pagina zien dus als ik aan pagina 10 zit moet hij record 501 tot 550 tonen en normaal laat ik die voorafgaan door een for loop die 500 keer rs.movenext doet. Dat zal de performantie niet ten goede komen daarom vroeg ik me af of zo iets mogelijk was in sql?
Re: [(my)SQL] records selecteren uit database
Author: Nicolas Barbier
Date: Mon, 08 Sep 2003 08:47
Date: Mon, 08 Sep 2003 08:47
23 lines
2300 bytes
2300 bytes
Passero wrote: > Onlangs heb ik op een nieuwsgroep gelezen dat zo iets mogelijk: > select top 3 * from tabel order by ...... > > Nu is mijn vraag, bestaat zo iets ook voor records die ergens in het > midden liggen zodat je een bereik kan ingeven? De reden waarom ik dat > nodig heb is omdat mijn database dient voor op het net en als ik enkele > duizenden records heb laat ik er maar 50 per pagina zien dus als ik aan > pagina 10 zit moet hij record 501 tot 550 tonen en normaal laat ik die > voorafgaan door een for loop die 500 keer rs.movenext doet. Dat zal de > performantie niet ten goede komen daarom vroeg ik me af of zo iets > mogelijk was in sql? Je gaat blijkbaar ervan uit dat de volgorde altijd gelijk blijft en dat INSERT's "aan het einde" toevoegen. Waarschijnlijk zal dat ook wel kloppen bij MySQL, maar ik zou er toch maar niet van uitgaan :-). Een IMO properdere manier is gewoon een veld voor de nummering toe te voegen en daarop te SELECTen. -- Nicolas Barbier Protecting innovation against patent inflation <url:http://swpat.ffii.org/>
Re: [(my)SQL] records selecteren uit database
Author: Robby De Smedt
Date: Mon, 08 Sep 2003 08:50
Date: Mon, 08 Sep 2003 08:50
17 lines
2024 bytes
2024 bytes
Op Mon, 08 Sep 2003 08:44:12 +0000, schreef Passero: > Onlangs heb ik op een nieuwsgroep gelezen dat zo iets mogelijk: > select top 3 * from tabel order by ...... > > Nu is mijn vraag, bestaat zo iets ook voor records die ergens in het midden > liggen zodat je een bereik kan ingeven? De reden waarom ik dat nodig heb is > omdat mijn database dient voor op het net en als ik enkele duizenden records > heb laat ik er maar 50 per pagina zien dus als ik aan pagina 10 zit moet hij > record 501 tot 550 tonen en normaal laat ik die voorafgaan door een for loop > die 500 keer rs.movenext doet. Dat zal de performantie niet ten goede komen > daarom vroeg ik me af of zo iets mogelijk was in sql? Normaal kan je daar toch limit voor gebruiken: SELECT * FROM `top_3` LIMIT 0, 30 zal record 0 tot 30 tonen
Re: [(my)SQL] records selecteren uit database
Author: Gunter Schelfhout
Date: Mon, 08 Sep 2003 08:52
Date: Mon, 08 Sep 2003 08:52
30 lines
2349 bytes
2349 bytes
Nicolas Barbier wrote: > Passero wrote: > >> Onlangs heb ik op een nieuwsgroep gelezen dat zo iets mogelijk: >> select top 3 * from tabel order by ...... >> >> Nu is mijn vraag, bestaat zo iets ook voor records die ergens in het >> midden liggen zodat je een bereik kan ingeven? De reden waarom ik dat >> nodig heb is omdat mijn database dient voor op het net en als ik enkele >> duizenden records heb laat ik er maar 50 per pagina zien dus als ik aan >> pagina 10 zit moet hij record 501 tot 550 tonen en normaal laat ik die >> voorafgaan door een for loop die 500 keer rs.movenext doet. Dat zal de >> performantie niet ten goede komen daarom vroeg ik me af of zo iets >> mogelijk was in sql? > > Je gaat blijkbaar ervan uit dat de volgorde altijd gelijk blijft en dat > INSERT's "aan het einde" toevoegen. Waarschijnlijk zal dat ook wel kloppen > bij MySQL, maar ik zou er toch maar niet van uitgaan :-). Zeker niet als er gebruik gemaakt wordt van indices. > Een IMO > properdere manier is gewoon een veld voor de nummering toe te voegen en > daarop te SELECTen. > Lijkt mij ook. -- Blood, sweat & tears
Re: [(my)SQL] records selecteren uit database
Author: Passero
Date: Mon, 08 Sep 2003 08:58
Date: Mon, 08 Sep 2003 08:58
28 lines
2221 bytes
2221 bytes
"Gunter Schelfhout" <nospam@please.com> schreef in bericht news:rrX6b.8144$Uf6.339057@phobos.telenet-ops.be... > Nicolas Barbier wrote: > > > > Je gaat blijkbaar ervan uit dat de volgorde altijd gelijk blijft en dat > > INSERT's "aan het einde" toevoegen. Waarschijnlijk zal dat ook wel kloppen > > bij MySQL, maar ik zou er toch maar niet van uitgaan :-). > > Zeker niet als er gebruik gemaakt wordt van indices. > > > Een IMO > > properdere manier is gewoon een veld voor de nummering toe te voegen en > > daarop te SELECTen. > > > > Lijkt mij ook. Het zit zo: mijn DB heeft een autonummering en dat is de primary key. Alle records worden idd onderaan toegevoegd dus indien het mogelijk zou zijn wat ik beschrijf zal het wel werken. Ik kan niet selecteren op die autonummering omdat het mogelijk is dat een record kan verijwderd worden dus dan klopt het niet meer. > --- > Blood, sweat & tears
Re: [(my)SQL] records selecteren uit database
Author: Passero
Date: Mon, 08 Sep 2003 08:59
Date: Mon, 08 Sep 2003 08:59
28 lines
2327 bytes
2327 bytes
"Robby De Smedt" <rods@no-spam-pandora.be.invalid> schreef in bericht news:pan.2003.09.08.08.50.10.788089@no-spam-pandora.be.invalid... > Op Mon, 08 Sep 2003 08:44:12 +0000, schreef Passero: > > > Onlangs heb ik op een nieuwsgroep gelezen dat zo iets mogelijk: > > select top 3 * from tabel order by ...... > > > > Nu is mijn vraag, bestaat zo iets ook voor records die ergens in het midden > > liggen zodat je een bereik kan ingeven? De reden waarom ik dat nodig heb is > > omdat mijn database dient voor op het net en als ik enkele duizenden records > > heb laat ik er maar 50 per pagina zien dus als ik aan pagina 10 zit moet hij > > record 501 tot 550 tonen en normaal laat ik die voorafgaan door een for loop > > die 500 keer rs.movenext doet. Dat zal de performantie niet ten goede komen > > daarom vroeg ik me af of zo iets mogelijk was in sql? > > Normaal kan je daar toch limit voor gebruiken: > > SELECT * FROM `top_3` LIMIT 0, 30 > zal record 0 tot 30 tonen dus als ik dan schrijf: SELECT * from tabel LIMIT 501,500 dan werkt dat?
Re: [(my)SQL] records selecteren uit database
Author: Erik Hensema
Date: Mon, 08 Sep 2003 09:01
Date: Mon, 08 Sep 2003 09:01
44 lines
2882 bytes
2882 bytes
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Passero (yanongena@pandora.be) wrote: > Onlangs heb ik op een nieuwsgroep gelezen dat zo iets mogelijk: > select top 3 * from tabel order by ...... > > Nu is mijn vraag, bestaat zo iets ook voor records die ergens in het midden > liggen zodat je een bereik kan ingeven? De reden waarom ik dat nodig heb is > omdat mijn database dient voor op het net en als ik enkele duizenden records > heb laat ik er maar 50 per pagina zien dus als ik aan pagina 10 zit moet hij > record 501 tot 550 tonen en normaal laat ik die voorafgaan door een for loop > die 500 keer rs.movenext doet. Dat zal de performantie niet ten goede komen > daarom vroeg ik me af of zo iets mogelijk was in sql? Wel in SQL, maar niet in mysql. Gewoonlijk zou je er cursors voor gebruiken. In mysql kun je er LIMIT voor gebruiken: SELECT [...] ORDER BY <iets> LIMIT <begin>,<aantal>; order by heb je wel nodig om de volgorde van de resultaten te garanderen. <begin> is het nummer van de eerste rij die je in het resultaat wilt, <aantal> is het aantal rijen dat je wilt. Krijg je er minder, dan ben je aan het einde gekomen. Let wel dat je verrassende resultaten kunt krijgen als de database onder je verandert. De TOP <x> syntax ken ik niet. Maar het klinkt hetzelfde als LIMIT <x>. - -- Erik Hensema (erik@hensema.net) ICQ# 8280101 You are only young once, but you can stay immature indefinitely. -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.2-rc1-SuSE (GNU/Linux) iD8DBQE/XEWBuNWfqpFSu/cRApn1AJsGLRBhZIt5NCZ469JkLJo3LdTNhgCglMf7 fbuLY6Yd7VFP3tvP1uekUqY= =6GDl -----END PGP SIGNATURE-----
Re: [(my)SQL] records selecteren uit database
Author: Robby De Smedt
Date: Mon, 08 Sep 2003 11:01
Date: Mon, 08 Sep 2003 11:01
25 lines
2370 bytes
2370 bytes
Op Mon, 08 Sep 2003 08:59:46 +0000, schreef Passero: > > "Robby De Smedt" <rods@no-spam-pandora.be.invalid> schreef in bericht > news:pan.2003.09.08.08.50.10.788089@no-spam-pandora.be.invalid... >> Op Mon, 08 Sep 2003 08:44:12 +0000, schreef Passero: >> >> > Onlangs heb ik op een nieuwsgroep gelezen dat zo iets mogelijk: >> > select top 3 * from tabel order by ...... >> > >> > Nu is mijn vraag, bestaat zo iets ook voor records die ergens in het > midden >> > liggen zodat je een bereik kan ingeven? <knip> >> Normaal kan je daar toch limit voor gebruiken: >> >> SELECT * FROM `top_3` LIMIT 0, 30 >> zal record 0 tot 30 tonen > > dus als ik dan schrijf: SELECT * from tabel LIMIT 501,500 dan werkt dat? Neen want 500 is kleiner dan 501. Het 2de getal moet groter zijn maar dat zal wel aan een typfout liggen denk ik ==> SELECT * from tabel LIMIT 501, 550 zou wel moeten werken.
Re: [(my)SQL] records selecteren uit database
Author: Robby De Smedt
Date: Mon, 08 Sep 2003 11:05
Date: Mon, 08 Sep 2003 11:05
34 lines
2684 bytes
2684 bytes
Op Mon, 08 Sep 2003 08:59:46 +0000, schreef Passero: > "Robby De Smedt" <rods@no-spam-pandora.be.invalid> schreef in bericht > news:pan.2003.09.08.08.50.10.788089@no-spam-pandora.be.invalid... >> Op Mon, 08 Sep 2003 08:44:12 +0000, schreef Passero: >> >>> Onlangs heb ik op een nieuwsgroep gelezen dat zo iets mogelijk: select >>> top 3 * from tabel order by ...... >>> >>> Nu is mijn vraag, bestaat zo iets ook voor records die ergens in het > midden >>> liggen zodat je een bereik kan ingeven? De reden waarom ik dat nodig >>>heb is omdat mijn database dient voor op het net en als ik enkele >>>duizenden >>> records heb laat ik er maar 50 per pagina zien dus als ik aan pagina >>> 10 zit moet >>>hij record 501 tot 550 tonen en normaal laat ik die voorafgaan door een >>>for >>>> loop die 500 keer rs.movenext doet. Dat zal de performantie niet ten >>>> goede >>>komen daarom vroeg ik me af of zo iets mogelijk was in sql? >> >> Normaal kan je daar toch limit voor gebruiken: >> >> SELECT * FROM `top_3` LIMIT 0, 30 >> zal record 0 tot 30 tonen > > dus als ik dan schrijf: SELECT * from tabel LIMIT 501,500 dan werkt > dat? Neen want 500 is kleiner dan 501. Het 2de getal moet groter zijn maar dat zal wel aan een typfout liggen denk ik ==> SELECT * from tabel LIMIT 501, 550 zou wel moeten werken.
Re: [(my)SQL] records selecteren uit database
Author: Tim Van Wassenhove
Date: Mon, 08 Sep 2003 11:10
Date: Mon, 08 Sep 2003 11:10
55 lines
3647 bytes
3647 bytes
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 In article <pan.2003.09.08.11.01.00.394628@no-spam-pandora.be.invalid>, Robby De Smedt wrote: > Op Mon, 08 Sep 2003 08:59:46 +0000, schreef Passero: > >> >> "Robby De Smedt" <rods@no-spam-pandora.be.invalid> schreef in bericht >> news:pan.2003.09.08.08.50.10.788089@no-spam-pandora.be.invalid... >>> Op Mon, 08 Sep 2003 08:44:12 +0000, schreef Passero: >>> >>> > Onlangs heb ik op een nieuwsgroep gelezen dat zo iets mogelijk: >>> > select top 3 * from tabel order by ...... >>> > >>> > Nu is mijn vraag, bestaat zo iets ook voor records die ergens in het >> midden >>> > liggen zodat je een bereik kan ingeven? > ><knip> >>> Normaal kan je daar toch limit voor gebruiken: >>> >>> SELECT * FROM `top_3` LIMIT 0, 30 >>> zal record 0 tot 30 tonen >> >> dus als ik dan schrijf: SELECT * from tabel LIMIT 501,500 dan werkt dat? > > Neen want 500 is kleiner dan 501. Het 2de getal moet groter zijn maar dat > zal wel aan een typfout liggen denk ik >==> SELECT * from tabel LIMIT 501, 550 zou wel moeten werken. Jawel hoor, dat werkt... Dat geeft dan de rijen 501 tot 501+500 uit de resultset. van http://www.mysql.com/doc/en/SELECT.html The LIMIT clause can be used to constrain the number of rows returned by the SELECT statement. LIMIT takes one or two numeric arguments, which must be integer constants. With one argument, the value specifies the number of rows to return from the beginning of the result set. With two arguments, the first specifies the offset of the first row to return, the second specifies the maximum number of rows to return. The offset of the initial row is 0 (not 1): To be compatible with PostgreSQL MySQL also supports the syntax: LIMIT row_count OFFSET offset. mysql> SELECT * FROM table LIMIT 5,10; # Retrieve rows 6-15 To retrieve all rows from a certain offset up to the end of the result set, you can use -1 for the second parameter: mysql> SELECT * FROM table LIMIT 95,-1; # Retrieve rows 96-last. If one argument is given, it indicates the maximum number of rows to return: mysql> SELECT * FROM table LIMIT 5; # Retrieve first 5 rows -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.0.6 (GNU/Linux) Comment: For info see http://www.gnupg.org iD8DBQE/XGPCoCDYcHc9TmoRAnDdAJ9oaZC5Z46ZsQ6mnMJ8hWDsDDF1egCfcPoj eFuE8SOaAGmj1t95eQwKyjI= =X1nJ -----END PGP SIGNATURE----- -- Visit my website at http://aardbei.madoka.be
Re: [(my)SQL] records selecteren uit database
Author: Passero
Date: Mon, 08 Sep 2003 11:12
Date: Mon, 08 Sep 2003 11:12
40 lines
2971 bytes
2971 bytes
"Robby De Smedt" <rods@no-spam-pandora.be.invalid> schreef in bericht news:pan.2003.09.08.11.05.10.877548@no-spam-pandora.be.invalid... > Op Mon, 08 Sep 2003 08:59:46 +0000, schreef Passero: > > > > "Robby De Smedt" <rods@no-spam-pandora.be.invalid> schreef in bericht > > news:pan.2003.09.08.08.50.10.788089@no-spam-pandora.be.invalid... > >> Op Mon, 08 Sep 2003 08:44:12 +0000, schreef Passero: > >> > >>> Onlangs heb ik op een nieuwsgroep gelezen dat zo iets mogelijk: select > >>> top 3 * from tabel order by ...... > >>> > >>> Nu is mijn vraag, bestaat zo iets ook voor records die ergens in het > > midden > >>> liggen zodat je een bereik kan ingeven? De reden waarom ik dat nodig > >>>heb is omdat mijn database dient voor op het net en als ik enkele > >>>duizenden > >>> records heb laat ik er maar 50 per pagina zien dus als ik aan pagina > >>> 10 zit moet > >>>hij record 501 tot 550 tonen en normaal laat ik die voorafgaan door een > >>>for > >>>> loop die 500 keer rs.movenext doet. Dat zal de performantie niet ten > >>>> goede > >>>komen daarom vroeg ik me af of zo iets mogelijk was in sql? > >> > >> Normaal kan je daar toch limit voor gebruiken: > >> > >> SELECT * FROM `top_3` LIMIT 0, 30 > >> zal record 0 tot 30 tonen > > > > dus als ik dan schrijf: SELECT * from tabel LIMIT 501,500 dan werkt > > dat? > > Neen want 500 is kleiner dan 501. Het 2de getal moet groter zijn maar dat > zal wel aan een typfout liggen denk ik ==> SELECT * from tabel LIMIT 501, > 550 zou wel moeten werken. > Ja idd het was een typfout.
Re: [(my)SQL] records selecteren uit database
Author: Hans
Date: Mon, 08 Sep 2003 11:45
Date: Mon, 08 Sep 2003 11:45
32 lines
2152 bytes
2152 bytes
On Mon, 08 Sep 2003 11:01:00 GMT, Robby De Smedt <rods@no-spam-pandora.be.invalid> wrote:
> Op Mon, 08 Sep 2003 08:59:46 +0000, schreef Passero:
>
>>> Normaal kan je daar toch limit voor gebruiken:
>>>
>>> SELECT * FROM `top_3` LIMIT 0, 30
>>> zal record 0 tot 30 tonen
>>
>> dus als ik dan schrijf: SELECT * from tabel LIMIT 501,500 dan werkt dat?
>
> Neen want 500 is kleiner dan 501. Het 2de getal moet groter zijn maar dat
> zal wel aan een typfout liggen denk ik
>==> SELECT * from tabel LIMIT 501, 550 zou wel moeten werken.
Als je nu eerst de manual leest voordat je antwoord dan heeft
iedereen er wat aan:
<http://www.mysql.com/doc/en/SELECT.html>
SELECT ....
[LIMIT [offset,] row_count | row_count OFFSET offset]
Groet,
Hans
>
--
http://spamikaze.nl.linux.org/
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads