Aide MySQL pour regroupement par intervalles

Consultez la formation au référencement naturel Google de WebRankInfo / Ranking Metrics


OJAL
WRInaute accro
WRInaute accro
 
Messages: 1116
Inscription: Jeu Avr 10, 2003 18:34

Aide MySQL pour regroupement par intervalles

Message le Sam Juin 23, 2007 8:58

Bonjour,

Je souhaite trouver la requête SQL qui me permettra d'extraire le nombre d'annonces par intervalles de surfaces avec par exemple des intervalles de surfaces de 0 à 40 puis 40 à 70 puis tout ce qui est sup à 70 par exemple...
Je sais le faire en autant de requêtes que d'intervalles, mais j'aurais besoin de le faire en une seule requête.

Merci par avance pour votre aide ;-)


Bh@Mp0
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 245
Inscription: Mar Jan 18, 2005 19:02

Message le Sam Juin 23, 2007 9:15

Bourrinons !

Code: Tout sélectionner
SELECT COUNT(DISTINCT t1.id) AS countGroup1, COUNT(DISTINCT t2.id) AS countGroup2, COUNT(DISTINCT t3.id) AS countGroup3
FROM myTable t1
LEFT JOIN myTable t2
LEFT JOIN myTable t3
WHERE t1.surface BETWEEN 0 AND 40
AND t2.surface BETWEEN 40 AND 70
AND t3.surface > 70


A tester et à vérifier, car j'ai un gros doute ...


OJAL
WRInaute accro
WRInaute accro
 
Messages: 1116
Inscription: Jeu Avr 10, 2003 18:34

Message le Sam Juin 23, 2007 10:02

Merci Bh@Mp0,

J'ai donné les intervalles pour exemple :oops: En fait j'aurai besoin de beaucoup plus d'intervalles...
Il faut peut être simplement que je fasse une requête par intervalle sans plus me casser la tête avec des between... 10 intervalles, 10 requêtes.


Bh@Mp0
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 245
Inscription: Mar Jan 18, 2005 19:02

Message le Sam Juin 23, 2007 10:51

Euh bah non ... faut surtout que tu construises automatiquement la requête à partir, par exemple, d'un tableau où tu donnes les limites.

Genre :
Code: Tout sélectionner
function buildRequest($myLimits) {

     $selects = "";
     $tables = "";
     $wheres = "";

     for($i=0;$i<count($myLimits);$i++) {
          $selects .= "COUNT(DISTINCT t".$i.".id) AS countGroup".$i.", ";
          $tables .= "myTable t".$i." LEFT JOIN ";
          if($myLimits[$i][0] == null) $wheres .= "t".$i.".surface < ".$myLimits[$i][1]." AND ";
          elseif($myLimits[$i][1] == null) $wheres .= "t".$i.".surface > ".$myLimits[$i][0]." AND ";
          else $wheres .= "t".$i." BETWEEN ".$myLimits[$i][0]." AND ".$myLimits[$i][1]." AND ";
     }

     // on vire le dernier ", "
     $selects = substr($selects, 0, strlen($selects)-2);
     // on vire le dernier " LEFT JOIN "
     $tables = substr($tables, 0, strlen($tables)-11);
     // on vire le dernier " AND "
     $wheres = substr($wheres, 0, strlen($wheres)-5);

     return "SELECT ".$selects." FROM ".$tables." WHERE ".$wheres;
}

// maintenant on construit nos limits
$limits = array(
     array(null,40),
     array(40,70),
     array(70,null),
     array(80,81),
     array(1,100)
);
// et on appelle la fonction qui crée la requête
$request = buildRequest($limits);

// on va l'afficher pour l'instant, afin de tester
print_r($request);


OJAL
WRInaute accro
WRInaute accro
 
Messages: 1116
Inscription: Jeu Avr 10, 2003 18:34

Message le Sam Juin 23, 2007 13:08

Merci ;-)

Je vais essayer de partir de cette trame.
Fabuleux les aides sur WRI ;-)


Formation recommandée sur ce thème :

Formation Référencement naturel Google : apprenez une méthode efficace pour optimiser à fond le référencement naturel dans Google de façon durable... Formation animée par Olivier Duffez et Fabien Facériès, experts en référencement naturel.

Tous les détails sur le site Ranking Metrics : programme, prix, dates et lieux, inscription en ligne.

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités