luckyluke
Goto Top

Rat in SQL-Verknüpfung zwischen zwei Tabellen (keine Anfänger-Frage)

Hallo liebe Datenbankanwender!

Infos zu meinem DB-System
phpMyAdmin - 2.11.4, MySQL-Client-Version: 5.0.51a, PHP5.1

Problemstellung
Ich habe eine Datenbankanwendung in PHP geschrieben, in der Produkte verwaltet werden. Soweit alles super.
Wie jeder weiß, enthält jedes Produkt Parameter. Eine Eingabemaske, die ich in PHP geschrieben habe, enthält eine Auflistung von ca. 120 Parametern. Diese sind Kategorisiert und mit Überschriften versehen. Die zugehörige Datenbanktabelle sieht wie folgt aus:

| prd_kategorie | para_id | parameter | header |

In der Eingabemaske wird per Checkbox der jeweilige Parameter dem Produkt zugewiesen und in folgender Verwaltungstabelle unter para_verschieben abgespeichert:

| prdkind_id | para_id | parakat_id | prdzusatzoptionwert | para_verschieben |

Soweit auch so gut.
Damit ich später evtl. Parameter bearbeiten kann, sprich hinzufügen oder entfernen per Checkbox, sind beide Tabellen mit einer WHERE-Bedingung verknüpft:

SELECT PRODVER.prdkind_id, PRODVER.para_id, PRODVER.parakat_id, PRODVER.prdzusatzoptionwert, PRODVER.para_verschieben, 
PARA.para_id, PARA.prd_kategorie, PARA.parameter, PARA.header, KAT.parakat_id
FROM produkt_verwaltung PRODVER, parakat KAT, parameter PARA
WHERE PRODVER.parakat_id = KAT.parakat_id
AND PRODVER.para_id = PARA.para_id
AND PARA.prd_kategorie = KAT.parakat_id

Und hier kommt auch mein Problem, an dem ich mir etwas die Zähne verbeiße. Die Verknüpfung funktioniert richtig, sprich die Zuweisung stimmt. DOCH: Dem User werden nach Auswahl des Produkts mit vorhandener Auswahl, nur die Parameter angezeigt, die gecheckt sind. Logisch, weil in der Verwaltungstabelle auch nur die IDs der Parameter stehen, die vergeben wurden.
Frage: Wie bekomme ich es hin, dass alle gesamten Parameter aus der Parameter-tabelle und die vergebenen Parameter aus der Verwaltungs-Tabelle (Checkbox wird aktiv gesetzt) angezeigt werden? Ist in diesem Fall eine WHERE-Verknüpfung nicht die richtige?

Über eine Anregung wäre ich euch dankbar.

Gruß, Lucky.

Content-Key: 97586

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

Printed on: April 20, 2024 at 06:04 o'clock

Member: RDiller
RDiller Sep 23, 2008 at 09:12:45 (UTC)
Goto Top
Versuchs doch mal mit join, z.B.

FROM (produkt_verwaltung left join PRODVER.parakat_id = KAT.parakat_id ) .......

Gruß

Ralf
Member: LuckyLuke
LuckyLuke Sep 23, 2008 at 10:18:31 (UTC)
Goto Top
Hey Ralf!!!!

Du warst der rechte Mann zur rechten Stelle, danke!!!
Mit dem LEFT JOIN ... ON wird mein Problem gelöst. Danke für deine Anregung!!!

Hier für die Lösung:

SELECT PARA.para_id, PARA.prd_kategorie
FROM dev_parameter PARA
LEFT JOIN dev_zusatzoption_verwaltung VERW ON PARA.prd_kategorie = VERW.parakat_id
AND PARA.para_id = VERW.para_id

Gruß, LuckyLuke
Member: LuckyLuke
LuckyLuke Sep 25, 2008 at 09:36:05 (UTC)
Goto Top
UPDATE
Eine Macke hat noch mein Skript, dieser Bug bzw. Folge vom LEFT-JOIN ist mir im Nachhinein aufgefallen.

Meine Parameter, die gechecked sind, werden bei einem Produkt, dass neu angelegt wurde, nur mit den Parametern angezeigt, die noch unchecked sind.
Trotz ID-Abfrage des jeweiligen Produktes, ist die Ausgabe immer noch verkehrt.

Ist in diesem Fall ein Sub-Select notwendig?

Gruß, Lucky.