Inserer et modifier des données dnas la bdd sans répétitions?

diocey Messages postés 4 Date d'inscription mercredi 6 octobre 2004 Statut Membre Dernière intervention 22 novembre 2007 - 19 nov. 2007 à 18:15
diocey Messages postés 4 Date d'inscription mercredi 6 octobre 2004 Statut Membre Dernière intervention 22 novembre 2007 - 20 nov. 2007 à 08:52
Bonjour à tous.

Mon problème était difficile à definir dnas une ligne de sujet!


Alors voila:

J'ai un fichier ".tab" que j'ai parser afin de l'intgrer à une base de donnée.

Mais j'ai besoin de quelques traitements sur ce fichier.


mon fichier a cette tete la (jai pris un exemple car en tout j'ai plus de 5000lignes):
==============
0045    S    Français
0045    S    Anglais
0045    S    Français
0045    S    Français
0045    U   Français
0045    U   Français
0045    U   Français
0045    U   Français
0045    B    Français
0045    B    Espagnol
0045    T    Français
0045    T    Français
0045    T    Français
0045    B    Espagnol
0045    B    Anglais
0045    T    Français
0045    S    NON
0045    S    NON
0045    D   Fr/Ang/Ar/Es/Por
0045    D   Fr/Ang/Ar/Es/Por
0045    D   Fr/Ang/Ar/Es/Por
0045    D   Fr/Ang/Ar/Es/Por
0045    D   Fr/Ang/Ar/Es/Por
===================

la première colonne correspond à l'id d'un film (ici 0045).
La deuxième correspond au support du film (un id peut avoir plusieurs support)
La 3eme est la langue des sous titres associés au film.

Au final, j'ai besoin que cette partie de fichier donne:
id = 0045
support = S (sous-titre: Anglais, Français) ; U (sous-titre: Français) ; B (sous-titre: Français, Espagnol, Anglais) ; T (sous-titre:Anglais); D (sous-titre:Fr/Ang/Ar/Es/Por)

Voila l'histoire:
Mon problème: j'ai deja fait un bout de code qui ne fonctionne pas.
Le soucis c'est que certains sont répété plusieurs fois, jamais dnas le meme ordre, avec des sous titre différent ou pareil.
Les sous titres ne doivent pas etre répétés mais tous doivent apparaitre.

Ci apres le code que j'ai fait:
Il faut admettre que le tableau est deja parser de telle sorte que l'id est "$tab[0]", le support "$tab[1]" et les sous titre "$tab[3]".
de plus, il y a des endroit ou vous allez trouvez des repeticion, c'est parceque mon fichier a d'uatres colonne que je vous ai epargner...

=========================$select "SELECT * FROM table WHERE ID_Oeuvre '".$tab_champs[0]."'";
$query_select= mysql_query($select) or die("probleme".mysql_error());
$result = mysql_fetch_array($query_select);
$sup_old = addslashes($result["Support"]);

                        if($sup_old != ''){
                                    if($tab_champs[1] != '')
                                    {
                                        if(strstr($sup_old, $tab_champs[1]))
                                        {
                                            if($tab_champs[3] != '' && $tab_champs[3]!= '?' && $tab_champs[3] != 'NON')
                                            {
                                                $sstitre = 'sous-titre : ';
                                                //if(strstr($sup_old, $sstitre))
                                                if(!strstr($sup_old, $sstitre . $tab_champs[3]))
                                                {
                                                $sup_old = str_replace($sstitre, $sstitre . $tab_champs[3] . ', ' , $sup_old);
                                                }
                                            }
                                           
                                            $tab_champs[1] = $sup_old;
                                        }
                                       
                                        else
                                        {
                                            if($tab_champs[3] != '')
                                            {
                                                $sstitre = 'sous-titre : ';
                                                $tab_champs[3] = $sstitre . $tab_champs[3];
                                            }
                                            if($tab_champs[3] != '') $tab_champs[1] .= '(';
                                            if($tab_champs[3] != '') $tab_champs[1] .= $tab_champs[7];
                                            if($tab_champs[3] != '') $tab_champs[1] .= ')';
                                           
                                            $tab_champs[1] = $tab_champs[1] . '; ' . $sup_old;
                                        }
                                                                                $update "UPDATE table SET Support '" . $tab_champs[1] . "' WHERE ID_Oeuvre = '" . $tab_champs[0] . "' ";
                                        $query_update = mysql_query($update) or die("erreur de mise à jour : ".mysql_error());
                                    }
                                   
                                }
                                else{
                               
                                ///OK////
                                if($tab_champs[3] != '' ) $tab_champs[1] .= '(';
                                if($tab_champs[3] != '') $tab_champs[1] .= 'sous-titre : ' . $tab_champs[3];
                                if($tab_champs[3] != '') $tab_champs[1] .= ')';
                                                                $update "UPDATE table SET Support '" . $tab_champs[1] . "' WHERE ID_Oeuvre = '" . $tab_champs[0] . "' ";
                                $query_update = mysql_query($update) or die("erreur de mise à jour : ".mysql_error());
                                }
                               
                               
                           
                            }
=========================

Pour l'instant il me rajoute tous les sous titres (y compris les repetitions) dans Tous les support (alors que ts les supports n'ont pas les meme sous titres)

Je sais que ca parait un peu prise de tete comme ca, mais j'ai vraiment besoin de votre aide.
Normalement je gere en phph, mais la jsuis completement blqouer et je commence à peter un plomb!!

Par avance merci à tous!
Gwen

2 réponses

malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
19 nov. 2007 à 20:05
Hello,

<?php
$aLines = file('monfichier.txt');
$aCheck = array();
foreach($aLines as $sLine) {
    if(!in_array($sLine, $aCheck)) {
        $aCheck[] = $sLine;
        $aToBeInserted = explode("\t", $sLine);
        $sQuery = 'INSERT INTO matable (film_id, film_support, film_sous_titres) VALUES (\''.$aCheck[0].'\', \''.$aCheck[1].'\', \''.$aCheck[2].'\')';
        // musql_query() et cie
    }
}
?>

Je t'ai donné le version simple avec insertions. Pour des updates, je te conseille d'aller chercher toute ta base, et de remplir $aCheck avec, ern ajoutant l'id de ta ligne. Si tu ne trouves pas de correspondance, tu mets à jour.
0
diocey Messages postés 4 Date d'inscription mercredi 6 octobre 2004 Statut Membre Dernière intervention 22 novembre 2007
20 nov. 2007 à 08:52
Merci beaucoup pour ta reponse mais en fait l'insert je l'ai deja et il fonctionne (je l'ai pas mis ici car j'ai beaucoup plus de données en fait et l'histoire des sous titre n'est qu'un exemple donc il n'y a le code que j'ai fait qui correspond a la partie sstitre.

Mon pb est justement l'update car en gros je dois modifier des données à l'interieures de celles qui se trouve dnas la base.

Exemple:
Avant, support = U(sous-titres:Français)
Apres, support = U(sous-titre;Anglais, FRancais,).

Je dois donc inserer l'anglasi entre le "sous-titre" et le "francais".

Je ne sais pas si c'est beaucoup plus clair...??
Merci
0