2017-05-10 1 views
-1

Ich habe drei Tabellenmysql: count und innere Verknüpfung in derselben Abfrage

users, jobs, proposals 

users(id, username, address, email) 

jobs(id, title, description, etc) 

proposals(id, userid, jobid, date) 

Ein Benutzer zu viele Stellen bewerben können und

ein einzelner Auftrag kann von vielen Benutzern

Vorschläge Tabelle angewendet werden speichert Informationen darüber, wer auf welchen Job angewendet wurde

Die obige Abfrage listet alle Jobs auf s vom bestimmten Benutzer angewendet. Jetzt möchte ich für jeden Job zeigen, wie viele Menschen in derselben Abfrage angewendet haben, ist es möglich,

Ich versuchte

select j.*, count(select * from proposals where jobid =j.id) as count from proposals p inner join jobs j on p.jobid = j.id where p.userid=$userid 

auch

select j.*, (select count(*) from proposals where jobid =j.id) as count from proposals p inner join jobs j on p.jobid = j.id where p.userid=$userid 

Ich weiß, dass die oben genannten Abfragen falsch ist, aber diese wird eine Idee geben.

+0

Sie brauchen eine 'GROUP BY' – niceman

+0

@niceman aber ich weiß nicht, wo zu setzen? –

+0

Ihre letzte Abfrage scheint korrekt zu sein, was Sie bekommen können. Funktioniert es nicht? – Blank

Antwort

1

Wenn Sie group by verwenden möchten, auch eine Unterabfrage notwendig ist, versuchen Sie folgendes:

select j.*, t.cnt 
from jobs j 
join proposals p on p.jobid = j.id 
left join (
    select jobid, count(userid) as cnt 
    from proposals 
    group by jobid 
) t on t.jobid = j.id 
where p.userid = $userid 

Hinweis: Diese Abfrage kann nicht eine bessere Leistung als die letzte Abfrage haben.

+0

danke für das Unterrichten mich neue Art –

+0

warum die Unterabfrage notwendig ist? !! – niceman

+0

@niceman Sie sollten herausfinden, was die OP zuerst erhalten möchten. – Blank

1

Ist das nicht group by, was Sie suchen?

Es funktioniert möglicherweise nicht perfekt, da ich nicht die Daten habe, um es zu testen, aber versuchen Sie diesen Pfad!