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

PHP & Base de données Discussion :

Résumer plusieurs lignes en une seule


Sujet :

PHP & Base de données

  1. #1
    Membre régulier
    Inscrit en
    Juillet 2006
    Messages
    232
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations forums :
    Inscription : Juillet 2006
    Messages : 232
    Points : 79
    Points
    79
    Par défaut Résumer plusieurs lignes en une seule
    Bonjour,

    J'ai une table qui contient 4 champs ;
    index
    p1
    p2
    p3

    Mon objectif est de regrouper au mieux pour avoir l'information avec le moins de lignes possibles.

    Voici un exemple
    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
    1201	0,802	0,05	0,07
    1202	0,802	0,05	0,07
    1203	0,802	0,05	0,07
    1204	0,052	0,035	0,076
    1205	0,802	0,05	0,07
    1206	0,802	0,05	0,07
    1207	0,802	0,05	0,07
    1208	0,802	0,05	0,07
    1209	0,802	0,05	0,07
    1224	0,802	0,05	0,07
    1225	0,802	0,05	0,07
    1226	0,052	0,035	0,076
    1228	0,802	0,05	0,07
    1229	0,802	0,05	0,07
    1231	0,802	0,05	0,07
    1234	0,802	0,05	0,07
    1236	0,052	1	0,076
    1239	0,802	0,05	0,07
    1240	0,802	0,05	0,07
    1242	0,9653	0,398	0,66
    1246	0,823729	0,8495	0,885
    1248	0,802	0,05	0,07
    1249	0,052	0,035	0,076
    1250	0,052	0,035	0,076
    1251	0,802	0,05	0,07
    1252	0,802	0,05	0,07
    1253	0,802	0,05	0,07
    1254	0,802	0,05	0,07
    1256	0,802	0,05	0,07
    La série 120 serait donc remplacée par les 2 lignes suivantes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    120	0,802	0,05	0,07
    1204	0,052	0,035	0,076
    La série 122 serait donc remplacée par les 2 lignes suivantes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    122	0,802	0,05	0,07
    1226	0,052	0,035	0,076
    La série 123 serait donc remplacée par les 2 lignes suivantes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    123	0,802	0,05	0,07
    1236	0,052	1	0,076
    Mais la série 124 serait donc remplacée par les 4 lignes suivantes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    124	0,802	0,05	0,07
    1242	0,9653	0,398	0,66
    1246	0,823729	0,8495	0,885
    1249	0,052	0,035	0,076
    On n'y gagne qu'une seule ligne qu'on résume, les autres lignes sont laissées avec leurs détails!


    La série 125 serait donc remplacée par les 2 lignes suivantes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    1250	0,052	0,035	0,076
    125	0,802	0,05	0,07
    Cet exemple résume la philosophie des regroupements que je dois faire.

    Merci d'avance.

  2. #2
    Inactif  
    Homme Profil pro
    Inscrit en
    Janvier 2014
    Messages
    374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Janvier 2014
    Messages : 374
    Points : 479
    Points
    479
    Par défaut
    Bonjour.

    Apparemment vous avez souvent :
    Sauf pour les postes suivants, dont le contenu (p1, p2, p3) est différent
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    1204	0,052	0,035	0,076
    1236	0,052	1	0,076
    1242	0,9653	0,398	0,66
    1246	0,823729	0,8495	0,885
    1249	0,052	0,035	0,076
    1250	0,052	0,035	0,076
    Ne faut-il pas faire parcourir l'index 12xx (quelqu'il soit) dans la table ci dessus ?
    Si l'index est égal on prend les valeurs du poste correspondant à cet index.
    Ou alors j'ai rien compris !...

  3. #3
    Membre régulier
    Inscrit en
    Juillet 2006
    Messages
    232
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations forums :
    Inscription : Juillet 2006
    Messages : 232
    Points : 79
    Points
    79
    Par défaut
    Merci iakou de ta réponse rapide,

    En réalité j'ai beaucoup plus que des série 12xx pour la valeur du champ index je peux avoir facilement plusieurs milliers et je peux avoir des valeurs index qui commencent par n'importe quel chiffre et ont une longueur qui varie de 1 à 20 chiffres.

    • Index est une clé primaire de ma table
    • P1,p2,p3 sont des champs float ou double


    (Index contient toujours des valeurs entières et je peux le traiter au besoin comme une chaine de caractères)
    Je crée par exemple une table temporaire avec un champ Dixi qui est vide au départ et que je remplis avec le champ index moins le chiffre à droite
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    update tempor set dixi=substring(trim(index),1,length(trim(index))-1)
    Le traitement est fait maintenant sur la table tempor avec des groupements sur les champs (dixi,p1,p2,p3 )
    S'il y a plusieurs occurrences de (dixi,p1,p2,p3 ), on les supprime pour ne laisser qu'un seul représentant..etc

    Est ce que quelqu'un peut m'aider à poursuivre le raisonnement jusqu'au bout? C'est à dire avoir un tableau organisé comme dans post précédent.


    Merci d'avance.



    Pour

  4. #4
    Membre expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 58
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Points : 3 627
    Points
    3 627
    Billets dans le blog
    8
    Par défaut
    Tu veux traiter ça en mysql ou bien en PHP ?
    Il me semble que, vu que ça n'est que de la cosmétique, à ce stade, c'est plus logique de le traiter en PHP.
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  5. #5
    Membre régulier
    Inscrit en
    Juillet 2006
    Messages
    232
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations forums :
    Inscription : Juillet 2006
    Messages : 232
    Points : 79
    Points
    79
    Par défaut
    Bonjour,
    bien sûr que je préfère traiter ça en MySQL, car je débute en php. Je suis d'ailleurs au TP2 de ton tuto php.

    Merci d'avance.

    PS: j'ai pas bien compris :vu que ça n'est que de la cosmétique Je pensais que cosmétique c'est genre parfum etc...

  6. #6
    Membre régulier
    Inscrit en
    Juillet 2006
    Messages
    232
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations forums :
    Inscription : Juillet 2006
    Messages : 232
    Points : 79
    Points
    79
    Par défaut
    Bonjour Dendrite,

    Est ce que tu as reçu un message privé que je t'ai envoyé hier?

    Merci.

  7. #7
    Membre expert
    Avatar de Spartacusply
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    1 723
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 1 723
    Points : 3 274
    Points
    3 274
    Par défaut
    L'idée serait de parcourir tous les index, si les valeurs de l'index n+1 sont égaux à celle de l'index n, alors on supprime l'index n+1.

    Il me semble que ce n'est pas une bonne idée de jouer avec l'indexation (ou alors tout reprendre à 0), sinon tu risques d'avoir des problèmes de collision.

    PS: j'ai pas bien compris :vu que ça n'est que de la cosmétique Je pensais que cosmétique c'est genre parfum etc...
    Dendrite veut dire que ce que tu souhaites c'est du bricolage de bas étage (et elle a raison), pas comme de la "cosmétique", qui fait un domaine "propre", du haut de gamme.
    Un message utile vous a aidé ? N'oubliez pas le

    www.simplifions.fr - Simplifier vos comptes entre amis !

  8. #8
    Inactif  
    Homme Profil pro
    Inscrit en
    Janvier 2014
    Messages
    374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Janvier 2014
    Messages : 374
    Points : 479
    Points
    479
    Par défaut
    Bonjour.
    En réalité j'ai beaucoup plus que des série 12xx pour la valeur du champ index je peux avoir facilement plusieurs milliers et je peux avoir des valeurs index qui commencent par n'importe quel chiffre et ont une longueur qui varie de 1 à 20 chiffres.
    - Sommes nous en présence d'une 'table' ou d'une 'bdd' du type : Clef, p1, p2, p3 ?

    - Par ailleurs, y-a-t-il des contraintes de performance, en termes de temps CPU ?... Il semblerait que oui, puisque vous vous orientiez vers un traitement en 'table'. Celui-ci est peut-être envisageable, mais il dépend inévitablement de la structure de votre 'index'. Or, vous nous dîtes que sa longueur peut varier de 1 à 20.

    Ce n'est plus tout a fait ce que vous présentiez au départ ! Pouvez vous nous expliquer la structure de votre 'index', afin de déterminer s'il est effectivement possible d'optimiser.

    Cdlt

  9. #9
    Membre expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 58
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Points : 3 627
    Points
    3 627
    Billets dans le blog
    8
    Par défaut
    En sql, en fait, tu voudrais ça

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select distinct p1,p2,p3
    from matable
    order by id

    et ensuite, il faudrait aller chercher l'id du premier tuple correspondant... Isn't it ?
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  10. #10
    Membre régulier
    Inscrit en
    Juillet 2006
    Messages
    232
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations forums :
    Inscription : Juillet 2006
    Messages : 232
    Points : 79
    Points
    79
    Par défaut
    Bonjour tout le monde;

    Pour résumer je vais expliquer la structure du champ id qui est un préfixe téléphonique en donnant l'exemple précédent:
    col1 col2 et col3 sont des prix donc le préfixe 1201 peut être envoyé sur :
    le 1er choix avec le prix 0,802
    le 2eme choix avec le prix 0,05
    le 3eme choix avec le prix 0,07
    Mais au lieu d'envoyer énormément d'instructions à la machine, je voudrais résumer/agréger/regrouper au mieux.
    Ainsi au lieu de conserver les 7 lignes

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    1201	0,802	0,05	0,07
    1202	0,802	0,05	0,07
    1203	0,802	0,05	0,07
    1204	0,052	0,035	0,076
    1205	0,802	0,05	0,07
    1206	0,802	0,05	0,07
    1207	0,802	0,05	0,07
    on regroupe les 6 lignes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    1201	0,802	0,05	0,07
    1202	0,802	0,05	0,07
    1203	0,802	0,05	0,07
     
    1205	0,802	0,05	0,07
    1206	0,802	0,05	0,07
    1207	0,802	0,05	0,07
    en une seule ligne soit
    et on garde le détail de la ligne
    car elle a des prix qui diffèrent.

    le champ id peut être
    33 qui est l'indicatif de la France mais ça peut être
    ou bien 3351;3352;3353;3352;3356;3357;3358;3359 etc qui sont des destinations plus fines en france.
    Si 3351;3352;3353;3352;3356;3357;3358;3359 ont des prix identiques on les regroupe en 335. Si 3357 a des prix différents
    on conserve alors 3357 avec son détail et on regroupe les autres en 335
    Il me semble que ce n'est pas une bonne idée de jouer avec l'indexation (ou alors tout reprendre à 0), sinon tu risques d'avoir des problèmes de collision.
    c'est exact.
    Dans ce cas je conserve la ligne ayant les prix les plus bas.

    exemple si j'ai une collision
    de deux lignes
    125 0.2 0.3 0.1
    125 0.3 0.1 0.1
    on regroupe en une seule ligne
    125 0.2 0.3 0.1
    j'ai déjà la requête pour cette opération

    Merci de votre patience!

  11. #11
    Membre régulier
    Inscrit en
    Juillet 2006
    Messages
    232
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations forums :
    Inscription : Juillet 2006
    Messages : 232
    Points : 79
    Points
    79
    Par défaut
    Bonjour Dendrite,

    Est ce que tu as reçu un message privé que je t'ai envoyée hier?

    Merci.

  12. #12
    Membre régulier
    Inscrit en
    Juillet 2006
    Messages
    232
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations forums :
    Inscription : Juillet 2006
    Messages : 232
    Points : 79
    Points
    79
    Par défaut Davantage d'explication sur la requête
    Bonjour tout le monde,


    Merci de bien vouloir lire mon poste dans lequel j'explique davantage mon problème selon vos derniers conseils: d'abord pour éviter les collision, j'ai crée un nouveau champ serie de type autoincrément et mon champ prefixe n'est plus donc une clé.

    La table test qui contient donc 4 champs
    -série qui est une auto-incrémentation ( LA CLÉ )
    -dest qui contient un préfixe téléphonique : ce champ est stocké comme varchar ( 40 ) sa longueur peut être une ou 40 chiffres
    -col1 , col2 col3 sont des réels déclarés comme float
    Nous avons dans l'exemple suivant
    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
    47 1246 0,123729 0,1495 0,0885
    48 1248 0,0102 0.005 0.007
    49 1249 0,0052 0,0035 0,0076
    50 1250 0,0052 0,0035 0,0076
    51 1251 0,0102 0.005 0.007
    52 1252 0,0102 0.005 0.007
    53 1253 0,0102 0.005 0.007
    54 1254 0,0102 0.005 0.007
    55 1256 0,0102 0.005 0.007
    56 1260 0,0102 0.005 0.007
    57 1262 0,0102 0.005 0.007
    58 1264 0,053023 0,1638 0,06
    59 1267 0,0102 0.005 0.007
    60 1268 0,145631 0,0946 0,1045
    61 1269 0,0102 0.005 0.007
    62 1270 0,0102 0.005 0.007
    L'objectif est d' agréger / résumer ce tableau en réduisant les lignes selon les 3 dernières colonnes et le prefixe bien sûr.

    Pour rexample les lignes suivantes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    50 1250 0,0052 0,0035 0,0076
    51 1251 0,0102 0.005 0.007
    52 1252 0,0102 0.005 0.007
    53 1253 0,0102 0.005 0.007
    54 1254 0,0102 0.005 0.007
    55 1256 0,0102 0.005 0.007
    sera réduit à 2 lignes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    50 1250 0,0052 0,0035 0,0076
    51 125 0,0102 0.005 0.007
    parce que tous les préfixes commencent par 125 . Même 50 1250 0,0052 0,0035 0,0076 commence par '125 ' MAIS 0,0052 0,0035 0,0076 ne sont pas égaux ( un par un ) à 0,0052 0,0035 0 , 0076

    merci beaucoup...

  13. #13
    Inactif  
    Homme Profil pro
    Inscrit en
    Janvier 2014
    Messages
    374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Janvier 2014
    Messages : 374
    Points : 479
    Points
    479
    Par défaut
    Bonjour.

    Il semble que votre solution soit fiable.

    Si vous souhaitez un 'travail' en table PHP, je me demande si pour un impératif de performance, il ne faille pas prévoir 2 dimensions (afin déviter un parcours séquentiel gourmand en temps CPU)
    J'ai pensé à un premier index pour accéder à vos tranches tarifaires (ce que vous appelez séries) : 122, 123, 130...
    Et le second index, pour parcourir la série, afin de choisir 1 tarif spécifique ou le tarif par défaut (1er poste de la série).

    Maintenant se pose le problème de la construction de la table, mais aussi de sa maintenance...

    PS : je n'ai pas compris le pb des collisions. chaque série possède ses tarifs spécifiques, non ?...

  14. #14
    Membre régulier
    Inscrit en
    Juillet 2006
    Messages
    232
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations forums :
    Inscription : Juillet 2006
    Messages : 232
    Points : 79
    Points
    79
    Par défaut
    Merci beaucoup iakou,

    Tout d'abord je m'excuse auprès de Dendrite, car je viens de comprendre son poste qui contient
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT DISTINCT p1,p2,p3
    FROM matable
    ORDER BY id
    et il me semble qu'au bout ça peut faire l'affaire avec quelques aménagements peut être : tout le problème est que je me rends compte que je ne suis pas arrivé à vous expliquer clairement le problème, mais je vais y arriver.

    Pour revenir à la question des collision de iakou voici un exemple

    Au départ j'ai ma table sans doublon dans le champ dest ( J'adopte la première version avant la création de l'autoincrement)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    1867	0,091	0,0035	0,0926
    1416	0,0052	0,0005	5
    22796	0,190561	0,13	0,2
    14160	0,190561	0,13	0,2
    14161	0,0052	0,0035	0,0076
    14162	0,0052	0,0035	0,0076
    14163	0,0052	0,0035	0,0076
    14164	0,0052	0,0035	0,0076
    14165	0,190561	0,1245	0,2
    14166	0,0052	0,0035	0,0076
    14167	0,0052	0,0035	0,0076
    14168	0,0052	0,0035	0,0076
    14169	0,0052	0,0035	0,0076
    La solution à laquelle je veux aboutir c'est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    14161	0,0052	0,0035	0,0076
    14162	0,0052	0,0035	0,0076
    14163	0,0052	0,0035	0,0076
    14164	0,0052	0,0035	0,0076
    14166	0,0052	0,0035	0,0076
    14167	0,0052	0,0035	0,0076
    14168	0,0052	0,0035	0,0076
    14169	0,0052	0,0035	0,0076
    en une seule ligne qui aura un champ dest =1416
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1416	0,0052	0,0035	0,0076
    or j'ai déjà une ligne avec le champ dest=1416
    donc un premier 1416 issu de la ligne
    1416 0,0052 0,0005 5
    et un deuxième issu du regroupement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1416	0,0052	0,0035	0,0076
    L'objectif est de fusionner ces deux lignes en une seule (avec le prix minimale dans chaque)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1416	0,0052	0,0005	0,0076
    Donc voici la liste finale cherchée
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    1867	0,091	0,0035	0,0926
    1416	0,0052	0,0005	0,0076
    22796	0,190561	0,13	0,2
    14160	0,190561	0,13	0,2
    14165	0,190561	0,1245	0,2
    Le gain est clair 5 lignes au lieu de 13


    Voilà
    Merci beaucoup par avance.

  15. #15
    Inactif  
    Homme Profil pro
    Inscrit en
    Janvier 2014
    Messages
    374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Janvier 2014
    Messages : 374
    Points : 479
    Points
    479
    Par défaut
    Bonjour.

    C'est bien compliqué votre affaire !

    - Vous faites des regroupements sur 3 digits (120, 122, 125...) avec des tarifs spécifiques sur 4 digits (Ex: 1205)
    - maintenant vous en faites sur 4 digits (1416) avec des tarifs spécifiques sur 5 digits (14160, 14165)...

    C'est de la géométrie variable !... Il me semble que dans ces condition le travail en table 'array' soit compromis il faut une BDD.

    - Par ailleurs pourquoi le tarif 1416, n'est-il pas devant 14160 ?... Vous intercalez 22796 ! Rien n'est donc trié ?...
    - En plus je vois que lorsque vous 'dégagez' un doublon vous mixez les tarifs pour prendre les valeurs minimales des vecteurs 'p1,p2,p3'.

    Je crains que cela ne dépasse mes modestes compétences.

    Cordialement

  16. #16
    Membre expert
    Avatar de Spartacusply
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    1 723
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 1 723
    Points : 3 274
    Points
    3 274
    Par défaut
    J'avais commencé à essayer de faire un truc, et en fait je me suis rendu compte que c'était bien trop tordu si on voulait s'assurer qu'il n'y est aucun risque d'erreur !


    Je n'ai aucun doute que cela soit faisable, mais cela va demander du temps...
    Un message utile vous a aidé ? N'oubliez pas le

    www.simplifions.fr - Simplifier vos comptes entre amis !

  17. #17
    Membre régulier
    Inscrit en
    Juillet 2006
    Messages
    232
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations forums :
    Inscription : Juillet 2006
    Messages : 232
    Points : 79
    Points
    79
    Par défaut
    Bonjour,
    Je vais répondre par 2 posts
    c'est vrai iakou, je n'ai pas trié
    une ligne avec 4 digits est plus générale qu'une ligne de 3 digits
    C'est normal qu'on laisse une ligne de 5 digits pendant qu'on regroupe d'autres lignes: Le max de lignes qu'on puisse avoir 'dans' un préfixe XYZ est
    XYZ0, XYZ1,....XYZ9 donc 10 lignes de (0 à 9)

    supposons que 6 de ces lignes aient les mêmes tarifs p1,p2,p3
    XYZ1 p1,p2,p3
    XYZ0 p1,p2,p3
    XYZ5 p1,p2,p3
    XYZ6 p1,p2,p3
    XYZ7 p1,p2,p3
    XYZ9 p1,p2,p3
    XYZ2 p1,p2,p4
    XYZ4 p1,p8,p3
    XYZ3 p1,p2,p4
    XYZ8 p5,p6,p7

    On va regrouper les 6 premières soit
    XYZ p1,p2,p3
    Les 4 autres ne sont pas 'regroupables' donc elles sont laissées telles quelles
    même si XYZ2 et XYZ3 ont les mêmes tarifs(les regrouper n'a pas de sens ici)
    Au finish on aura
    XYZ p1,p2,p3
    XYZ2 p1,p2,p4
    XYZ4 p1,p8,p3
    XYZ3 p1,p2,p4
    XYZ8 p5,p6,p7

    - En plus je vois que lorsque vous 'dégagez' un doublon vous mixez les tarifs pour prendre les valeurs minimales des vecteurs 'p1,p2,p3'.
    c'est exact car on cherche le meilleur prix

    Je crains que cela ne dépasse mes modestes compétences.
    Non pourtant car je n'ai jamais tant avancé dans ce pb qu'avec vous trois.

    le select distinct était la clé comme vous allez le voir(dendrite le sais déjà car c'est elle qui l'a suggéré ).
    Merci infiniment et au prochain post

  18. #18
    Membre régulier
    Inscrit en
    Juillet 2006
    Messages
    232
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations forums :
    Inscription : Juillet 2006
    Messages : 232
    Points : 79
    Points
    79
    Par défaut
    bonjour
    grace à vos précédents posts je tiens la solution ou presque

    dixi est id/10
    Quand j'émets cette commande
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    select dixi,id,`col1`, `col2`, `col3`,count(
    *) from ma_table group by concat( dixi,`col1`, `col2`, `col3` )


    ça me donne:
    130	1306	0,0052	0,0035	0,0076	1
    130	1301	0,0102	0,005	0,007	8
    132	1320	0,0102	0,005	0,007	4
    132	1322	99	0,005	0,007	3
    134	1343	0,0052	0,0035	0,0076	1
    134	1347	0,0102	0,005	0,007	1
    134	1340	0,014668	0,0271	0,016	1
    134	1345	0,046865	0,1277	0,106	1
    134522	1345229	0,11068	99	0,115	1
    134524	1345249	0,11068	99	0,115	1
    13453	134532	99	99	0,109	1
    134555	1345550	0,11068	99	0,109	1
    134562	1345623	0,11068	99	0,109	1
    134562	1345625	99	99	0,115	2
    134564	1345640	0,11068	99	0,109	2
    134564	1345645	99	99	0,115	3
    134594	1345948	99	99	0,115	1
    134599	1345990	99	99	0,115	1
    136	1365	0,0052	99	0,0076	1
    136	1360	0,0102	0,005	0,007	2
    136	1364	99	0,005	0,007	1
    140	1403	0,0052	0,0035	0,0076	1
    140	1401	0,0102	0,005	0,007	8
    141	1416	0,0052	0,0035	0,0076	2
    141	1410	0,0102	0,005	0,007	7
    Mais je voudrais que les 2 dernières lignes correspondant à 141 la dernière ligne soit conservée qui correspond au max de 7 . Par contre je voudrais pas regrouper les lignes correspondant au nombre 2(avant dernière).

    De même
    pour les 2 lignes
    132	1320	0,0102	0,005	0,007	4
    132	1322	99	0,005	0,007	3
    je voudrais conserver le regroupement correspondant à 4 mais non celui correspondant à 3 c'est à dire avoir les trois lignes

    en détail et pas les regrouper.

    Merci infiniment.

Discussions similaires

  1. Regrouper données plusieurs ligne en une seule
    Par willytito dans le forum Access
    Réponses: 2
    Dernier message: 03/09/2007, 10h35
  2. Plusieurs lignes dans une seule
    Par rlnd23 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 07/02/2007, 16h35
  3. [MySQL] Remplir plusieurs lignes d'une seule table avec le même formulaire
    Par zehni dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 07/09/2006, 12h12
  4. Réponses: 4
    Dernier message: 07/09/2006, 12h12
  5. Concatenation de plusieurs lignes en une seule
    Par stawen dans le forum Langage SQL
    Réponses: 2
    Dernier message: 31/03/2005, 13h55

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