[MySQL] Tellen in meerdere tabellen in één query

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

  • Mexxus
  • Registratie: Januari 2004
  • Laatst online: 20-09-2025
Ik wil graag verschillende tellingen doen in verschillende tabellen. Om voor elke telling een nieuwe COUNT() query te draaien, zal ik per pageview iets van 20 query's nodig hebben. Da's me iets te veel, dus ik bedacht dat het misschien wel in één query zou kunnen.

Iets in de richting van:

code:
1
2
3
4
5
6
7
8
SELECT COUNT(1) 
     FROM tabel1 
     AS totaal_1 
SELECT COUNT(1) 
     FROM tabel2
     WHERE foo = bar
     AS totaal_2
etc...


Is dit op een of andere manier mogelijk binnen MySQL, of zit er niets anders op dan voor elke telling een aparte query te draaien?

  • Pino
  • Registratie: Oktober 2001
  • Laatst online: 15:48
UNION?

Al betwijfel ik of dat veel sneller gaat werken.

[ Voor 82% gewijzigd door Pino op 18-07-2005 17:01 ]

"If you don't know where you are going, any road will take you there"


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 18:42

curry684

left part of the evil twins

UNION in een subquery is de enige oplossing.

Maar waarom wil je in godesnaam counts uit verschillende tabellen samentellen? * curry684 ruikt een slecht datamodel....

Professionele website nodig?


Verwijderd

om alle rijen in alle tabellen in een database te zien kan je SHOW TABLE STATUS gebruiken

  • Mexxus
  • Registratie: Januari 2004
  • Laatst online: 20-09-2025
curry684 schreef op maandag 18 juli 2005 @ 17:06:

Maar waarom wil je in godesnaam counts uit verschillende tabellen samentellen? * curry684 ruikt een slecht datamodel....
Voor een statistiekenpagina. Ik wil op die pagina weergeven hoeveel nieuwsberichten er zijn (tellen vanuit nieuwsberichten), en hoeveel gebruikers er zijn (tellen vanuit gebruikerstabel) etc...

Als je een andere manier weet hoor ik het graag.. :)

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

drm

f0pc0dert

hmkay, en waarom zou dat dan in 1 query moeten :?
Er zijn in totaal 169 gebruikers en nieuwsberichten¹

¹) bij elkaar opgeteld
8)7

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


  • Mexxus
  • Registratie: Januari 2004
  • Laatst online: 20-09-2025
drm schreef op maandag 18 juli 2005 @ 17:41:
hmkay, en waarom zou dat dan in 1 query moeten :?


[...]


8)7
Nee.... dat is niet de bedoeling...

Anders zou ik voor elke telling een query moeten draaien en de uitkomst moeten echo'en. Ik dacht, als ik het nou allemaal in één query zou kunnen doen, en dat vervolgens door mysql_fetch_object() kan halen om in een array te plempen, dan kan ik vervolgens de data uit die array echo'en.

  • jAnO!
  • Registratie: Januari 2002
  • Laatst online: 01-05 18:22

jAnO!

lalalavanillevla

SQL:
1
2
3
select 'naam' as tabel, count(*) from naam union
select 'naam2' , count(*) from naam2 union
select 'naam3' , count(*) from naam3

When some people work at a place for ten years they get ten years of experience, other people work at a place for ten years and get one year of experience ten times.


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

drm

f0pc0dert

Als je het heel graag in 1 query wilt doen kun je dat met union of een rits left of right joins wel doen, maar neem maar van me aan dat je dan op een lichtelijk verkeerde manier met queries om gaat. Meerdere queries is the way to go hier.

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


Verwijderd

wat is er mis met
code:
1
SHOW TABLE STATUS

:/

Weliswaar niet een 'schoon' result, maar ik neem aan dat je de row count er wel uit kunt halen.

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Met InnoDB heb je een schatting van de counts, dus het is maar net wat voor eisen je stelt aan je resultaatset of dat voldoet ;)

  • P_de_B
  • Registratie: Juli 2003
  • Niet online
drm schreef op maandag 18 juli 2005 @ 17:49:
Als je het heel graag in 1 query wilt doen kun je dat met union of een rits left of right joins wel doen, maar neem maar van me aan dat je dan op een lichtelijk verkeerde manier met queries om gaat. Meerdere queries is the way to go hier.
Union voldoet toch prima?

Oops! Google Chrome could not find www.rijks%20museum.nl


  • joopst
  • Registratie: Maart 2005
  • Laatst online: 01-10-2024
je kan bij een insert de count in een aparte tabel zetten

bij het ophalen van de statistieken lees je dan die ene tabel uit. Dat scheelt je ook veel performance.

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 01-05 19:54

Bosmonster

*zucht*

joopst schreef op maandag 18 juli 2005 @ 20:50:
je kan bij een insert de count in een aparte tabel zetten

bij het ophalen van de statistieken lees je dan die ene tabel uit. Dat scheelt je ook veel performance.
De COUNT wordt bij MyISAM al los opgeslagen (in principe gewoon de rowcount) en geraadpleegd bij een COUNT(*). Dat is dus al allemaal voor je geoptimaliseerd.

Weinig nut om dat dan zelf te gaan doen..

Count(*) op MyISAM is echt miliseconden werk, dus die pagina zal er, zelfs met 20 counts waarschijnlijk nog in een tiende van een seconde staan. Niet echt iets om je druk over te maken.

[ Voor 28% gewijzigd door Bosmonster op 19-07-2005 10:05 ]


Verwijderd

om alle rijen in alle tabellen in een database te zien kan je
code:
1
SHOW TABLE STATUS
gebruiken

Dit werkte prima bij mij, dus bij jou ook neem ik aan.

[ Voor 5% gewijzigd door Verwijderd op 28-07-2005 03:56 ]


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 03-05 20:49

Creepy

Tactical Espionage Splatterer

Verwijderd schreef op donderdag 28 juli 2005 @ 03:54:
om alle rijen in alle tabellen in een database te zien kan je
code:
1
SHOW TABLE STATUS
gebruiken

Dit werkte prima bij mij, dus bij jou ook neem ik aan.
* Creepy aait schu!mbek. Lees de draad nog eens goed door? ;)
ACM schreef op maandag 18 juli 2005 @ 18:57:
Met InnoDB heb je een schatting van de counts, dus het is maar net wat voor eisen je stelt aan je resultaatset of dat voldoet ;)

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Verwijderd

Creepy schreef op donderdag 28 juli 2005 @ 09:28:
[...]

* Creepy aait schu!mbek. Lees de draad nog eens goed door? ;)


[...]
kijk... ik ben ook niet blind ofzo.... ik weet dat hetzelfde al gezegd was, maar dr werd gewoon overheen gepraat :) dus ik d8: ff testen of ze t wel zien als ik t zeg
Pagina: 1