Archief - sql: count 3 tables

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

Sick`

Legacy Member
het is als volgend, stel dit is mijn DB:

CREATE TABLE `user` (
`id` int(10) unsigned NOT NULL auto_increment,
PRIMARY KEY (`id`)
) TYPE=MyISAM;

CREATE TABLE `mysqldb` (
`id` int(10) unsigned NOT NULL auto_increment,
`id_user` int(10) unsigned NOT NULL default '0',
PRIMARY KEY (`id`)
) TYPE=MyISAM;

CREATE TABLE `mysqluser` (
`id` int(10) unsigned NOT NULL auto_increment,
`id_mysqldb` int(10) unsigned NOT NULL default '0',
PRIMARY KEY (`id`)
) TYPE=MyISAM;

een user KAN 0 of meer mysqldb's hebben.
een mysqldb KAN 0 of meer mysqlusers hebben.
ik wil weten hoeveel mysqlusers er nu tot die user behoren in 1 query.

iemand enig idee hoe ?! het is iets met een join prolly, maar snap het niet goed.

Sick`

Legacy Member
SELECT COUNT(mysqluser.id) FROM mysqluser,mysqldb,user
WHERE mysqldb.id = mysqluser.id_mysqldb
AND mysqldb.id_user = 1;

lijkt te werken, als iemand beter suggesties nog heeft, shoot :)

dJeez

Legacy Member
Als er meer info in de tabellen zit die je ook zou nodig hebben kan je eventueel ook nog inner joins leggen. Tenzij ook 0 resultaten in een bepaalde tabel zouden meetellen, dan ga je een (left/right) outer join moeten toepassen...

Of de inner join sneller zou gaan dan je huidige where clause kan je enkel bepalen door ze beide eens aan een test te onderwerpen ('k zou het met andere woorden echt niet weten). Sowieso zal het leggen van goede indexes zorgen voor een snel resultaat :p.

BTW Waarom MyISAM en geen InnoDB tabellen? InnoDB heeft het voordeel van ACID compliant te zijn (en dus transacties toe te laten)... Vrij belangrijk voor bedrijfskritische gegevens als je 't mij vraagt (maar let er wel op dat je autocommit afzet bij batch-inserts of updates :p).

Sick`

Legacy Member
moet je voor InnoDB geen licentiekosten betalen?
maar ik heb ze momenteel niet nodig omwille van de implementatie.

-> user veranderd iets = bepaalde flag word gezet.
-> user kan niets veranderen aan die record zolang er nog flags staan.
-> systeem verwerkt en reset de flags enkel na success bij doorvoering.

niet dat ik me niet wil moe maken, maar ik kan men tijd momenteel echt wel gebruiken + het is tot hiertoe al een vrij zware applicatie door de gebruikte frameworks en ik zou echt wel op men query's kunnen besparen (CGI::Application, HTML::Template, CGI::Session).

dJeez

Legacy Member
Sick` zei:
moet je voor InnoDB geen licentiekosten betalen?

Voor de InnoDB storage engine op zich niet nee, maar het zou wel kunnen dat je sowieso al een MySQL licentie moet betalen (afhankelijk van wat je precies doet met MySQL). Heel simpel komt 't er in principe op neer dat je bij gebruik van MySQL in een commerciële omgeving een MySQL licentie moet aanschaffen (de uitzonderingen staan vermeld op hun site).
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan