2011-01-29 4 views
1

J'ai un problème pour essayer d'extraire des données d'une table.PHP/MySQL Problèmes avec plusieurs instructions select dans une requête

Il contient les résultats des appareils, et j'essaie de l'interroger pour afficher une page de statistiques affichant les joueurs avec le ratio de gains le plus élevé.

Les champs sont les suivants:

  • id (id unique pour chaque match)
  • fid (id de fixation, comme un appareil peut avoir jusqu'à 13 matchs)
  • hpid (maison d'identification du joueur)
  • HSCORE (score de joueur à domicile)
  • apid (loin id joueur)
  • Ascore (loin score de joueur)

joueur ids peuvent apparaître dans la maison ou à l'extérieur des champs, alors je dois obtenir les statistiques pour les deux champs

Ainsi, par exemple:

id fid hpid hscore apid ascore 
----------------------------------- 
1 1 1  1  2  0 
2 1 13 0  4  1 
3 1 5  1  6  0 
4 1 7  0  8  1 
5 1 9  1  10 0 
6 2 11 0  1  1 

Et la requête, je l'ai donc fonctionne bien bien pour obtenir l'info des joueurs à domicile, mais elle n'évalue pas les joueurs à l'extérieur en même temps.

Heres mon code:

$sql = mysql_query("SELECT hpid, SUM(hscore) AS won, COUNT(hpid) 
         FROM tbl_matches 
        GROUP BY hpid 
        ORDER BY won DESC"); 
while ($row = mysql_fetch_array($sql)) { 
    echo $row[hpid]." played: ".$row['COUNT(hpid)']." won: ".$row[won]."<br />"; 
} 

Ce que je veux faire est d'utiliser une autre séance d'entraînement de sélection pour les statistiques à l'extérieur, puis les ajouter sur les statistiques de la maison.

Répondre

0

Vous pouvez essayer de les ajouter dans l'instruction select en utilisant un UNION ALL puis Agregate résultats:

SELECT Id,SUM(Score) Score,SUM(Played) Played 
from  
    (SELECT hpid Id,SUM(hscore) Score,COUNT(*) Played 
    FROM tbl_matches 
    GROUP BY hpid 
    UNION ALL 
    SELECT apid,SUM(ascore),COUNT(*) 
    FROM tbl_matches 
    GROUP BY apid)X 
group by Id 
order by Score desc 
+0

Vous l'avez! UNION TOUS à la rescousse - merci pour votre aide !! –

0

Ce n'est pas tout à fait clair ce que vous voulez faire, alors il y a plusieurs réponses possibles. Tout d'abord, si tout ce que vous voulez est d'imprimer les statistiques à l'extérieur après les statistiques de la maison, vous pouvez simplement dupliquer tout le code que vous avez posté sauf changer "hscore" et "hpid" en "ascore" et "apid".

Si ce que vous voulez réellement, c'est de faire la somme des scores à la maison et à l'extérieur pour chaque joueur, alors vous avez plusieurs choix. L'élément clé est que pour un joueur en particulier, vous ne vous souciez pas vraiment du fait qu'il soit le joueur à la maison ou le joueur à l'extérieur, juste qu'il a joué. Donc, vous pouvez essayer cette requête à la place:

SELECT pid, SUM(score) AS won, COUNT(pid) 
       FROM (
        SELECT hpid AS pid, hscore AS score FROM tbl_matches 
        UNION 
        SELECT apid AS pid, ascore AS score FROM tbl_matches 
      ) tbl_matches_union 
       GROUP BY pid 
       ORDER BY won DESC 
Questions connexes