2016-04-10 7 views
0

Ich habe 2 Tabellen, mit 3. Tabelle verbundenMySQL aus zwei Tabellen auswählen, indem 3. verbunden (mysql Joins)

jobs 
id, name 
--- 
skills 
id, name 
--- 
job_skill 
id, job_id, skill_id 

Jeder Job viele Fähigkeiten hat (so jede Fähigkeit hat viele Jobs).

Frage: Wenn ich n Fähigkeiten gefragt, wie ich den Job auswählen können, dass diese Fähigkeiten?

Zum Beispiel: I Jobs finden wollen, die CSS und JS und PHP Fähigkeiten haben.

Antwort

1

Wenn Sie nur Arbeitsplätze erhalten, die alle drei Fähigkeiten haben Sie so etwas wie diese verwenden können, wo 3 ist Ihr n und die Fähigkeiten sind in der IN-Liste

SELECT COUNT(j.id) as skillcount,j.id,j.name 
FROM skills s 
INNER JOIN job_skill js ON s.id = js.skill_id 
INNER JOIN jobs j ON js.job_id = j.id 
WHERE s.name IN ('CSS','JS','PHP') 
GROUP BY j.id,j.name 
HAVING COUNT(j.id) = 3 

sqlfiddle

+0

Das ist richtig, danke! – MurDaD

0

Hier ist ein Beispiel. Ich habe alle Feld ausgewählt, aber Sie können es zu den Feldern ändern, die Sie sehen möchten.

SELECT 
    s.*, 
    js.*, 
    j.* 
FROM skills s 
LEFT JOIN job_skill js ON s.id = jb.skill_id 
LEFT JOIN jobs j ON j.id = jb.job_id 
WHERE s.name IN ('skill1','skill2','skill3'); 
+1

' jb 'muss' js 'sein, denke ich und' LINKS '=' LINKE VERBINDUNG '? – MurDaD

+0

@MurDaD - JA - ich habe es in der Antwort korrigieren –