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 :

Liste dynamique multilingue [MySQL]


Sujet :

PHP & Base de données

  1. #21
    Membre confirmé
    Homme Profil pro
    Webmaster
    Inscrit en
    Juin 2010
    Messages
    221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cambodge

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Juin 2010
    Messages : 221
    Par défaut
    Après avoir relu les différents messages, je me retouve malgré tout avec un souci:

    Dans la partie back-office du site, comment je peux savoir quelle est la valeur maximale du champ 'id_estate_type' dans l'hypothèse où l'on voudrait rajouter un type de bien? D'autant plus que la valeur de 'id_estate_type' doit être répété 3 fois (3 langues).

    De plus cette table est liée directement à la table 'estate'.

    A la base le site était unilingue donc le champ 'id_estate_type' était en PK et AI. Je récupérais l'Id et le tour était joué. Mais là c'est différent dans le sens où je ne peux pas mettre ce champ en AI.

    Avez-vous une idée?
    Merci d'avance,

    David


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    |id_estate_type|et_name_estate|id_lang|
    |1             |Maison        |     1 |
    |1             |House         |     2 |
    |1             |Thuis         |     3 |

  2. #22
    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
    Je ne sais plus trop ici, mais admetton que tu as bien 2 tables : estate_type et estate_type_lang.
    Pour La table estate_type le champ etstate_type_id sera la PK et en AI.
    Pour la table estate_type_lang, ce que tu montre ci dessus d'ailleurs, il faut définir un clé primaire double (double zone si ma mémoire est bonne) :
    PRIMARY KEY (estate_type_id, id_language)
    Ceci empêchera les éventuels doublons en cas d'erreur de code.
    (je te conseille toujours d'utiliser le même nom de l'ID de langue qu'il y a dans la table language)
    (le champ id_language serait mieux en le plaçant juste après le estate_type_id, les 2 au début et cote à cote)

    Dans le déroulement du code Php, il faut en 1er créer la ligne dans la table estate_type, ensuite récupérer la dernière clé accordée avec un mysq_insert_id() (tout de suite après, au plus tôt).
    Suffit d'exploiter cet ID pour ensuite faire l'insertion dans la table estate_type_lang.


    Il ne faut surtout pas faire de MAX(id) comme je le vois parfois.
    On vois bien ici, d'ailleurs, qu'il est mieux d'avoir 2 tables :
    On obtient bien une clé primaire en auto-incremente ET pour l'autre table on peu éviter les doublons.
    La BDD sera plus intègre. (théoriquement)

  3. #23
    Membre confirmé
    Homme Profil pro
    Webmaster
    Inscrit en
    Juin 2010
    Messages
    221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cambodge

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Juin 2010
    Messages : 221
    Par défaut
    Je ne comprends vraiment plus rien. Je dois bloquer quelque part ou alors il me manque des neurones

    Aurais-tu la gentillesse de me donner un exemple concret?
    Car je comprends j'ai ma table estate (avec tout les détails du bien) qui ser liée à estate_type qui elle sera liée à estate_type_langue?

    Si tu sais me montrer un exemple concret je suis preneur

    Merci d'avance,
    David

  4. #24
    Membre confirmé
    Homme Profil pro
    Webmaster
    Inscrit en
    Juin 2010
    Messages
    221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cambodge

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Juin 2010
    Messages : 221
    Par défaut
    Voilà ce que j'ai pour le moment. Mais tout cela doit être relié à la table principale des détails du bien. J'en perd mon latin...
    Images attachées Images attachées  

  5. #25
    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
    Le problème, c'est que pour cette table estate_type c'est qu'il y a une différence entre le fichier joint que tu as mis et dans un des tes poste ou celle avais un champ général_id.

    Ceci dit, j'avais déjà mis un exemple concret au début, et c'était la table "articles" et "article_lang".
    Le principe est le même.
    D'autres exemples avec les country, state, city. Toujours le même principe, il y a que les noms qui changent.

    Il peu avoir tout de même une exception, c'est que lorsque tu as dans la table de base uniquement une clé (un ID) et un contenu linguistique.
    Si on sépare ça en 2 table, ça va déboucher sur une 1ère table avec uniquement 1 seul champ.
    Du coup, et théoriquement dans ce cas là on ne sépare pas, on reste sur 1 seul table.
    Et là vient ton problème de ne pas pouvoir mettre de clé primaire auto_incremente.
    Du moins j'ai l'impression que ton problème vient de là.

    De mon coté je triche un peu, et je crée quand même 2 tables, mais pour éviter d'avoir 1 seul champ, j'en rajoute 1, bien souvent c'est la date de création.
    Si un jour je devais créer un nouveau champ, le séparation est déjà faite, juste à le rajouter.
    De l'autre, si on crée 1 seul table (donc tout rassemblé) et qu'un jour on doit rajouter un nouveau champ non linguistique, et ça va être la merd* car il faudra les séparer sinon il y aura un phénomène de répétition, et là, comme le code Php ne sera pas prévu

    Du ça donne :
    estate_type
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    |id_estate_type|cree_le
    |1             |
    |2             |
    PK : id_estate_type
    estate_type_lang (ou estate_type_name)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    |id_estate_type|id_language|et_name_estate
    |1             | 1         |Maison
    |1             |2          |House
    |1             |3          |Thuis
    PK : (id_estate_type, id_language)
    Fais des essai simple sur 2 ou 3 table liées bidons, tu visualiseras mieux.
    Puis effectivement, faut d'abord t'occuper de la partie Admin, le frontend suivra plus facilement (c'est souvent des copier/coller de jointure à rajouter)

  6. #26
    Membre confirmé
    Homme Profil pro
    Webmaster
    Inscrit en
    Juin 2010
    Messages
    221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cambodge

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Juin 2010
    Messages : 221
    Par défaut
    J’ai passé une bonne partie de l’après-midi à optimiser au mieux le schéma de ma base de données.
    Pour info, je code en PHP depuis avril donc je suis encore assez novice. J’ai encore du mal à visualiser la structure de cette base de données.

    On m’a appris que l’on devait toujours commencer par coder le back-office et je pense que cela est dans la logique. Cependant, j’ai un souci.

    Disons que l’administrateur du site n’est pas programmeur et désire rajouter un type de bien (maison, appartement, studio,… (Chose indispensable)) ; la nouvelle ligne doit être traduite dans le nombre de langues proposées. Jusque-là on est OK.

    Le champ ‘id_estate_type’ doit avoir la même valeur 3 fois (car j’ai 3 langues). Comment faire en php ? (Je prends cet exemple mais j’ai le même souci sur 10 tables…)

    Je fais mon INSERT INTO mais après ? Avec mysq_insert_id() ?
    Je dois garder le même id...

    J’ai vraiment besoin d’aide car je ne m’en sors pas :s

    Je joins le schéma en fonction du post précédent.

    Merci d'avance,
    David
    Images attachées Images attachées  

  7. #27
    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
    Je fais mon INSERT INTO mais après ? Avec mysq_insert_id() ?
    Je dois garder le même id...
    N'oubli pas qu'il y a une Doc, et elle est très bien faite, elle donne presque toujours des exemples.
    Doc (officielle) pour mysql_insert_id() : http://fr2.php.net/manual/fr/functio...-insert-id.php
    Il y a aussi des Google et autre Yahoo, et avec une simple recherche avec le nom de cette fonction, tu trouveras pleins d'autres exemples.


    Pour le déroulement de base, et bien lorsque tu crée un nouveau estate_type, il faudra en 1er créer la ligne dans la table "estate_type".
    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO estate_type (cree_le) VALUES (CURRENT_TIMESTAMP())
    Tout de suite après :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $id_estate_type = mysql_insert_id();
    Ensuite créer les différentes lignes (donc par langue) dans la table "estate_type_lang" avec leur couple id_state_type et id_lang.
    Faire une boucle sur les langue par exemple.
    Exemple :
    INSERT INTO estate_type_lang (id_state_type, id_lang, estate_name) VALUES ('$id_estate_type', '$id_lang', '$name')


    Fait des essai, et si tu bloque, explique ce qui ne va pas avec du code.

  8. #28
    Membre confirmé
    Homme Profil pro
    Webmaster
    Inscrit en
    Juin 2010
    Messages
    221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cambodge

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Juin 2010
    Messages : 221
    Par défaut
    Bonjour à tous,

    Après quelques jours au pays de Norodom Sihamoni, je me permets de faire remonter mon post afin de continuer ma structure.

    Je ne vais tout de même pas mettre l'entièreté de ma structure mais je voudrais savoir si mon exemple vous parait correct

    Merci d'avance,
    David
    Images attachées Images attachées  

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. [Javascript] Question pas difficile sur des listes dynamique...
    Par mulbek dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 12/04/2006, 09h55
  2. afficher les contenu d'une liste dynamiquement
    Par mzt.insat dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 06/04/2006, 18h02
  3. [PHP-JS] Liste dynamique
    Par SuperBn dans le forum Langage
    Réponses: 4
    Dernier message: 09/02/2006, 17h09
  4. Réponses: 1
    Dernier message: 16/01/2006, 17h36
  5. Rafraichissement liste dynamique
    Par Petitjean_85 dans le forum ASP
    Réponses: 5
    Dernier message: 14/06/2004, 10h21

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