Hola Swivel:
En primer lugar, NO DEBES PONER CODIGO PHP en este foro, pues es exclusivo se MySQL. Si el problema es con lenguaje de programación, entonces puedes publicar tu pregunta en el foro dedicado a PHP, ojo para la próxima.
Segundo, no sé si entendí correctamente qué es lo que necesitas, pero hace tiempo hice algo que creo que te puede servir.
Código MySQL:
Ver originalQuery OK, 0 rows affected (0.27 sec)
-> (1, 'uno'),(2, 'dos'),(3, 'tres'),(4, 'cuatro');
Query OK, 4 rows affected (0.06 sec)
+------+--------+
| id | nombre |
+------+--------+
| 1 | uno |
| 2 | dos |
| 3 | tres |
| 4 | cuatro |
+------+--------+
Query OK, 0 rows affected (0.11 sec)
-> (1, 1, 'S'),(2, 1, 'N'),(3, 1, 'N'),(4, 1, 'S'),(5, 2, 'S'),(6, 2, 'N'),
-> (7, 3, 'N'),(8, 3, 'N'),(9, 3, 'S'),(10, 3, 'N'),(11, 4, 'N'),(12, 4, 'S'),
-> (13, 4, 'N'),(14, 5, 'S'),(15, 5, 'S');
Query OK, 15 rows affected (0.03 sec)
+------+-------------+------+
| id | id_articulo | voto |
+------+-------------+------+
| 1 | 1 | S |
| 2 | 1 | N |
| 3 | 1 | N |
| 4 | 1 | S |
| 5 | 2 | S |
| 6 | 2 | N |
| 7 | 3 | N |
| 8 | 3 | N |
| 9 | 3 | S |
| 10 | 3 | N |
| 11 | 4 | N |
| 12 | 4 | S |
| 13 | 4 | N |
| 14 | 5 | S |
| 15 | 5 | S |
+------+-------------+------+
15 rows
in set (0.00 sec
)
+-------------+----------+----------+----------------+
| id_articulo | total_si | total_no | votacion_total |
+-------------+----------+----------+----------------+
| 5 | 2 | 0 | 2 |
| 1 | 2 | 2 | 0 |
| 2 | 1 | 1 | 0 |
| 4 | 1 | 2 | -1 |
| 3 | 1 | 3 | -2 |
+-------------+----------+----------+----------------+
Si observas para cada votación positiva (S) se le otorga un punto, para cada votación negativa se le quita un punto. de tal manera que la que tenga mejor diferencia se coloca en primer lugar, aquí no importa el numero de votos, por ejemplo si hubiera un artivulo con 1000 votos positivos y 1000 votos negativos quedaría por debajo algún registro con 1 voto positivo y 0 votos negativos.
Dale un vistazo para ver si te sirve el código
Saludos
Leo.