WCM - Das österreichische Computer Magazin Forenübersicht
 

Zurück   WCM Forum > Rat & Tat > Programmierung

Programmierung Rat & Tat für Programmierer

Microsoft KARRIERECAMPUS

Antwort
 
Themen-Optionen Ansicht
Alt 28.06.2004, 09:25   #1
T.dot
Master
 
Registriert seit: 13.08.2003
Beiträge: 624


Standard [mysql] umgehen von verschachtelten Selects

Halli Hallo!

Wie ich gestern zu meinem Entsetzen feststellen musste, unterstützt MySQL keine verschachtelten Abfragen. Nachdem ich die aber bis jetzt in diversen Access Projekten verwendet habe und nicht wirklich weiß, wie ich diese nun umgehen soll, bräuchte ich eure Hilfe.

Ich geh in diesem Fall von zwei Tabellen aus, die eine ist eine Liste von Cocktails mit Namen, CocktailID, etc. und die zweite beherbergt die jeweiligen Zutaten für diese Cocktails. In dieser gibt es also eine CocktailID zur Verknüpfung und dann diverse ZutatenIDs. Nun möchte ich auslesen in welchen Cocktail zb die Zutat Rum und Orangensaft vorkommt. Das ganze würde ich so machen:

PHP-Code:
SELECT tblCocktails.C_IDtblCocktails.Cocktailname
FROM tblCocktails 
WHERE tblCocktails
.C_ID IN 
    
(SELECT tblCocktailZutaten.C_ID 
     FROM tblCocktailZutaten 
     WHERE tblCocktailZutaten
.Z_ID=60)
AND 
tblCocktails.C_ID IN 
    
(SELECT tblCocktailZutaten.C_ID 
     FROM tblCocktailZutaten 
     WHERE tblCocktailZutaten
.Z_ID=32
Funkt in Access, aber in MySQL natürlich nicht. Kann ich das ganze nun über irgendwelche Joins oder sonst irgendwie anders lösen ohne PHP basteln zu müssen (so habe ich es momemtan gelöst).

Herzlichsten Dank, Thomas
T.dot ist offline   Mit Zitat antworten
Alt 28.06.2004, 09:59   #2
rollipolli
Veteran
 
Registriert seit: 12.04.2001
Alter: 43
Beiträge: 330


rollipolli eine Nachricht über ICQ schicken
Standard

naja, wenn du SQL in irgendeiner Wirtssprache (PHP, Java was auch immer) benutzt, könntest du die Subselects vorher als eigene Select ausführen, und deren Ergebnis dann im äußeren Select benutzen..

..oder wenn dir MySQL nicht fix vorgesetzt wird, benutze PostgreSQL.
http://www.postgresql.org/
____________________________________
http://vecego.0wnz.at/
rollipolli ist offline   Mit Zitat antworten
Alt 28.06.2004, 10:13   #3
T.dot
Master
 
Registriert seit: 13.08.2003
Beiträge: 624


Standard

@rollipolli
Ja ich verwende PHP als Wirtssprache und habe es derzeit auch so gelöst, das eben zuerst die zwei unterselects ausgeführt werden, ich die werte dann in strings zwischenspeicher und dann die große Abfrage ausführ... hätt halt gern alles in einem

noch möcht ich nicht auf anderen SQL Dialekt umsteigen, aber falls ich mich im Lauf meines Projektes noch öfters ärger werd ichs mir mal ankucken
T.dot ist offline   Mit Zitat antworten
Alt 28.06.2004, 10:29   #4
FordPrefect
Veteran
 
Benutzerbild von FordPrefect
 
Registriert seit: 06.09.2002
Ort: Rottenmann
Alter: 59
Beiträge: 425


FordPrefect eine Nachricht über ICQ schicken
Standard

Natürlich kannst Du das mit Joins lösen. MySQL unterstützt:
[CROSS] JOIN
INNER JOIN
STRAIGHT_JOIN
LEFT JOIN und
LEFT OUTER JOIN

Und wenn Du Dir PHPMyAdmin besorgst kannst Du auch mit Foreign Keys arbeiten.
Weiss jetzt leider die Webseite nicht.
mfg Peter
____________________________________
Im Grunde will der Mensch nur eins:
Spass haben, glücklich sein und die Zeit so fröhlich wie möglich miteinader zu verbringen. Dafür verzichtet er gerne auf alles andere.
---------------------------------------
Unser Motto:
Es ist noch kein Meister vom Himmel gefallen, dafür aber jede Menge Nieten
Admiral James T. Kirk
----------------------------------------
Ich kommuniziere also mach ich mich verdächtig
----------------------------------------
FordPrefect ist offline   Mit Zitat antworten
Alt 28.06.2004, 10:30   #5
wbendl
Master
 
Registriert seit: 22.03.2000
Alter: 66
Beiträge: 550


Standard

Hi!

Ich glaube das geht ganz leicht.

Wenn du mit Access eine Abfrage erstellst, wird das passende SQL-Statement mit JOIN erstellt.

Eventuell notwendige Anpassungen sind leicht händisch durchzuführen.

mfg

WB
wbendl ist offline   Mit Zitat antworten
Alt 28.06.2004, 10:32   #6
FordPrefect
Veteran
 
Benutzerbild von FordPrefect
 
Registriert seit: 06.09.2002
Ort: Rottenmann
Alter: 59
Beiträge: 425


FordPrefect eine Nachricht über ICQ schicken
Standard

So hier ist nun die Adresse
PHPMyAdmin
mfg
Peter
____________________________________
Im Grunde will der Mensch nur eins:
Spass haben, glücklich sein und die Zeit so fröhlich wie möglich miteinader zu verbringen. Dafür verzichtet er gerne auf alles andere.
---------------------------------------
Unser Motto:
Es ist noch kein Meister vom Himmel gefallen, dafür aber jede Menge Nieten
Admiral James T. Kirk
----------------------------------------
Ich kommuniziere also mach ich mich verdächtig
----------------------------------------
FordPrefect ist offline   Mit Zitat antworten
Alt 28.06.2004, 11:09   #7
T.dot
Master
 
Registriert seit: 13.08.2003
Beiträge: 624


Standard

@wbendl
Da hast du schon recht, nur leider ist es in Access ziemlich unmöglich (zumindest hab ich es nicht geschafft) diese Abfrage ohne Eingriff in den SQL Code und innerhalb einer einzigen Abfrage zu erstellen. Sonst hätte ich das schon getan. Leider hab ich in Access bis jetzt auch immer nur Inner Joins, die ich einfach durch Where ersetzen kann gesehen. Falls es doch möglich ist, lass ich mich gerne eines bessern belehren.

@FellnerPeter
Ja, wird mir wohl nichts anderes überbleiben als mich in die Thematik von den diversen Join-Arten einzulesen

mfg Thomas
T.dot ist offline   Mit Zitat antworten
Alt 28.06.2004, 11:13   #8
FordPrefect
Veteran
 
Benutzerbild von FordPrefect
 
Registriert seit: 06.09.2002
Ort: Rottenmann
Alter: 59
Beiträge: 425


FordPrefect eine Nachricht über ICQ schicken
Standard

Zitat:
Original geschrieben von T.dot

@FellnerPeter
Ja, wird mir wohl nichts anderes überbleiben als mich in die Thematik von den diversen Join-Arten einzulesen

mfg Thomas
Oder Du verwendest PHPMyAdmin damit kannst Du auch Abfragen erstellen die dann auf MySQL zugeschnitten sind
mfg
Peter
____________________________________
Im Grunde will der Mensch nur eins:
Spass haben, glücklich sein und die Zeit so fröhlich wie möglich miteinader zu verbringen. Dafür verzichtet er gerne auf alles andere.
---------------------------------------
Unser Motto:
Es ist noch kein Meister vom Himmel gefallen, dafür aber jede Menge Nieten
Admiral James T. Kirk
----------------------------------------
Ich kommuniziere also mach ich mich verdächtig
----------------------------------------
FordPrefect ist offline   Mit Zitat antworten
Alt 28.06.2004, 11:46   #9
T.dot
Master
 
Registriert seit: 13.08.2003
Beiträge: 624


Standard

hmhm...

hab jetzt nur kurz in PHPmyadmin reingeschnüffelt, aber wenn der Abfrageeditor so wie er in der Standardansicht erscheint alles ist, was abfragemässig drin ist hab ich auch keinen Plan wie ich das dort angehen soll, ohne mich mit joins auszukennen...

Inzwischen habe ich mit Hilfe eines ehemaligen Schulkollegens das Problem auf eine andere Weise gelöst:

PHP-Code:
SELECT tblCocktails.C_IDtblCocktails.Cocktailname
FROM tblCocktails 
INNER JOIN tblCocktailZutaten 
ON tblCocktails
.C_ID tblCocktailZutaten.C_ID
WHERE 
(((tblCocktailZutaten.Z_ID)=32 Or (tblCocktailZutaten.Z_ID)=60))
GROUP BY tblCocktails.C_IDtblCocktails.Cocktailname
HAVING 
(((Count(tblCocktails.C_ID))=2)); 
bin zwar nicht sonderlich glücklich damit, aber es funktioniert zumindest...

mfg Thomas
T.dot ist offline   Mit Zitat antworten
Alt 28.06.2004, 12:31   #10
wbendl
Master
 
Registriert seit: 22.03.2000
Alter: 66
Beiträge: 550


Standard

Hi!

Ich denke die Lösung liegt in der Verwendung von LEFT JOIN oder RIGHT JOIN.

Wenn du mir eine Beispiel-DB zur Verfügung stellst, mach ich ein paar Versuche.

Eine Access-DB müsste allerdings im Format von Access 97 sein.
Dazu noch eine möglichst genaue Beschreibung, wie das Ergebnis aussehen soll.

mfg

WB
wbendl ist offline   Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.

Gehe zu


Alle Zeitangaben in WEZ +2. Es ist jetzt 02:24 Uhr.


Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Forum SEO by Zoints
© 2009 FSL Verlag