IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes MySQL Discussion :

regroupement de nom de mon champs mysql


Sujet :

Requêtes MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Février 2008
    Messages
    458
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 458
    Par défaut regroupement de nom de mon champs mysql
    Bonjours,

    je doit regoupé les noms qui sont dans mes champs par exemple
    dans ma table customers mon champs customers_from possède adpipper, adpipper2, THNL084901, THNL56456, THNL_blabla, hello_key_goo_mince, haha_key_goo_hihi, teucha_key_goo_zizi....

    donc moi ce que je veu c'est de prendre tous ces noms de champs et les regrouper ce qui donnera pour adpepper, adpepper2 => adpepper; pour les NTHL.... => NTHL

    et pour les hello_key_goo_mince => key_goo dons moi j'arrive qu'avec 1 avec ce code SELECT IF(customers_from LIKE '%NTHL%','NTHL',customers_from) AS Origin, ...

    mais j'arrive pas à en mettre d'autre à la suite
    et quand je fait SELECT IF(customers_from LIKE '%1st%','1st',customers_from) and IF(customers_from LIKE '%NTHL%','NTHL',customers_from) AS Origin,

    sa marche pas je te montre le code qui marche qu'avec un.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
     
    // REQUETE 1 : chercher les prestataires et les regrouper par les 3 premiere lettres et compter le nombre de voyance gratuite
        $query = "SELECT IF(customers_from LIKE '%1st%','1st',customers_from)  AS Origin,
            COUNT(*) AS effectif_vg
            FROM customers
            WHERE customers_from NOT LIKE '<%'
            " . $condition . "
            GROUP BY Origin ";
        $result_vg = mysql_query($query) ;
     
        while ($row = mysql_fetch_array($result_vg))
    { 
     
        // REQUETE 2 :     REQUETE QUI VA RECUPERER LES DONNES DE VG, NB DE COMMANDES, CA, MMC
                $query_produit =
                        " SELECT
                           COUNT(DISTINCT cu.customers_id) AS effectif, count(co.commandes_status) AS command,
                           AVG(co.commandes_montant) AS Mmc
                            FROM customers cu
                            INNER JOIN commandes co 
                            ON cu.customers_id=co.customers_id
                            WHERE  co.commandes_status='1'
                            and   customers_from LIKE '%{$row['Origin']}%' " . $condition . "
                             ";
     
                            if ($row['Origin'] == '') {
                $query_produit = " SELECT
                           COUNT(DISTINCT cu.customers_id) AS effectif, count(co.commandes_status) AS command,
                           AVG(co.commandes_montant) AS Mmc
                            FROM customers cu
                            INNER JOIN commandes co 
                            ON cu.customers_id=co.customers_id
                            WHERE   co.commandes_status='1'
                            and   customers_from = '' " . $condition . "
                             ";
                                                        }
     
                        $result = mysql_query($query_produit) ;   
     
     
     
        while ($row1 = mysql_fetch_array($result))
        {   
     
    ?>
         <tr>
                <td style="background-color:#CCCCCC;">  </td>
                <td style="text-align:center;"> <?php echo $row['Origin'] ?> </td>

  2. #2
    Membre éclairé
    Inscrit en
    Février 2008
    Messages
    458
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 458
    Par défaut
    es-ce c'est possible ce que je demande ou personne s'interresse a mon problème

  3. #3
    Membre Expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Par défaut
    Citation Envoyé par sinifer Voir le message
    es-ce c'est possible ce que je demande ou personne s'interresse a mon problème
    il est effectivement possible que cela n'intéresse personne.

    Ton problème est assez simple à résoudre il te faut, pour déterminer le contenu de la colonne, soit imbriquer des IF, soit utiliser la syntaxe CASE WHEN THEN ELSE...END
    Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
    articles : Comment émuler un tableau croisé [quasi] dynamique
    et : Une énigme mathématique résolue avec MySQL
    recommande l'utilisation de PDO (PHP5 Data Objects)

  4. #4
    Membre éclairé
    Inscrit en
    Février 2008
    Messages
    458
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 458
    Par défaut
    Merci de ta réponse mais j'ai déjà eseillé d'imbriquer des if comme ceci mais sa marche pas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $query = "SELECT IF(customers_from LIKE '1st%','1st',customers_from) or 
    	IF(customers_from LIKE 'totem%','totem_from',customers_from) AS Origin,
            COUNT(*) AS effectif_vg
    		FROM customers 
    		WHERE customers_from NOT LIKE '<%'
    		" . $condition . "
    		GROUP BY Origin ";
    	$result_vg = mysql_query($query) ;

  5. #5
    Membre éclairé Avatar de juvamine
    Profil pro
    Chef de projet MOA
    Inscrit en
    Mai 2004
    Messages
    414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Mai 2004
    Messages : 414
    Par défaut
    Part de ça...
    modifie la pour tes besoins

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    $query = "SELECT case when customers_from LIKE '1st%' THEN '1st' ELSE customers_from END , 
     CASE WHEN customers_from LIKE 'totem%' THEN 'totem_from' ELSE customers_from END AS Origin,
            COUNT(*) AS effectif_vg
      FROM customers 
      WHERE customers_from NOT LIKE '<%'
      " . $condition . "
      GROUP BY case when customers_from LIKE '1st%' THEN '1st' ELSE customers_from END , 
     CASE WHEN customers_from LIKE 'totem%' THEN 'totem_from' ELSE customers_from END ";
     $result_vg = mysql_query($query) ;
    A+

  6. #6
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 290
    Par défaut
    Citation Envoyé par sinifer Voir le message
    es-ce c'est possible ce que je demande ou personne s'interresse a mon problème
    cf :regles: http://club.developpez.com/regles/#L4.7

    Note en particulier que noyer le code SQL sous du PHP décourage la lecture par les habitués de ce forum, qui concerne MySQL et non PHP... (ou alors il faut aller sur le forum PHP/MySQL).

  7. #7
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 290
    Par défaut
    Citation Envoyé par sinifer Voir le message
    je doit regoupé les noms qui sont dans mes champs par exemple
    dans ma table customers mon champs customers_from possède adpipper, adpipper2, THNL084901, THNL56456, THNL_blabla, hello_key_goo_mince, haha_key_goo_hihi, teucha_key_goo_zizi....

    donc moi ce que je veu c'est de prendre tous ces noms de champs et les regrouper ce qui donnera pour adpepper, adpepper2 => adpepper; pour les NTHL.... => NTHL

    et pour les hello_key_goo_mince => key_goo dons moi j'arrive qu'avec 1 avec ce code SELECT IF(customers_from LIKE '%NTHL%','NTHL',customers_from) AS Origin, ...

    mais j'arrive pas à en mettre d'autre à la suite
    et quand je fait SELECT IF(customers_from LIKE '%1st%','1st',customers_from) and IF(customers_from LIKE '%NTHL%','NTHL',customers_from) AS Origin,
    Pour tes IF, la syntaxe la plus simple est effectivement un CASE WHEN :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT CASE 
      WHEN customers_from LIKE '%1st%' THEN '1st'
      WHEN customers_from LIKE '%NTHL%' THEN 'NTHL'
    ...
      ELSE customers_from
    END AS Origin,
    ...
    Une autre solution, qui comporte le risque de générer des doublons, est de faire une table de correspondance (nommée par exemple Origins) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Origins_name
    -------
    1st
    NTHL
    key_goo 
    etc.
    Ce qui te donne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT COALESCE(O.origins_name, C.customers_from) AS Origin
    FROM customers C
      LEFT JOIN Origins O ON C.customers_from LIKE CONCAT('%', O.origins_name, '%')
    ...
    Mais si tu as un key_goo_1st, ça génèrera un doublon.

  8. #8
    Membre éclairé
    Inscrit en
    Février 2008
    Messages
    458
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 458
    Par défaut
    ok je vous remerci sa marche impécable juste un ptit problème qui faut que je résou car un moment je demande

    'immedieta' et 'fr_solober', 'fr_nolosie' et 'fr_immedieta'
    et sa me fait une erreur avec %immediata% et fr_%

    je vais voir commen tje peu fair en tous cas je vous remerci car là j'ai fai un pas de géant dans ce problème et plus on me conseille et plus j'apprend merci beaucoup.

  9. #9
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 290
    Par défaut
    peux-tu préciser quelle requête tu as adopté (avec le code que tu utilises) et quel est exactement ton problème (doublon, mauvaise catégorisation...) ?

  10. #10
    Membre éclairé
    Inscrit en
    Février 2008
    Messages
    458
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 458
    Par défaut
    j'ai opté pour cette requette là

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    $query = "SELECT CASE 
    					 WHEN customers_from LIKE '1st%' THEN '1st'
    					 WHEN customers_from LIKE 'affi%' THEN 'affiliation'
    					 WHEN customers_from LIKE '%CLASHDEBAT%' THEN 'CLASHDEBAT' 
    					 WHEN customers_from LIKE 'FR_%' THEN 'FR_' 
    					 ELSE customers_from END AS Origin,
            COUNT(*) AS effectif_vg
    		FROM customers 
    		WHERE customers_from NOT LIKE '<%'
    		" . $condition . "
    		GROUP BY case when customers_from LIKE '1st%' THEN '1st'  
     		 WHEN customers_from LIKE 'affi%' THEN 'affiliation'
    		 WHEN customers_from LIKE '%CLASHDEBAT%' THEN 'CLASHDEBAT' 
    		 WHEN customers_from LIKE 'FR_%' THEN 'FR_' ELSE customers_from END 
    		";
    mais mon problème c'est qu'un moment j'ai FR_CLASHDEBAT et truc_CLASHDEBAT_machin

    ce qui fait que dans fr et CLASHDEBAT sa va me fair une erreur

  11. #11
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 290
    Par défaut
    ça ne te fera pas d'erreur, ça le classera dans CLASHDEBAT. Dans un CASE, les WHEN sont présentés par ordre de priorité. Si tu veux qu'il le classe dans FR, il suffit de changer l'ordre de tes WHEN.

Discussions similaires

  1. [Mail] Champ expéditeur prenant le nom de mon domaine
    Par senacle dans le forum Langage
    Réponses: 4
    Dernier message: 24/01/2008, 13h22
  2. trouver le nom d'un champ d'une table mysql
    Par durand2504 dans le forum Requêtes
    Réponses: 4
    Dernier message: 19/03/2006, 00h36
  3. [struts]Nom d'un champ
    Par GreenJay dans le forum Struts 1
    Réponses: 4
    Dernier message: 03/06/2004, 16h50
  4. Paramétrer le nombre de connexion sur mon serveur Mysql
    Par Zerga dans le forum Installation
    Réponses: 2
    Dernier message: 12/12/2003, 19h21
  5. taille max du nom d'un champ
    Par hna dans le forum Paradox
    Réponses: 2
    Dernier message: 28/07/2002, 02h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo