Ciao! Allora, ho ricreato in parte la tua tabella, con qualche campo in meno per semplicità.
Ecco quello che ho io:
codice:
mysql> select * from squadre;
+----+----------+
| id | nome |
+----+----------+
| 5 | squadra5 |
| 4 | squadra4 |
| 3 | squadra3 |
| 2 | squadra2 |
| 1 | squadra1 |
+----+----------+
mysql> select * from calendario;
+----+--------------+-----------------+------------+---------------+
| id | squadra_home | squadra_visitor | point_home | point_visitor |
+----+--------------+-----------------+------------+---------------+
| 1 | 5 | 2 | 5 | 5 |
| 2 | 2 | 5 | 11 | 0 |
| 3 | 2 | 3 | 10 | 2 |
| 4 | 1 | 3 | 8 | 6 |
| 5 | 1 | 2 | 5 | 3 |
+----+--------------+-----------------+------------+---------------+
5 rows in set (0.00 sec)
Quindi in pratica:
squadra 1 -> 2 vittorie
squadra 2 -> 2 vittorie, 1 pareggio, 1 sconfitta
squadra 3 -> 2 sconfitte
squadra 4 -> nulla
squadra 5 -> 1 pareggio, 1 sconfitta
Con un po' di impegno potresti fare tutto con un unica megaquery... per il momento ti scrivo un esempio di sole 3 queries per ottenere i risultati voluti. 3 sono sempre meglio di 141!
Nota che usando la funzione COUNT per calcolare il numero di vittorie/pareggi/sconfitte non c'è bisogno di usare mysql_num_rows. Faccio il count su id che è la chiave primaria (così dovrebbe essere + veloce)
codice:
mysql> SELECT s.nome, count(v.id) AS vittorie
FROM squadre AS s LEFT JOIN
(SELECT id, squadra_home, squadra_visitor, point_home, point_visitor FROM calendario) AS v
ON ((squadra_home = s.id AND point_home>point_visitor)
OR (squadra_visitor = s.id AND point_home<point_visitor))
GROUP BY s.id;
+----------+----------+
| nome | vittorie |
+----------+----------+
| squadra1 | 2 |
| squadra2 | 2 |
| squadra3 | 0 |
| squadra4 | 0 |
| squadra5 | 0 |
+----------+----------+
5 rows in set (0.01 sec)
mysql> SELECT s.nome, count(p.id) AS pareggi
FROM squadre AS s LEFT JOIN
(SELECT id, squadra_home, squadra_visitor, point_home, point_visitor FROM calendario) AS p
ON ((squadra_home = s.id OR squadra_visitor = s.id)
AND point_home=point_visitor)
GROUP BY s.id;
+----------+---------+
| nome | pareggi |
+----------+---------+
| squadra1 | 0 |
| squadra2 | 1 |
| squadra3 | 0 |
| squadra4 | 0 |
| squadra5 | 1 |
+----------+---------+
5 rows in set (0.00 sec)
mysql> SELECT s.nome, count(sc.id) AS sconfitte
FROM squadre AS s LEFT JOIN
(SELECT id, squadra_home, squadra_visitor, point_home, point_visitor FROM calendario) AS sc
ON ((squadra_home = s.id AND point_home<point_visitor)
OR (squadra_visitor = s.id AND point_home>point_visitor))
GROUP BY s.id;
+----------+-----------+
| nome | sconfitte |
+----------+-----------+
| squadra1 | 0 |
| squadra2 | 1 |
| squadra3 | 2 |
| squadra4 | 0 |
| squadra5 | 1 |
+----------+-----------+
5 rows in set (0.00 sec)