Produkte nach Größen finden Mysql 5.6
Hallo, ich stehe wieder vor einem Problem und hoffe Ihr könnt mir helfen.
Ich habe eine Tabelle in welcher Artikel und deren Merkmale aufgeführt sind (Länge, Breite, Höhe).
Es gibt für jeden Artikel 10 Merkmalfelder und 10 Inhaltsfelder. Steht in Merkmal #1 die Zahl 40 dann bedeutet es, dass im Inhaltsfeld #1 die Länge des Produkts steht. (Merkmal #5: "41" - Inhaltsfeld #5 "Breite des Artikels" usw.)
Das Problem ist, dass theoretisch in jedem der 10 Merkmalfelder Länge, Breite, Höhe usw. verteilt sein kann und der eigentliche Inhalt im passenden Inhaltsfeld stehen kann.
Nun möchte ich ALLE Artikel mit einer bestimmten Abmessung finden - egal in welchem Merkmalfeld diese steht.
Wie stelle ich das am Besten an?
Meine Lösung funktioniert nur, wenn die Merkmale hintereinander stehen:
Danke euch schonmal!
Ich habe eine Tabelle in welcher Artikel und deren Merkmale aufgeführt sind (Länge, Breite, Höhe).
Es gibt für jeden Artikel 10 Merkmalfelder und 10 Inhaltsfelder. Steht in Merkmal #1 die Zahl 40 dann bedeutet es, dass im Inhaltsfeld #1 die Länge des Produkts steht. (Merkmal #5: "41" - Inhaltsfeld #5 "Breite des Artikels" usw.)
Das Problem ist, dass theoretisch in jedem der 10 Merkmalfelder Länge, Breite, Höhe usw. verteilt sein kann und der eigentliche Inhalt im passenden Inhaltsfeld stehen kann.
Nun möchte ich ALLE Artikel mit einer bestimmten Abmessung finden - egal in welchem Merkmalfeld diese steht.
Wie stelle ich das am Besten an?
Meine Lösung funktioniert nur, wenn die Merkmale hintereinander stehen:
SELECT a.artikelnummer , a.artikelbez
FROM artikel a
WHERE a.artikelmerkmal_01 = '40' AND a.artikelmerkmal_02 = '41' AND a.artikelmerkmal_03 = '42' AND
CONVERT(a.artikelinhalt_01, DECIMAL(8,0)) BETWEEN '300' AND '310' AND
CONVERT(a.artikelinhalt_02, DECIMAL(8,0)) BETWEEN '420' AND '430' AND
CONVERT(a.artikelinhalt_03, DECIMAL(8,0)) BETWEEN '200' AND '210'
Danke euch schonmal!
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 276864
Url: https://administrator.de/contentid/276864
Ausgedruckt am: 22.11.2024 um 10:11 Uhr
3 Kommentare
Neuester Kommentar
Das ginge in etwa so:
Ist viel Code aber alles Copy & Paste. Auf die Tabelle kannst du dann Suchabfragen auf deine Maße machen.
SELECT ( CASE
WHEN a.artikelmerkmal_01 = '40' THEN artikelinhalt_01
WHEN a.artikelmerkmal_02 = '40' THEN artikelinhalt_02
[...]
ELSE NULL
END ) AS breite,
( CASE
[...]
END ) AS höhe
FROM artikel a
Du erstellst im Select Teil erst die Spalten für breite, höhe und länge, auf diese kannst du im WHERE Teil noch nicht zugreifen, da sie dort nicht bekannt sind. Man könnte das jetzt alles nochmal ins WHERE klatschen oder man verschachtelt die Abfrage etwas eleganter, hier mal pseudo Code als Beispiel:
SELECT t.hoehe
FROM (
SELECT convert((CASE WHEN [...] END), DECIMAL(8,0)) AS hoehe
FROM tabelle
) t
WHERE t.hoehe BETWEEN x AND y
SELECT t.hoehe
FROM (
SELECT convert((CASE WHEN [...] END), DECIMAL(8,0)) AS hoehe
FROM tabelle
) t
WHERE t.hoehe BETWEEN x AND y