[mySQL] actieve produkten binnen subgroep bepalen

Pagina: 1
Acties:

  • bRight
  • Registratie: Juli 2000
  • Laatst online: 27-11-2024

bRight

digitaal

Topicstarter
Ik kon niet echt een goede topic titel verzinnen om mijn probleem te omschrijven.. :)
Ik heb de volgende tabellen (versimpeld voor het idee):
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
products
+-----------------+--------+
| product_id (pk) | status |
+-----------------+--------+

products_subgroup
+------------+-------------+
| product_id | subgroup_id |
+------------+-------------+

groups
+---------------+------+
| group_id (pk) | name |
+---------------+------+

subgroups
+-----------------+----------+------+
| subgroup_id (pk)| group_id | name |
+-----------------+----------+------+

'status' in products is '1' -> actief, of '0' -> niet actief
tabel 'products_subgroup' koppelt de producten aan 1 of meerdere subgroepen.
So far so good..


Nu wil ik binnen 1 query bepalen hoeveel subgroepen met minimaal 1 actief product er zijn onder een produktgroep.

Ik heb deze query:
code:
1
2
3
4
5
6
7
8
9
10
SELECT COUNT(s.subgroup_id)
FROM
    subgroups s,
    products_subgroup ps,
    products p
WHERE
    s.group_id = ?
    AND ps.subgroup_id = s.subgroup_id
    AND p.product_id = ps.product_id
    AND p.status > 0

Voor de wildcard wordt dan de group_id van de produktgroep ingevuld waarvan ik het aantal subgroepen wil weten.
Maar de query geeft het het aantal actieve produkten binnen de produktgroep. en das niet wat ik nodig heb..

Ik heb even geen idee hoe ik dit moet oplossen.
Iemand een geniaal idee? :)

[ Voor 4% gewijzigd door bRight op 06-08-2004 15:20 . Reden: in table products zit geen group_id.. relatie ligt alleen via de koppeltabel ]


  • beetle71
  • Registratie: Februari 2003
  • Laatst online: 14-05 15:52
Dit betekend dat je kunt 'beginnen' met je relatietabel, want alle subgroup_id 's die daarin staan hebben hebben minimaal 1 produkt.
Dus:
code:
1
2
3
4
5
6
7
    SELECT products.group_id, count(products_subgroup.subgroup_id)
    FROM
        products, products_subgroup
    WHERE products.group_id=?
    AND products_subgroup.product_id=products.product_id\
    AND product.status=1
    GROUP BY product.group_id

Of begrijp ik je niet helemaal?

[ Voor 6% gewijzigd door beetle71 op 06-08-2004 09:40 ]


  • bRight
  • Registratie: Juli 2000
  • Laatst online: 27-11-2024

bRight

digitaal

Topicstarter
ik geloof het niet.. en daarnaast had ik een fout gemaakt in mijn openingspost.
tabel products heeft namelijk geen group_id

De relatie tussen status en group_id ligt via de koppeltabel met tabel subgroups.
Ik kom er nog steeds niet uit. Ik kan het wel met 2 queries oplossen in een loop, en dan tellen, maar dat is zo'n ranzige oplossing..

kan de topictitel trouwens veranderd worden in '[SQL] aantal subgroepen met actieve produkten binnen een produktgroep'
of is dat te lang? :)

[ Voor 19% gewijzigd door bRight op 06-08-2004 17:54 . Reden: topictitel wijzigen ]


  • beetle71
  • Registratie: Februari 2003
  • Laatst online: 14-05 15:52
Ahha...

Je zegt ik wil van EEN BEPAALDE group (group_id) weten hoeveel subgroepen met minimaal 1 actief product erin.

Volgens mij moet het dan zoiets zijn:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
SELECT 
   subgroups.group_id,
   count(products_subgroup.subgroup_id) as aantal 
FROM 
   subgroups,products_subgroup,products
WHERE 
   subgroups.group_id=?
      AND 
         subgroups.subgroup_id=products_subgroup.subgroup_id
      AND 
         products_subgroup.product_id=products.product_id
      AND 
         products.status=1
GROUP BY (subgroups.group_id)