2017-04-20 3 views
0

Ich habe ein Problem mit diesen Ergebnissen. Ich habe versucht, aber kein Glück.Mysql Abfrage nicht korrekt zurückgegeben

Jobs Tabelle

id, title ... all details 
    1, title1,... 
    2, title2,... 
    3, title3,... 
    4, title4,... 

job_user Tisch

id,id_job,id_user 
1,1,1 
2,2,3 
3,3,3 
4,4,4 

following_job Tisch

id,id_job,id_user 
1, 1, 3 

Also im Grunde Benutzer 3 hat zwei Arbeitsplätze (2,3), und er folgt Job 1 von Benutzer 1. so, wenn ich mich als Benutzer 3 anmelde, möchte ich alle Details Jobs des Benutzers <> 3 (nur die requireme was ich tun muss). Ich würde das Ergebnis

id,id_job,id_user 
    1,1,1 
    4,4,4 

Mein Ziel Ergebnisse erzielen seien:

id,title..., following_id 
     1,title1,...,1 
     4,title4,...,0 

die following_id wird oben als Ergebnis hinzugefügt werden, da Benutzer 3 id_job 1 so seine following_id = 1 sonst = 0. gefolgt und id_job 1,4 wird mit Arbeitsplätzen Tabelle verknüpft Details über sie zu erhalten: Titel ...

ich die Folge/unfollow Job Funktionalität tue

Dank all

+0

Dies scheint ein einfacher Join zwischen allen 3 Tabellen zu sein. Was hast du probiert? – xQbert

+0

@xQbert danke für Ihre Antwort. Ich habe etwas ähnliches wie JNevill Vorschlag versucht, aber in anderer Reihenfolge der Abfrage. Ich werde versuchen, seinem Vorschlag zu folgen, – trinhdh

Antwort

2

So ... es scheint, wie Sie wollen etwas wie:

SELECT 
    jobs.id, 
    jobs.title, 
    jobs...., 
    CASE WHEN following_job.id_user = 3 THEN 1 ELSE 0 END as following_job 
FROM 
    jobs 
    INNER JOIN job_user ON job.id = job_user.id_job 
    LEFT OUTER JOIN JOIN following_job on job.id = following_job.id_job 
WHERE 
    job_user.id_user <> 3; 

alle drei Tabellen nach Ihrem Schema Joining. Filtern über die WHERE-Klausel, um sicherzustellen, dass keine Jobs, die keine Jobs sind, der Benutzer 3 hat. Und dann eine CASE (oder IF()) Anweisung, um den Job zu markieren, gefolgt von Benutzer 3.

+0

Inner Join auf following_job wird alle außer ID_USER 3 zu beseitigen und dann die Where-Klausel beseitigt es richtig, so ... Keine Datensätze zurückgegeben? – xQbert

+0

Ich denke in Left Joins und dann INNER JOINs schreiben, weil ich etwas Besonderes bin. Ich habe es repariert. :/ – JNevill

+0

Ich mag spezielle Leute, die mich zum Lächeln bringen: P – xQbert

Verwandte Themen