Versio

DISTINCT

Overzicht Reageren

Roy D

Roy D

15/02/2011 19:53:24
Quote Anchor link
Beste forum leden,

ik zit een beetje te knoeien met hoe ik bepaalde gegevens uit de MySQL database ga halen.

Voorbeeld database:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
id, product_id, cat, name, value
--------------------------------
1,1,Algemeen,Processor,2 Ghz
2,1,Algemeen,Geheugen,4GB
3,2,Algemeen,Processor,3 Ghz


De query:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
SELECT DISTINCT cat, name, value
FROM producten_specs
WHERE product_id IN (1,2)
ORDER BY cat,name,ABS(value) ASC


Wat ik nu wil is dat de items met id 1 en 3 geselecteerd worden, omdat product met product_id 1 als 2 allebei Algemeen en Processor als cat en name hebben.

Het gaat om een database met zo'n 80.000 items en veel verschillende cat's, name's en value's.

Wie o wie?

Alvast bedankt!
Gewijzigd op 15/02/2011 19:55:10 door Roy D
 
PHP hulp

PHP hulp

24/05/2012 09:50:28
Gesponsorde koppelingen:
BHosted Hosting al vanaf € 1,- per maand

Controleer nu gratis jouw domeinnaam:

  
 
PHP Jasper

PHP Jasper

15/02/2011 20:06:35
Quote Anchor link
SELECT id, product_id, name, value FROM tabel WHERE cat = 'Processor'
 
Roy D

Roy D

15/02/2011 20:21:25
Quote Anchor link
Helaas gaat het om een groot aantal gegevens waar o.a. cat kan variƫren.

Zit te denken hoe ik het duidelijker uit kan leggen, zou het niet weten? Denk dat het aardig begrijpelijk is?

Van waar de titel DISTINCT? Eigenlijk het tegenovergestelde daarvan moet er gebeuren..

==================================================
Betere uitleg:

Database:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
id, product_id, cat, name, value
--------------------------------
1,1,Algemeen,Processor,2 Ghz
2,1,Algemeen,Geheugen,4 GB

3,2,Algemeen,Processor,3 Ghz
4,2,Algemeen,Geheugen,4 GB

5,3,Beeldscherm,Inch,22"
6,3,Beeldscherm,Kleur,Zwart
7,3,Algemeen,Geheugen,3 GB
8,3,Algemeen,Processor,3 Ghz


ID's welke geselecteerd moeten worden:
1,2,3,4,7,8

Omdat de cat, algemeen en name, processor bij alle producten aanwezig zijn. ID 5,6 zijn alleen bij product 3 aanwezig, deze hoeven dus niet geselecteerd te worden.

Dus, de items (cat en name) die bij alle producten (product_id) voorkomen moeten geselecteerd worden.

Met welke query krijg ik dit voor elkaar?
Gewijzigd op 17/02/2011 16:12:11 door Roy D
 
Roy D

Roy D

18/02/2011 15:06:40
Quote Anchor link
Ben elders wat in de juiste richting geholpen met de volgende query:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
select t.id, t.product_id, t.cat, t.name, t.value
from (
  select cat, name
  from producten_specs
  group by cat, name
  having count(product_id) = count(distinct product_id)
) p
join producten_specs t on t.cat = p.cat and t.name = p.name


Maar...

Ik gebruik nu deze query voor alle items:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
SELECT DISTINCT cat, name, value
FROM producten_specs
WHERE product_id IN (1,2,3)
ORDER BY cat,name,ABS(value) ASC


Hoe voeg ik deze samen?
 
Roy D

Roy D

01/03/2011 21:29:10
Quote Anchor link
Intussen is de oplossing gevonden:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
                <?php
                $query
= mysql_query("
                select distinct p.cat, p.name, p.value  
                from producten_specs p  
                inner join (  
                  select cat, `name`, count(*) as cnt  
                  from producten_specs  
                  where product_id in ("
.mysql_real_escape_string($product_ids).")  
                  group by cat, `name`  
                  having cnt = "
.mysql_real_escape_string($product_ids_aantal)."  
                ) c on p.cat = c.cat and p.`name` = c.`name`  
                where p.product_id in ("
.mysql_real_escape_string($product_ids).")  
                ORDER BY cat,name,ABS(value) ASC
                "
);
                ?>


Bedankt voor het meedenken!
Gewijzigd op 01/03/2011 21:30:07 door Roy D
 
Tikkes C

Tikkes C

02/03/2011 06:19:20
Quote Anchor link
roy, indien het om een groot aantal records gaat zou ik er aan denken je database te normaliseren (NV3), zo kan je de kolom "cat" apart zetten,...
 



Overzicht Reageren