2 Stimmen

Auswählen, wenn ein Wert vorhanden ist

Zunächst ein Datenbankbeispiel:

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

Ich möchte mit einer Abfrage die folgenden Id's auswählen: 1,2,3,4,7,8

Denn die Katze = algemeen und der Name = Prozessor durch diese Produkte. ID 5,6 sind nur bei Produkt 3 vorhanden.

Es müssen also die Einträge (cat und name) ausgewählt werden, die bei allen Produkten (product_id) vorhanden sind.

Die Datenbank enthält 80.000 Einträge mit einer Vielzahl von verschiedenen Katzen, Namen und Werten.

Ist dies mit einer Abfrage möglich, oder ist ein php erforderlich? Wie mache ich das?

Ich entschuldige mich für das schlechte Englisch.

0voto

RichardTheKiwi Punkte 102469

Ich denke, Sie meinen, ALLE Datensätze anzeigen, in denen die Kombination (Katze, Name) in ALLEN product_ids vorkommt, richtig?

select t.id, t.product_id, t.cat, t.name, t.value
from (
  select cat, name
  from tbl
  group by cat, name
  having count(product_id) = count(distinct product_id)
) p
join tbl t on t.cat = p.cat and t.name = p.name

0voto

Roy Punkte 4024

Das ist schwer zu erklären. Wenn ich die Ergebnisse der Abfrage sehe, weiß ich, ob es das ist, was ich meine.

Ich habe vergessen, die Abfrage zu posten, die ich verwende, um alle Artikel anzuzeigen:

SELECT DISTINCT cat, name, value
    FROM producten_specs 
    WHERE product_id IN (1,2,3) 
    ORDER BY cat,name,ABS(value) ASC

Es ist möglich, diese Anfrage mit der Ihren zu kombinieren.

0voto

Lentonator Punkte 86

Ausgehend von Ihrer Problembeschreibung benötigen Sie eine SQL-Abfrage, die die Datensätze ermittelt, bei denen der Wert von cat ist 'Algemeen' oder der Wert von product_id ist 'Verarbeiter'. Wenn dies der Fall ist, würde ich diese Abfrage verwenden:

SELECT *
  FROM producten_specs AS p
  WHERE p.cat = "Algemeen" OR p.product_id = "Processor"
  ORDER BY p.id

Mir ist aufgefallen, dass diese Frage schon über ein Jahr alt ist. Wenn Sie die gewünschte Antwort auf dieser Website gefunden haben, sollten Sie sie akzeptieren, andernfalls markieren Sie die Frage als geschlossen.

0voto

Roy Punkte 4024
<?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 
"); 
?>

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X