2010-11-30 17 views
0

Je ne suis pas dans les jointures MySQL, alors peut-être pourriez-vous me donner un coup de main. J'ai les tableaux suivants:MySQL Question (jointures)

Table a 
Fields ID,name 

Table b 
Fields aID,cID,ID,found 

Table c 
Fields ID,name 

Le résultat que je veux obtenir est la suivante: Je veux que tous les enregistrements où b.found = 1. Parmi ces dossiers, je ne veux pas a.id ou .name, mais je veux le nombre d'enregistrements qui auraient été retournés si je l'aurais voulu. Donc s'il y a cinq enregistrements qui ont b.found = 1 et c.id = (par exemple) 3, alors je veux une valeur retournée de 5, c.id et c.name.

Quelqu'un peut-il faire cela?

En fait, ce que je veux obtenir de la base de données: Une liste de tous les enregistrements dans le tableau C et un nombre d'enregistrements dans le tableau B qui a trouvé = 1 et b.c_id = c.id

+1

Vous voulez c.id, c.name et un compte de la enregistrements correspondant à un? – Orbling

+0

Oui c'est correct – Simon

+0

Je pense que vous voulez regrouper par c.id droit? –

Répondre

2
Table: a 
Fields: ID, name 

Table: b 
Fields: aID, cID, found 

Table: c 
Fields: ID, name 



SELECT c.ID, c.name, COUNT(1) 
FROM b 
JOIN c ON c.ID = b.cID AND b.found=1 
GROUP BY c.ID 
0

SELECT COUNT (*), c.id, c.name FROM a, b, c O a a.id = baid ET c.id = baid ET b.found = 1 ET c.id = idThatIAmSearchingPour

Excuses si je n'ai pas obtenu la syntaxe exacte, mais je crois que c'est la structure de base que vous voulez. La fonction COUNT renvoie le nombre de lignes trouvées par la requête.

-1

SELECT COUNT (*) AS Count, c.id, c.name à partir de b se joindre à un sur a.id = b.a_id OÙ b.found = 1 GROUP BY c.Id; COUNT renvoie le nombre d'enregistrements dans chaque groupe à partir de GROUP BY.

+0

NOT WORKING: SQL ne reconnaît pas les colonnes de la table c – Simon

0

Quelque chose comme:

SELECT count(`c`.*), 
      `c`.`id`, 
      `c`.`name` 
    FROM `b` 
    JOIN `c` 
    ON `c`.`id` = `b`.`c_id` 
WHERE `b.found` = 1 
+0

NOT WORKING: Donne une erreur mysql, (COUNT (c. *) ne fonctionne pas je suppose) – Simon

1
SELECT c.id, c.name, COUNT(*) 
    FROM c 
     INNER JOIN b 
      ON c.id = b.c_id 
       AND b.found = 1 
    GROUP BY c.id, c.name 
+0

Je pense que je suis d'accord avec vous. Je ne suis toujours pas sûr de comprendre les exigences –

0

Je pense que cela fournirait la puissance requise -

select count(*), b.cID, c.name from b 
inner join c on c.id=b.cID and b.found=1 
group by b.cID