Top-Themen

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, 2451 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
MySQL - Join
Frage von ThoomaasDatenbanken4 Kommentare

Hallo alle zusammen! Ich habe zwei Tabellen in meiner Datenbank. Die eine beinhaltet Teams und einen Code zum Team ...

Datenbanken
MySQL Abfrage um JOIN erweitern
gelöst Frage von datadexxDatenbanken14 Kommentare

Hallo SQL Experten, ich bräuchte mal wieder eure Hilfe Ich habe folgende Abfrage für eine Statistik welche soweit auch ...

Datenbanken
SQL LEFT JOIN in Spalten
gelöst Frage von StfnCstrDatenbanken5 Kommentare

Hallo, ich sehe mal wieder den Wald vor lauter Bäumen nicht. Ich habe 2 Tabellen Tabelle 1: PK, Vorname, ...

Datenbanken
SQL - JOIN zeigt mehrfaches an
Frage von MiStDatenbanken9 Kommentare

Guten Morgen, ich habe mich frisch mit dem Thema SQL "angefreundet". Jetzt habe ich aber irgendwie ein Problem. Und ...

Neue Wissensbeiträge
Windows 10

Autsch: Microsoft bündelt Windows 10 mit unsicherer Passwort-Manager-App

Tipp von kgborn vor 1 TagWindows 104 Kommentare

Unter Microsofts Windows 10 haben Endbenutzer keine Kontrolle mehr, was Microsoft an Apps auf dem Betriebssystem installiert (die Windows ...

Sicherheits-Tools

Achtung: Sicherheitslücke im FortiClient VPN-Client

Tipp von kgborn vor 1 TagSicherheits-Tools

Ich weiß nicht, wie häufig die NextGeneration Endpoint Protection-Lösung von Fortinet in deutschen Unternehmen eingesetzt wird. An dieser Stelle ...

Internet

USA: Die FCC schaff die Netzneutralität ab

Information von Frank vor 1 TagInternet5 Kommentare

Jetzt beschädigt US-Präsident Donald Trump auch noch das Internet. Der neu eingesetzte FCC-Chef Ajit Pai ist bekannter Gegner einer ...

DSL, VDSL

ALL-BM200VDSL2V - Neues VDSL-Modem mit Vectoring von Allnet

Information von Lochkartenstanzer vor 2 TagenDSL, VDSL2 Kommentare

Moin, Falls jemand eine Alternative zu dem draytek sucht: Gruß lks

Heiß diskutierte Inhalte
Windows Server
KMS Facts for Client configuration
Frage von winlinWindows Server13 Kommentare

Hey Leute, wir haben in unserem Netz nun einen neuen KMS Server. Haben Bestands-VMs die noch nicht aktiviert sind. ...

Windows Server
GPO nur für bestimmte Computer
Frage von Leo-leWindows Server13 Kommentare

Hallo Forum, gern würde ich ein Robocopy script per Bat an eine GPO hängen. Wichtig wäre aber dort der ...

Batch & Shell
Kann man mit einer .txt Datei eine .bat Datei öffnen?
Frage von HelloWorldBatch & Shell13 Kommentare

Wie schon im Titel beschrieben würde ich gerne durch einfaches klicken auf eine Text oder Word Datei eine Batch ...

Router & Routing
OpenWRT bzw. L.E.D.E auf Buffalo WZR-HP-AG300H - update
gelöst Frage von EpigeneseRouter & Routing11 Kommentare

Guten Tag, ich habe auf einem Buffalo WZR-HP-AG300H die alternative Firmware vom L.E.D.E Projekt geflasht. Ich bin es von ...