redbullmachtfit
Goto Top

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:
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!

Content-ID: 276864

Url: https://administrator.de/contentid/276864

Ausgedruckt am: 22.11.2024 um 10:11 Uhr

ukulele-7
ukulele-7 09.07.2015 um 12:25:05 Uhr
Goto Top
Das ginge in etwa so:
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
Ist viel Code aber alles Copy & Paste. Auf die Tabelle kannst du dann Suchabfragen auf deine Maße machen.
RedBullmachtfit
RedBullmachtfit 10.07.2015 um 09:23:57 Uhr
Goto Top
Super, das klappt soweit! Aber ich bekomme es nicht hin, die Größen zu filtern. Ich bin noch dabei mir SQL beizubringen, aber das ist mir noch zu hoch face-sad

So sieht meine Abfrage aus, aber er erkennt länge, breite usw. nicht. Hilfst du mir auf die Sprünge? Danke!

                      SELECT	a.artikelnummer, a.artikelbez, l.lagerbestand
         
        (   CASE 
			WHEN a.artikelmerkmal_01 = '40' THEN a.artikelinhalt_01   
			WHEN a.artikelmerkmal_02 = '40' THEN a.artikelinhalt_02   
			WHEN a.artikelmerkmal_03 = '40' THEN a.artikelinhalt_03   
			WHEN a.artikelmerkmal_04 = '40' THEN a.artikelinhalt_04   
            WHEN a.artikelmerkmal_05 = '40' THEN a.artikelinhalt_05   
			WHEN a.artikelmerkmal_06 = '40' THEN a.artikelinhalt_06  
            WHEN a.artikelmerkmal_07 = '40' THEN a.artikelinhalt_07   
			WHEN a.artikelmerkmal_08 = '40' THEN a.artikelinhalt_08   
            WHEN a.artikelmerkmal_09 = '40' THEN a.artikelinhalt_09   
			WHEN a.artikelmerkmal_10 = '40' THEN a.artikelinhalt_10   
			ELSE NULL 
			END ) AS laenge, 
            
		(	CASE 
			WHEN a.artikelmerkmal_01 = '41' THEN a.artikelinhalt_01   
			WHEN a.artikelmerkmal_02 = '41' THEN a.artikelinhalt_02   
			WHEN a.artikelmerkmal_03 = '41' THEN a.artikelinhalt_03   
			WHEN a.artikelmerkmal_04 = '41' THEN a.artikelinhalt_04   
            WHEN a.artikelmerkmal_05 = '41' THEN a.artikelinhalt_05   
			WHEN a.artikelmerkmal_06 = '41' THEN a.artikelinhalt_06  
            WHEN a.artikelmerkmal_07 = '41' THEN a.artikelinhalt_07   
			WHEN a.artikelmerkmal_08 = '41' THEN a.artikelinhalt_08   
            WHEN a.artikelmerkmal_09 = '41' THEN a.artikelinhalt_09   
			WHEN a.artikelmerkmal_10 = '41' THEN a.artikelinhalt_10   
			END ) AS breite, 

		(	CASE 
			WHEN a.artikelmerkmal_01 = '42' THEN a.artikelinhalt_01   
			WHEN a.artikelmerkmal_02 = '42' THEN a.artikelinhalt_02   
			WHEN a.artikelmerkmal_03 = '42' THEN a.artikelinhalt_03   
			WHEN a.artikelmerkmal_04 = '42' THEN a.artikelinhalt_04   
            WHEN a.artikelmerkmal_05 = '42' THEN a.artikelinhalt_05   
			WHEN a.artikelmerkmal_06 = '42' THEN a.artikelinhalt_06  
            WHEN a.artikelmerkmal_07 = '42' THEN a.artikelinhalt_07   
			WHEN a.artikelmerkmal_08 = '42' THEN a.artikelinhalt_08   
            WHEN a.artikelmerkmal_09 = '42' THEN a.artikelinhalt_09   
			WHEN a.artikelmerkmal_10 = '42' THEN a.artikelinhalt_10   
			END ) AS hoehe
            
			FROM	artikel a LEFT JOIN lagerbestand l ON (a.artikelid = l.lagerid)
			WHERE	CONVERT(laenge, DECIMAL(8,0)) BETWEEN '120' AND '160' AND CONVERT(breite, DECIMAL(8,0)) BETWEEN '100' AND '260'  
			AND CONVERT(hoehe, DECIMAL(8,0)) BETWEEN '100' AND '350'  
ukulele-7
Lösung ukulele-7 10.07.2015, aktualisiert am 07.09.2015 um 16:24:28 Uhr
Goto Top
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