[mysql] Limit maar toch totala aantal van resultaten

Pagina: 1
Acties:

  • EgoH
  • Registratie: Oktober 2001
  • Laatst online: 25-08 21:12
Ik gebruik nu 2 query's om het totale aantal en een gelimiteerd aantal resultaten te krijgen:

code:
1
2
3
SELECT id,name FROM table WHERE letter='$letter' ORDER BY name LIMIT $start,$perpage";

SELECT COUNT(*) FROM table WHERE letter='$letter'


Nou heb ik tijdje gezocht of dit mogelijk is in 1 query te stoppen.
Ik weet namelijk niet zeker of dit mogelijk is.

[ Voor 0% gewijzigd door EgoH op 09-08-2002 11:44 . Reden: typo ]


  • whoami
  • Registratie: December 2000
  • Laatst online: 29-08 15:58
Volgens mij niet nee.
Die count gaat het aantal opgevraagde rijen returnen en jij beperkt het aantal rijen dmv die limit.

Als je doet :
code:
1
SELECT naam, count(*) from tabel group by naam

dan zul je voor iedere 'naam' krijgen hoeveel x die naam voorkomt. Dus bv:
naam1 2
naam2 7
naam3 8

https://fgheysels.github.io/


  • EgoH
  • Registratie: Oktober 2001
  • Laatst online: 25-08 21:12
whoami schreef op 09 augustus 2002 @ 11:48:
Volgens mij niet nee.
Die count gaat het aantal opgevraagde rijen returnen en jij beperkt het aantal rijen dmv die limit.

Als je doet :
code:
1
SELECT naam, count(*) from tabel group by naam

dan zul je voor iedere 'naam' krijgen hoeveel x die naam voorkomt. Dus bv:
naam1 2
naam2 7
naam3 8
Ja maar is is juist de bedoeling dat die limit erook opblijft, omdat ik geen 1000 resultaten gestuurd wil hebben.
Het gaat er dus om die $perpage als dat niet duidelijk is.
Daar limiteer ik het mee, maar wil toch totale aantal resultaten.
(en niet het aantal van de limiet)

  • WouZz
  • Registratie: Mei 2000
  • Niet online

WouZz

Elvis is alive!

Vanaf MySQL 4.0.0 is er de functie FOUND_ROWS() i.c.m. SQL_CALC_FOUND_ROWS... Misschien is dat wat voor je?

On track


  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

EgoH:
Ik gebruik nu 2 query's om het totale aantal en een gelimiteerd aantal resultaten te krijgen:

code:
1
2
3
SELECT id,name FROM table WHERE letter='$letter' ORDER BY name LIMIT $start,$perpage";

SELECT COUNT(*) FROM table WHERE letter='$letter'


Nou heb ik tijdje gezocht of dit mogelijk is in 1 query te stoppen.
Ik weet namelijk niet zeker of dit mogelijk is.
Dat vind ik zo'n raar verschijnsel. Waarom zou je dat in 1 query willen hebben?

Stel je voor: Je hebt een stel appels. Je wilt weten wat voor kleuren appels er zijn, maar na de 5 appels stop je met kleurtjes tellen. Als je klaar bent met tellen, wil je eigenlijk ook wel weten hoeveel appels het in totaal waren. Heb je dan al genoeg informatie? Nee, natuurlijk niet. Je moet opnieuw alle appels tellen (of verdergaan bij de 5 die je al gehad hebt, maar da's een optimalisatiekwestie voor MySQL :Y))

Kortom, 't zijn 2 verschillende vragen. Vragen die je niet kunt combineren, omdat ze in feite niet genoeg relatie met elkaar hebben. En laat query nou net "vraag" betekenen ;)

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


  • EgoH
  • Registratie: Oktober 2001
  • Laatst online: 25-08 21:12
drm schreef op 09 augustus 2002 @ 15:03:
[...]

Dat vind ik zo'n raar verschijnsel. Waarom zou je dat in 1 query willen hebben?

Stel je voor: Je hebt een stel appels. Je wilt weten wat voor kleuren appels er zijn, maar na de 5 appels stop je met kleurtjes tellen. Als je klaar bent met tellen, wil je eigenlijk ook wel weten hoeveel appels het in totaal waren. Heb je dan al genoeg informatie? Nee, natuurlijk niet. Je moet opnieuw alle appels tellen (of verdergaan bij de 5 die je al gehad hebt, maar da's een optimalisatiekwestie voor MySQL :Y))

Kortom, 't zijn 2 verschillende vragen. Vragen die je niet kunt combineren, omdat ze in feite niet genoeg relatie met elkaar hebben. En laat query nou net "vraag" betekenen ;)
Nou ik dacht dat er misschien een command voor was ofzo, wants hij mag ze wel allemaal vergelijken, geen probleem.
Maar ik wil geen 5mb aan data terug.
Daarom wil ik die id,name result limiten op 50 maar toch doortellen met de compare.
Maar dat gaat dus blijkbaar niet?

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

nope, en het heeft ook geen enkele zin :)

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


  • EgoH
  • Registratie: Oktober 2001
  • Laatst online: 25-08 21:12
WouZz schreef op 09 augustus 2002 @ 14:51:
Vanaf MySQL 4.0.0 is er de functie FOUND_ROWS() i.c.m. SQL_CALC_FOUND_ROWS... Misschien is dat wat voor je?
He thanx ik denk dat dat het is, damn moet ik versie 4 weer gaan compilen.
Hartstikke bedankt in ieder geval, ik kan vooruit

  • EgoH
  • Registratie: Oktober 2001
  • Laatst online: 25-08 21:12
drm schreef op 09 augustus 2002 @ 16:41:
nope, en het heeft ook geen enkele zin :)
Ze zijn wel zo sliim geweest om het in versie 4 te zetten :)
Al heeft eht volgens jou geen zin ;)

Toch nog maar ff wachten tot mysql 4 in stable fase is :(

  • dirkpostma
  • Registratie: Juni 2001
  • Laatst online: 10-05 16:53
Ik had zojuist exact hetzelfde probleem, ik wil onder een tabel links maken met "previous", "next" en page numbers daartussen in. Om dat goed te doen moet je inderdaad weten hoeveel records het totale result is.

Ik ga nog niet over naar MySQL 4, maar heb 2 mogelijke oplossingen indien FOUND_ROWS() niet beschikbaar is:

1) van te voren een COUNT (*) doen met dezelfde query. Dus:
SELECT COUNT(*) as cnt FROM table WHERE conditie

Daarna:
SELECT gewenst velden FROM table WHERE conditie

Nadeel is wel dat de query twee keer uitgevoerd moeten worden. Als de conditie erg ingewikkeld is (lees: veel CPU power kost), is dat natuurlijk niet gewenst. In dat geval gebruik ik oplossing 2:

2) Alleen een prev en een next link displayen, zonder page numbers. Als mensen te vaak op next klikken wordt de resultset op een gegeven moment leeg, maar ik neem aan dat iedereen weet wat dat betekent :)
Pagina: 1