MySQL Query mit 2 Where Bedingungen
Luki
- php
Hallo,
ich versuche schon die ganze Zeit ein bestimmtes SELECT zu bekommen und zwar geht es darum, dass ich alle MemberIDs ausgeben möchte, die eine GameID in der Tabelle TableGame UND in der Tabelle SlotGame haben.
$query = 'SELECT mID FROM Game WHERE (gID IN (SELECT gID FROM TableGame)) OR (gID IN (SELECT gID FROM SlotGame))
GROUP BY mID HAVING COUNT (DISTINCT gID)=2';
Allerdings bekomme ich folgenden Fehler:
"You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'DISTINCT gID)=2' at line 2"
Könnt ihr mir sagen, was an der Syntax nicht stimmt oder mir einen Tipp geben, wie ich näher an mein gewünschtes Ziel komme?
Danke schön und Grüße.
Hello,
ich versuche schon die ganze Zeit ein bestimmtes SELECT zu bekommen und zwar geht es darum, dass ich alle MemberIDs ausgeben möchte, die eine GameID in der Tabelle TableGame UND in der Tabelle SlotGame haben.
*Bahnhof*
Es wäre hilfreich, wenn Du uns die Tabellen (die relevanten Spalten) mal nebeneinander zeigen könntest und dann nochmal genau sagst, welche Werte Du am Anfang hast (ich vermute: keine) und welche Spaltenwerte übereinstimmen sollen.
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
Hallo Tom,
danke für deine Antwort. Ich zeige dir mal einfachhaltshalber die Tabellen inklusive der Attribute.
CREATE TABLE Member (
mID CHAR(10) PRIMARY KEY,
mName VARCHAR(64),
joinYear YEAR
);
CREATE TABLE Game (
gID CHAR(12) PRIMARY KEY,
bet INT,
winloss ENUM('win','loss'),
mID CHAR(10),
FOREIGN KEY (mID) REFERENCES Member (mID)
);
CREATE TABLE TableGame (
gID CHAR(12) PRIMARY KEY,
minbet INT,
maxbet INT,
FOREIGN KEY (gID) REFERENCES Game (gID)
);
CREATE TABLE SlotGame (
gID CHAR(12) PRIMARY KEY,
jackpot DECIMAL(10,2),
sID CHAR(5),
FOREIGN KEY (gID) REFERENCES Game (gID),
FOREIGN KEY (sID) REFERENCES Slot (sID)
);
Was ich nun herausfinden möchte ist, welche MemberIDs in TableGame UND in SlotGame gespielt haben. Mein Problem ist, dass ich nicht weiß, wie ich prüfen soll, ob die Game gID in TableGame UND in SlotGame ist.
Danke dir und liebe Grüße
Hello Luki,
BTW: IDs ohne besondere Not als Char-Typ anzulegen, ist unglücklich. Besser sind einfache ordinale Typen, wie Int oder Bigint oder wie das DBMS die auch immer nennt.
Sieht mir noch etwas verknotet aus. So richtig kann ich die Relationen noch nicht nachvollziehen.
Irgendwie erkenn ich nicht, in welchen Spalten in den Tabellen TableGame
und SlotGame
die mID
wieder auftaucht.
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
Hello Luki,
BTW: IDs ohne besondere Not als Char-Typ anzulegen, ist unglücklich. Besser sind einfache ordinale Typen, wie Int oder Bigint oder wie das DBMS die auch immer nennt.
Sieht mir noch etwas verknotet aus. So richtig kann ich die Relationen noch nicht nachvollziehen.
Irgendwie erkenn ich nicht, in welchen Spalten in den Tabellen
TableGame
undSlotGame
diemID
wieder auftaucht.Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
Die mID kommt auch nicht in den Tabellen vor. Das wird doch über die Tabelle game geregelt, wer welches Spiel gespielt hat oder was meinst du? Die Tabellen tablegame und slotgame haben als foreign key den von gID.game.
Liebe Grüße
Hello,
CREATE TABLE Game (
gID CHAR(12) PRIMARY KEY,
bet INT,
winloss ENUM('win','loss'),
mID CHAR(10),
FOREIGN KEY (mID) REFERENCES Member (mID)
);CREATE TABLE TableGame (
gID CHAR(12) PRIMARY KEY,
minbet INT,
maxbet INT,
FOREIGN KEY (gID) REFERENCES Game (gID)
);
CREATE TABLE SlotGame (
gID CHAR(12) PRIMARY KEY,
jackpot DECIMAL(10,2),
sID CHAR(5),
FOREIGN KEY (gID) REFERENCES Game (gID),
FOREIGN KEY (sID) REFERENCES Slot (sID)
);
[/code]Was ich nun herausfinden möchte ist, welche MemberIDs in TableGame UND in SlotGame gespielt haben. Mein Problem ist, dass ich nicht weiß, wie ich prüfen soll, ob die Game gID in TableGame UND in SlotGame ist.
Ich habe Dich so verstanden:
select Game.mID,
from Game, TableGame, Slotgame
where Game.gID = TableGame.gID
or Game.gID = SlotGame.gID;
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
Was ich nun herausfinden möchte ist, welche MemberIDs in TableGame UND in SlotGame gespielt haben. Mein Problem ist, dass ich nicht weiß, wie ich prüfen soll, ob die Game gID in TableGame UND in SlotGame ist.
Ich habe Dich so verstanden:
select Game.mID,
from Game, TableGame, Slotgame
where Game.gID = TableGame.gID
or Game.gID = SlotGame.gID;
Ingrid mal wieder...
select Game.mID,
from Game, TableGame, Slotgame
where Game.gID = TableGame.gID
and Game.gID = SlotGame.gID;
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
Ingrid mal wieder...
select Game.mID,
from Game, TableGame, Slotgame
where Game.gID = TableGame.gID
and Game.gID = SlotGame.gID;
Moment... wer ist Ingrid?
Das Statement liefert mir ein leeres Resultat, weil Game.gID nicht gleichzeitig gleich TableGame.gID und SlotGame.gID sein kann.
Andere Vorschläge?
Hello,
select Game.mID,
from Game, TableGame, Slotgame
where Game.gID = TableGame.gID
and Game.gID = SlotGame.gID;
Das Statement liefert mir ein leeres Resultat, weil Game.gID nicht gleichzeitig gleich TableGame.gID und SlotGame.gID sein kann.
Du solltest uns mal die wichtigsten Geschäftsregeln mitteilen. Dann können wir nachvollziehen, was passieren SOLL. Vielleicht ist das DB-Design ja gar nicht passend für die Aufgabenstellung.
Auch Lehrer machen Fehler.
Das wäre ein Beispiel dafür, wie man das verbal beschreiben könnte.
T_Members -> Stammdaten.
Es werden gelegentlich neue Mitglieder aufgenommen.
Insert hat keinen direkten Einfluss auf die anderen Tabellen
T_Game -> Bewegungsdaten, Kopfdaten für T_TableGame und T_Slotgame.
Neue Spielrunden werden hier eingetragen
die Positionsdaten zum Spiel findet man dann in T_TableGame UND (?) in T_SlotGame
T_TableGame -> Bewegungsdaten, Positionsdaten zu T_Game
T_SlotGame -> Bewegungsdaten, Positionsdaten zu T_Game
Alternativ könntest Du uns auch eine grafische Darstellung der Zusammenhänge liefern
siehe https://de.wikipedia.org/wiki/Entity-Relationship-Modell
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
hi,
Oracle?
Was ich nun herausfinden möchte ist, welche MemberIDs in TableGame UND in SlotGame gespielt haben. Mein Problem ist, dass ich nicht weiß, wie ich prüfen soll, ob die Game gID in TableGame UND in SlotGame ist.
Join die drei Tabellen Game*SlotGame*TableGame über gID. Nimm aus Game die mID mit und joine das mit Member on Member.mID = Game.mID
Hotti
Hi Hotti,
Join die drei Tabellen Game*SlotGame*TableGame über gID. Nimm aus Game die mID mit und joine das mit Member on Member.mID = Game.mID
Das habe ich schon versucht, allerdings bekomme ich ein leeres Result zurück oder mache ich etwas falsch?
$query = 'SELECT m.mID FROM Member m INNER JOIN Game g ON g.mID = m.mID INNER JOIN TableGame tg ON tg.gID = g.gID INNER JOIN
SlotGame sg ON g.gID = sg.gID';
Liebe Grüße
Luki
Mon,
Das habe ich schon versucht, allerdings bekomme ich ein leeres Result zurück oder mache ich etwas falsch?
Beschreib mal bitte Deine Gedanken zum DB-Design (in Worten).
Horst
Beschreib mal bitte Deine Gedanken zum DB-Design (in Worten).
Im Prinzip ist es eine Hausaufgabe, also nicht nicht ich habe es mir ausgedacht, wo man bestimmte select Statements herausfinden muss. Aber es geht darum, dass es eine Art Casino ist und die Member TableGames und Slotgames spielen können. Diese Spiele werden in der Game Tabelle zusammengefasst.
Moin,
Beschreib mal bitte Deine Gedanken zum DB-Design (in Worten).
Im Prinzip ist es eine Hausaufgabe, also nicht nicht ich habe es mir ausgedacht, wo man bestimmte select Statements herausfinden muss. Aber es geht darum, dass es eine Art Casino ist und die Member TableGames und Slotgames spielen können. Diese Spiele werden in der Game Tabelle zusammengefasst.
Wenn Deine Abfrage was Sinnvolles liefern soll, dann ist das Verständnis fürs Design schon wichtig und offengestanden, anhand der Create-Statements verstehe ich auch nicht so recht, was sich der Designer dabei gedacht hat, das geht schon mit der Frage los "TableGames und Slotgames" ODER "TableGames oder Slotgames" ;)
Horst