2016-05-31 13 views
0

Sorry, wenn diese Frage seltsam erscheinen mag, aber ich versuche INNER JOIN einige Tabellen in SQL zu verbinden und ich kann es nicht richtig machen. Ich bin neu hier, also bitte, wenn Sie erklären wollen, was ich falsch mache ... ich würde es wirklich schätzen.MySQL INNER JOIN 3 verschiedene Tabellen mit WHERE

Grundsätzlich, was ich versuche zu tun, ist die folgenden Tabellen zu verbinden: Meetings, Benutzer und Service. Benutzer können Moderatoren oder Administratoren sein und diese Informationen werden in der Einstellungsspalte definiert. Ich möchte INNER JOIN moderator_id mit users.id WHERE users.settings = 'Moderator' und auch INNER JOIN admin_id mit users.id WHERE users.settings = 'admin'.

hoffe, euch zu verstehen, was ich :)

Dank zu tun versuche!

SELECT meetings.* 
    , users.id 
    , users.name 
    , users.settings 
    , services.id 
    , services.service_name 
    , services.price 
    FROM meetings 
    JOIN users 
    ON meetings.moderator_id = users.id 
WHERE users.settings = 'moderator' 
    JOIN users 
    ON meetings.admin_id = users.id 
WHERE users.settings = 'admin' 
    JOIN services 
    ON meetings.service_id = services.id 
ORDER 
    BY meetings.date ASC 
+0

Ihre Anfrage sehr schwierig ist, zu lesen, fügen Sie es geteilt mit Zeilenumbrüchen .. –

+0

es ein Tippfehler war, war es meetings.date –

Antwort

-1

ich die Antwort gefunden, indem einige Ihrer Vorschläge kombinieren! Es scheint jetzt gut zu funktionieren, also vielen Dank für eure Hilfe!

SELECT meetings.*, 
    mods.id, 
    mods.name as mods_name, 
    mods.settings, 
    admins.id, 
    admins.name as admins_name, 
    admins.settings, 
    services.id, 
    services.service_name, 
    services.price 

FROM meetings 

INNER JOIN users as mods ON meetings.moderator_id = mods.id 
INNER JOIN users as admins ON meetings.admin_id = admins.id 
INNER JOIN services ON meetings.service_id = services.id 

WHERE mods.settings = 'moderator' AND admins.settings = 'admin' 
ORDER BY meetings.date ASC 
+0

OK, jetzt scheint es eine wörtliche Kopie meiner Antwort zu sein. Was ist neu hier? – Strawberry

+0

@Strawberry, ich bin überhaupt nicht verwirrt. Mein Tisch wurde am Anfang "Termine" genannt, dann habe ich ihn in "Meetings" umbenannt. Wie auch immer, der Code funktioniert und das Problem ist gelöst. Danke für Ihre Hilfe. –

0
SELECT meetings.*, users.id, users.name, users.settings, services.id, services.service_name, services.price 
FROM meetings 

INNER JOIN users as mods ON meetings.moderator_id = mods.id 
INNER JOIN users as adms ON meetings.admin_id = adms.id 
INNER JOIN services ON meetings.service_id = services.id 

WHERE adms.users.settings = 'admin' AND mods.users.settings = 'moderator' 
ORDER BY appointments.date ASC 

Ich denke, Sie müssen die Benutzer-Instanz für Administratoren und moderatores angeben, legen Sie dann die, wo nach dem beitritt. Versuchen Sie diese Abfrage und sagen Sie mir, ob es funktioniert hat.

+0

Problem ... MySQL sagte: Dokumentation # 1051 - Unbekannte Tabelle ' Meetings ' Das ist seltsam, da die Tabelle existiert und ich Abfragen darauf ausführen kann. –

+0

Ich werde bearbeiten und dann versuchen Sie es, es war etwas falsch mit der "FROM" -Klausel, versuchen Sie es jetzt –

+0

Danke für Ihre Hilfe, aber es funktioniert immer noch nicht. Nun sagt es, dass das users.id Feld nicht existiert ... MySQL sagte: Dokumentation # 1054 - Unbekannte Spalte 'users.id' in 'Feldliste' –

0

Die Syntax für SELECT ist:

SELECT <fields> 
FROM <table> 
JOIN <table> ON <condition> 
JOIN <table> ON <condition> 
... 
WHERE <condition> AND <condition> AND ... 
ORDER BY <column>, <column>, ... 

heißt Sie Liste alle Tabellen beteiligt, gefolgt von den Bedingungen. Das ist die allgemeine Struktur für eine SQL-Abfrage, also fühlen Sie sich frei, es zu merken :). Bitte beachten Sie auch, dass dies natürlich extrem vereinfacht ist, da ist noch viel mehr. (Z. B. OR statt AND in der WHERE-Klausel, aber das ist eine andere Geschichte.) Viel Glück.

Edit: Wenn Sie eine Tabelle alias, zB "FROM Tabellenname AS newtablename", sollten Sie den Alias, newtablename, für Bedingungen in WHERE, Spalten in SELECT, etc. Ansonsten erhalten Sie Nachrichten über Dinge, die nicht gefunden werden können . Sie benennen die Tabelle für die Dauer der Abfrage um und werfen den alten Namen weg.

0

Z. B .:

SELECT m.* 
    , mods.name mod_name 
    , admins.name admin_name 
    , s.service_name 
    , s.price 
    FROM meetings m 
    JOIN users mods 
    ON mods.id = m.moderator_id 
    JOIN users admins 
    ON admins.id = m.admin_id 
    JOIN services s 
    ON s.id = m.service_id 
WHERE mods.settings = 'moderator' 
    AND admins.settings = 'admin'; 

... oder, was wahrscheinlicher ist ...

SELECT m.* 
    , mods.name mod_name 
    , admins.name admin_name 
    , s.service_name 
    , s.price 
    FROM meetings m 
    LEFT 
    JOIN users mods 
    ON mods.id = m.moderator_id 
    AND mods.settings = 'moderator' 
    LEFT 
    JOIN users admins 
    ON admins.id = m.admin_id 
    AND admins.settings = 'admin' 
    JOIN services s 
    ON s.id = m.service_id; 
+0

funktioniert nicht. Unbekannte Besprechungstabelle –