Services : Actualité Emploi Blog Forum Flux
Formation Trafic : Référencement Liens sponsorisés Affiliation Ecommerce Nom de domaine E-réputation Marketing Mobile Black Hat
Formation Technique : Performance Web Html Css Sql Curl Asp Dotnet Php Ajax Wordpress Twitter Google Analytics

Forum Oseox
Oseox

Concatenation champs d'infos en base de données : SQL / PHP - Page 2

Forum Référencement et Trafic
Nous sommes le Mar 21 Nov 2017 05:27

Heures au format UTC [ Heure d’été ]




Poster un nouveau sujet Répondre au sujet Aller à la page Précédente  1, 2
Auteur Message
MessagePosté: Mar 26 Avr 2011 12:53 
Administrateur
Avatar de l’utilisateur
Si je comprends bien, je me suis basé sur les code_ano alors qu'il faut d'abord regrouper par référence c'est bien cela ?


Haut
 Profil Envoyer un e-mail  
 
MessagePosté: Mar 26 Avr 2011 13:32 
Avatar de l’utilisateur
H'llo !

Oui c'est ça, regrouper par reference, puis par anomalie (titre ano, puis les textes des ano par numeros de ligne, pour eviter les redondances et doublons d'infos...), pour faire des INSERTS propres en base.
Par exemple pour ma premiere ano de la ref 3891: INSERT INTO `new_anomalies` (`ref`, `code_ano`, `text_ano`) VALUES
('3891', 'M2412', 'PHASE DESEQUILIBREE 21 - GROUPE DE COMPTAGE: 01 - CONSO COMPTEUR 20 : 000002415 - CONSO COMPTEUR 21 : 000001200 - CONSO COMPTEUR 22 : 000002965')";

Sachant que:
La deuxieme colonne (visuellement dans le tableau ci dessous, ou il y a 1,6,11,21,26) est le numero de la ligne qui contient un titre d'ano non vide ( ex:M2412), et la colonne 6 est le numero de la ligne ( 2,3,4,5, 7,8,9,10 etc... )qui contient un titre d'ano vide (la colonne n°7 - pas vide mais 5 espaces en fait)

$toto =array(
array(3891, 1, "M2412", "PHASE DESEQUILIBREE 21", 3891, 2, " ", "GROUPE DE COMPTAGE: 01"),
array(3891, 1, "M2412", "PHASE DESEQUILIBREE 21", 3891, 3, " ", "CONSO COMPTEUR 20 : 000002415"),
array(3891, 1, "M2412", "PHASE DESEQUILIBREE 21", 3891, 4, " ", "CONSO COMPTEUR 21 : 000001200"),
array(3891, 1, "M2412", "PHASE DESEQUILIBREE 21", 3891, 5, " ", "CONSO COMPTEUR 22 : 000002965"),
array(3891, 6, "M2412", "PHASE DESEQUILIBREE 22", 3891, 5, " ", "CONSO COMPTEUR 22 : 000002965"),
array(3891, 6, "M2412", "PHASE DESEQUILIBREE 22", 3891, 7, " ", "GROUPE DE COMPTAGE: 01"),
array(3891, 6, "M2412", "PHASE DESEQUILIBREE 22", 3891, 8, " ", "CONSO COMPTEUR 20 : 000002415"),
array(3891, 6, "M2412", "PHASE DESEQUILIBREE 22", 3891, 9, " ", "CONSO COMPTEUR 21 : 000001200"),
array(3891, 6, "M2412", "PHASE DESEQUILIBREE 22", 3891, 10, " ", "CONSO COMPTEUR 22 : 000002965"),
array(3891, 11, "M2408", "CONSOMMATION FORTE HCH", 3891, 10, " ", "CONSO COMPTEUR 22 : 000002965"),
array(3891, 11, "M2408", "CONSOMMATION FORTE HCH", 3891, 12, " ", "PERIODE DU : 22/11 AU 20/12"),
array(3891, 11, "M2408", "CONSOMMATION FORTE HCH", 3891, 13, " ", "PS:000000112 COEF: 2,50"),
array(3891, 11, "M2408", "CONSOMMATION FORTE HCH", 3891, 14, " ", "CONSO/JOUR REF:000000037"),
array(3891, 11, "M2408", "CONSOMMATION FORTE HCH", 3891, 15, " ", "CONSO/JOUR EN COURS:000000097"),
array(3891, 16, "M2408","CONSOMMATION FORTE HPH", 3891, 15, " ", "CONSO/JOUR EN COURS:000000097"),
array(3891, 16, "M2408", "CONSOMMATION FORTE HPH", 3891, 17, " ", "PERIODE DU : 22/11 AU 20/12"),
array(3891, 16, "M2408", "CONSOMMATION FORTE HPH", 3891, 18, " ", "PS:000000112 COEF: 2,50"),
array(3891, 16, "M2408", "CONSOMMATION FORTE HPH", 3891, 19, " ", "CONSO/JOUR REF:000000031"),
array(3891, 16, "M2408", "CONSOMMATION FORTE HPH", 3891, 20, " ", "CONSO/JOUR EN COURS:000000118"),
array(3891, 21, "M2408", "CONSOMMATION FORTE P", 3891, 20, " ", "CONSO/JOUR EN COURS:000000118"),
array(3891, 21, "M2408", "CONSOMMATION FORTE P", 3891, 22, " ", "PERIODE DU : 22/11 AU 20/12"),
array(3891, 21, "M2408", "CONSOMMATION FORTE P", 3891, 23, " ", "PS:000000112 COEF: 2,50"),
array(3891, 21, "M2408", "CONSOMMATION FORTE P", 3891, 24, " ", "CONSO/JOUR REF:000000010"),
array(3891, 21, "M2408", "CONSOMMATION FORTE P", 3891, 25, " ", "CONSO/JOUR EN COURS:000000043"),
array(3891, 26, "A2411", "ECART PRECISION-REPARTITEUR", 3891, 25, " ", "CONSO/JOUR EN COURS:000000043"),
array(3891, 26, "A2411", "ECART PRECISION-REPARTITEUR", 3891, 27, " ", "CONSO TOTALE MONOS:000006580"),
array(3891, 26, "A2411", "ECART PRECISION-REPARTITEUR", 3891, 28, " ", "CONSO REPARTITEUR:000008020"),
array(3891, 26, "A2411", "ECART PRECISION-REPARTITEUR", 3891, 29, " ", "ECART: 1,10 "));

Voilà, en couleur, j'espere que ca te parlera tout autant qu'à moi ... :)

Array php $toto obtenu avec ce code:

Code:
$tab = array();
$tab1 = array();
$tab2 = array();

$req = mysql_query("SELECT * FROM anomalies") or die('pb select');
while($row = mysql_fetch_array($req)){

        $ref=$row['ref'];
        $line_ano=$row['ligne'];
   $code_ano=$row['code_ano'];
        $text_ano=$row['text_ano'];
      
      if($code_ano != "     "){
         $tab1 = array($ref, $line_ano, $code_ano, $text_ano); // Le tableau ou les ref_ano ne sont pas vides
      }
      else
      {
         $tab2 = array($ref, $line_ano, $code_ano, $text_ano); // Le tableau ou les ref_ano sont vides
      }
      if(($tab1[0] == $tab2[0]) AND ($tab1[3] !="     ") ) {
      
         $tab []= array_merge($tab1, $tab2);
      }
}



Daphn


Haut
 Profil Envoyer un e-mail  
 
MessagePosté: Mar 26 Avr 2011 13:58 
Administrateur
Avatar de l’utilisateur
Ok c'est clair.

J'essaye de regarder cela dans la semaine :)
A priori il y a juste quelques lignes à modifier / ajouter sur le code que je t'ai posté.

N'hésite pas à le regarder en détails tu verras c'est assez simple.


Haut
 Profil Envoyer un e-mail  
 
MessagePosté: Jeu 28 Avr 2011 16:02 
Avatar de l’utilisateur
Salut Aurelien,

J'ai bien regardé ton code et je pense bien le comprendre.
Mais cependant, je t'avoue que je ne trouve pas comment resoudre mon probleme.

Je vois bien qu'il faut que je fasse un truc du style " pour chaque ligne ayant un code ano non vide, lire de 1 en 1 et concatener les text_ano des lignes suivantes tant que leur code_ano est vide".
Mais je me retrouve nulle pour l'ecrire en php. Sic

J'y arrive pô ... :cry:

Daphn


Haut
 Profil Envoyer un e-mail  
 
MessagePosté: Sam 30 Avr 2011 15:33 
Administrateur
Avatar de l’utilisateur
Et voila :)

Code:
<?php
   $db_server = "localhost"; //adresse du serveur MySQL
   $db_name = "os"; //nom de la base de données
   $db_user_login = "root"; //nom d'utilisateur pour la BD
   $db_user_pass = ""; //mot de passe pour la BD
   
mysql_connect("$db_server","$db_user_login","$db_user_pass") or
die("Impossible de se connecter");
mysql_select_db("$db_name");

$sql="SELECT * FROM anomalies WHERE code_ano != '' ";
$req = mysql_query($sql) or die('pb select');

$tab = array();

while($row = mysql_fetch_array($req)){

        $ref=$row['ref'];
        $code_ano=$row['code_ano'];
        $text_ano=$row['text_ano'];
        $id="$ref-$code_ano";
       
        $cherche=$tab[$id];

        if ( ((strpos($cherche,$code_ano))===false) and ((strpos($cherche,$ref))===false) ) {
            $tab[$id]="$ref|$code_ano|$text_ano";

        }else{
            $tab[$id].=" -/- $text_ano";

        }
}

foreach ($tab as $code_ano => $valeur) {

    $champs=explode("|",$valeur);

    $ref=$champs[0];
    $code_ano=$champs[1];
    $text_ano=trim($champs[2]);

    $sql="INSERT INTO `new_anomalies` (`ref`, `code_ano`, `text_ano`) VALUES
('$ref',  '$code_ano', '$text_ano')";

    $req = mysql_query($sql) or die('pb insert');
   
//print("$ref $code_ano $text_ano<br/><br />");
               
}

?>


Je pense qu'il y avait beaucoup plus simple à faire avec une requête SQL utilisant Group by :)


Haut
 Profil Envoyer un e-mail  
 
Afficher les messages postés depuis:  Trier par  
Poster un nouveau sujet Répondre au sujet  [ 15 messages ]  Aller à la page Précédente  1, 2

Heures au format UTC [ Heure d’été ]


Qui est en ligne

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


Vous ne pouvez pas poster de nouveaux sujets
Vous ne pouvez pas répondre aux sujets
Vous ne pouvez pas éditer vos messages
Vous ne pouvez pas supprimer vos messages
Vous ne pouvez pas joindre des fichiers

Rechercher:
Aller à:  
cron
Abonnez-vous au flux RSS

Blog

Forum

Offres d'emploi

Copyright : Moteur, traduction et optimisation
Merci de votre visite sur le forum Oseox