Page 1 sur 1

Créer un classement groupé

Posté : 20 juil. 2011, 11:30
par VaN
Bonjour,

J'ai une table SQL de participations à un concours, de cette forme (en version simplifiée) :
CREATE TABLE IF NOT EXISTS `participations` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `note` float NOT NULL,
  PRIMARY KEY (`id`),
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=93 ;

INSERT INTO `participations` (`id`, `note`) VALUES
(1, 1),
(2, 4),
(3, 4),
(5, 4),
(86, 10),
(85, 5),
(84, 5),
(83, 4),
(82, 2),
(81, 9),
(80, 1),
(79, 4),
(78, 10),
(77, 8),
(76, 8),
(75, 3),
(74, 0),
(73, 3),
(72, 2),
(71, 0),
(70, 2),
(69, 1),
(68, 8),
(67, 9),
(66, 4),
(65, 4),
(64, 1),
(63, 9),
(62, 1),
(61, 9);
J'aimerai, en utilisant le moins de ressources possibles (ressources SQL, boucles PHP), me retrouver avec un tableau PHP faisant office de classement groupé, par note.

Dans ce tableau, les clés seraient les notes, ordonnées par ordre décroissant (donc de 10 à 0), et contiendrai chacune un tableau des ID correspondants.

Sur les premières lignes de la table SQL, cela donnerait :
Array(
    [10] => Array(
        [0] => 78,
        [1] => 86
    ),
    [9] => Array(
        [0] => 63,
        [1] => 67,
        [2] => 81
    ),
)
etc..

Comment faire cela sans surcharger le serveur de requêtes SQL et de boucles PHP inutiles ?

Re: Créer un classement groupé

Posté : 20 juil. 2011, 12:09
par stealth35

Re: Créer un classement groupé

Posté : 20 juil. 2011, 13:44
par VaN
N'utilisant pas PDO, j'imagine que je vais devoir faire ça à base de boucles PHP, dommage.

Re: Créer un classement groupé

Posté : 20 juil. 2011, 14:30
par stealth35
N'utilisant pas PDO, j'imagine que je vais devoir faire ça à base de boucles PHP, dommage.
pourquoi tu n'utilises pas PDO ?

Re: Créer un classement groupé

Posté : 20 juil. 2011, 15:15
par VaN
Je n'en n'ai pas encore vraiment compris l'utilité.
J'utilise un simple mysql_connect() pour la connection, et j'ai ma propre classe de récupération de données SQL.

Re: Créer un classement groupé

Posté : 20 juil. 2011, 15:20
par stealth35
Je n'en n'ai pas encore vraiment compris l'utilité.
j'ai ma propre classe de récupération de données SQL.
l'utilité c'est pour pas avoir à créer sa propre classe justement ...

Re: Créer un classement groupé

Posté : 20 juil. 2011, 18:49
par Skw33d
et j'ai ma propre classe de récupération de données SQL.
Et d'un point de vue fonctionnalités ta classe est elle aussi bien que PDO ?

Re: Créer un classement groupé

Posté : 22 juil. 2011, 15:43
par VaN
et j'ai ma propre classe de récupération de données SQL.
Et d'un point de vue fonctionnalités ta classe est elle aussi bien que PDO ?
Aucune idée, elle ressemble à ça :
class Sql {
	
	public function __construct($bdd_host = BDD_HOST, $bdd_user = BDD_USER, $bdd_pass = BDD_PASS) {
		
	}
	
	public function connection($bdd_host, $bdd_user, $bdd_pass) {
		$connection = mysql_connect($bdd_host, $bdd_user, $bdd_pass);
		DEFINE('CONNECTION', $connection);
		
	}
	public function select_db($bdd_name = BDD_NAME) {
		mysql_select_db($bdd_name, CONNECTION);
	}
	
	##################################################################
	##																##
	## [F001]	SQL METHODS											##
	##																##
	##################################################################
	// Soumet une requete
	public static function sql_query($sql, $link_identifier = CONNECTION, $debug = false) {
		
		if($debug === true) echo "<p>".$sql."<p>";
		
		$query = mysql_query($sql, $link_identifier) or die(mysql_error());
		return $query;
	}

	// Retourne un tableau de données
	public static function get_array_from_query($sql, $link_identifier = CONNECTION, $debug = false) {
		
		if($debug === true) echo "<p>".$sql."<p>";
		
		$query = self::sql_query($sql, $link_identifier) or die(mysql_error());
		$data = array();
		while($result = mysql_fetch_assoc($query)) {
			$data[] = $result;
		}
		return $data;
	}

	// Retourne une liste d'objets
	public static function get_objects_from_query($sql, $class_name, $link_identifier = CONNECTION, $debug = false) {
		
		if($debug === true) echo "<p>".$sql."<p>";
		
		$query = self::sql_query($sql, $link_identifier) or die(mysql_error());
		$data = array();
		while($result = mysql_fetch_object($query, $class_name)) {
			$data[] = $result;
		}
		return $data;
	}

	// Retourne une ligne de donnees
	public static function get_row_from_query($sql, $link_identifier = CONNECTION, $debug = false) {
		
		if($debug === true) echo "<p>".$sql."<p>";
		
		$query = self::sql_query($sql, $link_identifier) or die(mysql_error());
		$data = array();
		while($result = mysql_fetch_assoc($query)) {
			$data[] = $result;
		}
		
		if(!empty($data[0])) {
			return $data[0];
		}
		else {
			return array();
		}
	}

	// Retourne une valeur unique
	public static function get_value_from_query($sql, $link_identifier = CONNECTION, $debug = false) {
		
		if($debug === true) echo "<p>".$sql."<p>";
		
		$query = self::sql_query($sql, $link_identifier) or die(mysql_error());
		$result = mysql_fetch_array($query);
		return $result[0];
	}

	// Retourne un tableau d'une ligne
	public static function get_field_array_from_query($sql, $link_identifier = CONNECTION, $debug = false) {
		
		if($debug === true) echo "<p>".$sql."<p>";
		
		$query = self::sql_query($sql, $link_identifier) or die(mysql_error());
		
		$results = array();
		
		while($result = mysql_fetch_array($query)) {
		
			if(!empty($result)) {
				$results[] = $result[0];
			}
			
		}

		return $results;
	}
	
}

Re: Créer un classement groupé

Posté : 26 juil. 2011, 11:01
par stealth35
oui donc la meme chose, par contre pour debuggue du mysql c'est pas avec des or die, mais en activant le trace mode
ini_set('mysql.trace_mode', true);
ou alors dans ta classe lancer une ErrorException