Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

Mysql - abhängige Joins

Frage Entwicklung Datenbanken

Mitglied: pooleleven

pooleleven (Level 1) - Jetzt verbinden

13.10.2010 um 15:05 Uhr, 2448 Aufrufe, 5 Kommentare

Hallo Forum,

ich möchte folgende Aufgabe lösen:

Produkten werden Produkttexte (sprachabhängig) mitgegeben. Jetzt möchte ich aber die Produkt-Texte noch zusätzlich in Varianten einteilen.
Dabei gilt: Jedes Produkt (IMMER) in PRODUKTTAB hat einen DatenSatz in PRODUKTTEXTTAB mit variante_id=0. Jetzt kann es aber vorkommen, dass für manche Produkte in PRODUKTTAB neben dem Datensatz in PRODUKTTEXTTAB mit variante_id=0 auch noch ein Weiterer mit variante_id=2 vorhanden ist. Es stehen dann also 2 Datensätze (hinsichtlich Variante) in PRODUKTTEXTTAB pro Datensatz von PRODUKTTAB zur Verfügung. Wenn eine Variante größer 0 (z.B. 2) zur Verfügung steht, dann soll diese verwendet werden. ... ansonsten die Variante 0.

ich habe (als Beispiel) ein Produkt-Tabelle:

PRODUKTTAB mit den Spalten
id_produkt
hersteller_id

und dazu gibt es eine Produkt-Texte-Tabelle mit "Varianten":

PRODUKTTEXTTAB mit den Spalten
id_produkttext
produkt_id
sprach_id
variante_id
produkt_bezeichnung
produkt_beschreibung

OHNE VARIANTEN habe ich da ein einfaches Statement (sprach_id wird von aussen bestimmt)

Code:
select * PRODUKTTAB
left join PRODUKTTEXTTAB on PRODUKTTEXTTAB.produkt_id = PRODUKTTAB.id_produkt and PRODUKTTEXTTAB.sprach_id = $var_irgendeinesprach_id
group by PRODUKTTAB.produkt
... jetzt soll es aber mehrere Textvarianten geben. z.B. die Varianten 0 und 2. Wobei die Variante IMMER Texte enthält und die restlichen Varianten eventuell keine.

Code:
select * PRODUKTTAB
left join PRODUKTTEXTTAB on PRODUKTTEXTTAB.produkt_id = PRODUKTTAB.id_produkt and PRODUKTTEXTTAB.sprach_id = $var_irgendeinesprach_id and PRODUKTTEXTTAB.variante_id = $var_variante_id
group by PRODUKTTAB.produkt
Wie bekomme ich es hin, dass, wenn es z.B. für die Text-Variante 2 ($var_variante_id=2) keinen Eintrag gibt, das Statement auf den Eintrag mit der Variante 0 ($var_variante_id=0) zurückgreift?

Ich weiss, dass es mit CASE irgendwie geht ... aber ich habe keine ahnung, wie ich das mit JOIN "mischen"/verwenden kann.

Vielen Dank für einen Ansatz.
Mitglied: Netzfetzer
13.10.2010 um 16:13 Uhr
Hi,

verstehe ich das richtig?! Du willst aus PRODUKTTAB die id_produkt und aus der PRODUKTTEXTTAB den id_produkttext mit der höchsten variante_id...

select
PRODUKTTAB.id_produkt
max(PRODUKTTEXTTAB.variante_id)
from
PRODUKTTAB left join PRODUKTTEXTTAB on PRODUKTTAB .id_produkt = PRODUKTTEXTTAB.produkt_id
group by PRODUKTTAB.id_produkt

Oder willst du die PRODUKTTEXTTAB.variante_id mit einem Parameterwert vorbelegen und diesen anzeigen -> bzw. wenn nicht vorhanden den nächst kleineren???

Gruß Netzfetzer
Bitte warten ..
Mitglied: pooleleven
13.10.2010 um 16:23 Uhr
Vielen Dank, erst mal:

wenn nicht vorhanden den nächst kleineren ... ist die richtige Vermutung. wenn es zum Produkt keinen text der variante 2 (oder nicht 0) gibt, dann soll der text der variante 0 genommen werden.

Leichte Verzweiflung ...
Bitte warten ..
Mitglied: Netzfetzer
13.10.2010 um 16:30 Uhr
select
PRODUKTTAB.id_produkt
max(PRODUKTTEXTTAB.variante_id)
from
PRODUKTTAB left join PRODUKTTEXTTAB on PRODUKTTAB .id_produkt = PRODUKTTEXTTAB.produkt_id
where
PRODUKTTEXTTAB.variante_id <= $var_variante_id
group by PRODUKTTAB.id_produkt

Im Prinzip will ich mit dem Statement erreichen, dass SQL alle Varianten ausliest, die kleiner/gleich deiner Suchbedingung sind (zB variante = 2) und davon den maximalen Wert nimmt...

Also deine eingabe ist du willst die Variante 2:
- gibt es die Var. 0 und die Var.2 sollte das Statement 2 liefern, da dies der max-Wert ist
- gibt es nur die Var. 0 ist der max-Wert demenstprechend 0

Hilft dir das schon weiter?

Gruß Netzfetzer
Bitte warten ..
Mitglied: pooleleven
13.10.2010 um 16:43 Uhr
... oh da habe ich mich wohl unklar ausgedrückt, sorry.

Praktisches Bespiel:

Produkt:
Hagebuttentee mit der produkt_id=3

Produkttexte:
Variante0:
produkt_bezeichnung: hagebuttentee
produkt_beschreibung: hagebuttentee tut gut

Variante2:
produkt_bezeichnung: Tee von der Hagebutte
produkt_beschreibung: hagebuttentee schmeckt nicht gut

Produkt:
Schokolade mit der produkt_id=5

Produkttexte:
Variante0:
produkt_bezeichnung: Schokolade
produkt_beschreibung: Diese Schokolade ist die beste

Variante2:
--> hat dieses Produkt nicht

wenn ich dem statement mitgebe, dass es variante2 arbeiten soll (Auflistung der Produkte mit texten der Variante2), dann ermittelt es beim Hagebuttentee die Bezeichnung: Tee von der Hagebutte und bei der Schokolade, obwohl keine Variante2 vorhanden: Schokolade, also die Bezeichnung der Variante0 ... das wäre das Ziel.
Bitte warten ..
Mitglied: Netzfetzer
14.10.2010 um 11:08 Uhr
select
PRODUKTTAB.id_produkt,
max(PRODUKTTEXTTAB.variante_id),
PRODUKTTEXTTAB.bezeichnung
from
PRODUKTTAB left join PRODUKTTEXTTAB on PRODUKTTAB .id_produkt = PRODUKTTEXTTAB.produkt_id
where
PRODUKTTEXTTAB.variante_id <= $var_variante_id and
PRODUKTTEXTTAB.bezeichnung is not null
group by PRODUKTTAB.id_produkt, PRODUKTTEXTTAB.bezeichnung

also als einschränkung die gesuchte variante <= deiner suchbedingung ist aber gleichzeitig auch die bezeichnung gefüllt ist...

Gruß Netzfetzer
Bitte warten ..
Ähnliche Inhalte
Datenbanken
gelöst MySQL Abfrage um JOIN erweitern (14)

Frage von datadexx zum Thema Datenbanken ...

Datenbanken
gelöst MySQL - Feld aus anderer Tabelle hinzusummieren? (5)

Frage von 1410640014 zum Thema Datenbanken ...

Hyper-V
gelöst Hyper-V Host Domain Join (6)

Frage von Sunny89 zum Thema Hyper-V ...

Datenbanken
SQL - Mehrere Tabellen über JOINS verketten (1)

Frage von Gwahlers zum Thema Datenbanken ...

Neue Wissensbeiträge
Sicherheits-Tools

Trendmicro OSCE und das Fall Creators Update Win10 RS3

(3)

Information von Henere zum Thema Sicherheits-Tools ...

Microsoft Office

Text in Zahlen umwandeln

Tipp von logische zum Thema Microsoft Office ...

Erkennung und -Abwehr

Infineon TPMs unsicher! Bitlocker ggf. angreifbar

(4)

Information von Lochkartenstanzer zum Thema Erkennung und -Abwehr ...

Firewall

PfSense Repository für Version 2.3.x

(6)

Information von Dobby zum Thema Firewall ...

Heiß diskutierte Inhalte
Microsoft Office
ICH BIN AM ENDE MEINES IT-WISSENS ANGELANGT!!!! (38)

Frage von 134537 zum Thema Microsoft Office ...

Windows Server
gelöst Gruppenrichtlinie greift nicht zu! (23)

Frage von Syosse zum Thema Windows Server ...

Hosting & Housing
Mailserver Software Empfehlungen (21)

Frage von sunics zum Thema Hosting & Housing ...