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 :

Requete MySQL et PHP en colonnes


Sujet :

PHP & Base de données

  1. #1
    Membre du Club
    Inscrit en
    Août 2008
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 7
    Par défaut Requete MySQL et PHP en colonnes
    Bonjour

    Je suis toute nouvelle en ce qui concerne Mysql et j'espère que quelqu'un pourra m'aider. Je suis presque sûre que la réponse est toute simple, mais après 2 soirées sur le net, je ne trouve toujours pas de réponse...

    Voilà, je dois créer un site multilingue et j'ai crée une table qui se compose comme ceci

    NOM_VARIABLE | FRANCAIS | ANGLAIS | ALLEMAND
    pageaccueil | Accueil | Homepage | Startseite
    etc...

    Sur ma page PHP, j'utilise une variable pour définir la langue de l'utilisateur: $langue

    Mais ensuite, je n'arrive pas à extraire la traduction approprié car les données sont en colonnes et pas en ligne.

    je ne comprend pas pourquoi cette requete SQL ne marche pas:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $result = mysql_query("SELECT $langue FROM languages);
    while($row = mysql_fetch_assoc($result))
    { 
    $traduc = $row['$pageaccueil']; 
     }
    echo "Resultat: $traduc ";
    Merci d'avance à quiconque pourra me donner un coup de main.

  2. #2
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    Salut

    Mais ensuite, je n'arrive pas à extraire la traduction approprié car les données sont en colonnes et pas en ligne.
    Justement, c'est là tout le problème, les avoir en ligne serait très largement mieux.

    Cette façon de concevoir (autant de colonnes ou champs qu'il y a de langues) ne respecte pas les bon concepts, une certaine norme, donc Bdd non 3NF (3ème forme normale), qui à mon sens est le minimum pour mieux tirer parti ce qu'une Bdd peu offrir, je pense aux jointures de tables particulièrement.

    Tu as plusieurs langues, Français, Anglais et Allemand, il te faudrait une table "langue", et chacune aura un ID, un identifiant unique :
    table langues
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    langue_id | iso
    1         | fr
    2         | en
    3         | de
    Ensuite, pour les contenu linguistiques, il faudra (théoriquement bien sûr) séparer les donnée non liés aux langues, et les traductions.
    L'exemple typique est une table "article", qui donc aura des contenu linguistiques :
    table articles
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    article_id | cree_le | statut
    1         | une_date | 1
    2         | une_date | 0
    3         | une_date | 1
    table articles_trad
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    article_id | langue_id | titre | contenu
    1          | 1        | truc   | contenu_français
    1          | 2        | muche| contenu_anglais
    1          | 3        | bidule | contenu_allemand
    Pour obtenir par exemple 1 seul article (id 1) et que son statut soit valide (publié 1) et ça pour une seule langue (Français id 1), ça donne :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    SELECT a.cree_le, at.titre, at.contenu
    FROM articles a
    JOIN articles_trad at ON a.article_id = at.article_id
    JOIN langues ON at.langue_id = l.langue_id
    WHERE a.article_id = 1
    AND statut = 1
    AND l.langue_id = 1
    Ici, on récupèrera qu'1 seule et unique article, celui correspondant à la langue.

    Au bout, tout repose sur les jointures, et c'est ceci qu'offrent toutes le Bdd, et si tu respecte ça, toute la gestion des contenu sera plus facile.


    Mise à part ça, concernant ton problème, si par exemple on souhaite obtenir "Homepage", il faudrait faire comme ceci :
    ($langue doit valoir ANGLAIS)
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT $langue
    FROM languages
    WHERE NOM_VARIABLE = 'pageaccueil'
    Et dans la boucle, faire : $traduc = $row[$langue];
    D'ailleurs, en partant du principe que le champ NOM_VARIABLE serait la clé primaire, donc chaque valeur unique, faire une boucle while ici est inutile, 1 seule ligne devra être retournée (ou aucune, donc 1 ou 0 lignes).
    Enfin, si j'ai bien compris.


    Dans ton cas, la théorie vaut que ce soit comme ceci :
    -> La table "languages" serait la même que la table "langue" plus haut
    table interface
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    id | element
    1  | pageaccueil
    2  | blablabla
    ... etc ...
    table interface_trad
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    id | langue_id | contenu
    1  | 1         | pageaccueil
    1  | 2         | Homepage
    1  | 2         | Startseite
    ... etc ...
    La requête sera :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SELECT it.contenu
    FROM interface i
    JOIN interface_trad it ON i.id = it.id
    JOIN langue l ON it.langue_id = l.langue_id
    WHERE l.langue_id = 1
    AND i.element = 'pageaccueil'
    On récupère le contenu avec : $traduc['contenu'];
    Pas de boucle vu que le contenu est unique.

    Cependant, il faudrait qu'il y ait une notion de groupe, comme par exemple récupérer les traductions pour chaque page, car faire une requête par élément, ça va requêter fort.
    A voir.

    En espérant que tout ceci puisse t'aider.

  3. #3
    Membre du Club
    Inscrit en
    Août 2008
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 7
    Par défaut
    Salut RunCodePhp

    Merci beaucoup pour cette réponse! Je vais l'analyser et essayer de la mettre en pratique si elle me convient. Je te tiens au courant.

    Encore merci pour ta rapidité!

    C.

Discussions similaires

  1. [MySQL] recuperer requete mysql en php
    Par chris52 dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 19/04/2012, 09h14
  2. [MySQL] formatage requete mysql pour php
    Par yvon_huynh dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 05/10/2007, 23h06
  3. Probleme de requete MySQL dans PHP
    Par cheers94wow dans le forum Requêtes
    Réponses: 7
    Dernier message: 04/05/2006, 17h25
  4. [SGBD] requête sql en php pour mysql
    Par Thierry8 dans le forum Requêtes
    Réponses: 1
    Dernier message: 20/09/2005, 22h31

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