2012-05-24 4 views
0

J'ai trois tables.Requête mysql pour joindre trois tables

demandes - request_id, request_message, requester_id

  • demandeurs
  • requesters_id, requesters_name
  • réponses
  • response_id, request_id, response_me Ssage

Je veux chercher Tous les champs de demandes, requesters_name de pour lesquels les demandeurs requester_id est dans le tableau des demandes et compte des réponses pour request_id de la table réponses.

aidez-moi s'il vous plaît.

Merci

Répondre

0
SELECT requests.*,requesters.requesters_name,count(1) AS c FROM requests 
LEFT JOIN requesters ON requesters.requester_id = request.requester_id 
LEFT JOIN responses ON responses.request_id = requests.request_id 
GROUP BY requests.request_id 
+0

LEFT JOIN est lent. Cela fonctionnera toujours avec un JOIN régulier – Cfreak

+0

Avec Regular JOIN, si pour une demande particulière il n'y a pas de réponse, il ne montrera pas cette ligne. mais avec left JOIN, il montrera cette ligne avec count = 0; –

+0

S'il y a un demandeur pour chaque requête, les 'INNER JOIN requesters' peuvent être utilisés. – vearutop

0

Je reçois le compte d'un sous-select et juste joindre les deux autres tables avec une jointure normale

SELECT r.*, rn.requesters_name, 
    (SELECT COUNT(response_id) 
     FROM responses rp WHERE r.request_id=rp.request_id) 
    AS response_count 
FROM requests r JOIN requester rn ON r.requesters_id=rn.requesters_id 
+0

dans la deuxième réponse à cette question, nous peut éviter la sous-requête –

+0

LEFT JOIN et GROUP sont plus lents – Cfreak