PHP / MySql et les tables
Fermé
Utilisateur anonyme
-
17 août 2001 à 17:09
PhP Messages postés 1770 Date d'inscription lundi 11 décembre 2000 Statut Membre Dernière intervention 23 décembre 2009 - 22 août 2001 à 17:51
PhP Messages postés 1770 Date d'inscription lundi 11 décembre 2000 Statut Membre Dernière intervention 23 décembre 2009 - 22 août 2001 à 17:51
A voir également:
- PHP / MySql et les tables
- Easy php - Télécharger - Divers Web & Internet
- Tables des matières word - Guide
- Mysql community server - Télécharger - Bases de données
- Tables ascii - Guide
- Phpmyadmin a tenté de se connecter au serveur mysql, et le serveur a rejeté la connexion. merci de vérifier les valeurs de host, username et password dans la configuration et de s'assurer qu'elles correspondent aux informations fournies par l'administrateur du serveur mysql. ✓ - Forum PHP
5 réponses
c'est un peu complexe
il faudrait etudier le pb sur le papier
un option un table de pointage qui definit la langue et la page et qui pointe sur une autre table pour affichier la bonne page avec ses traductions
un peu complexe a mettre en oeuvre
ca te permettra d'avoir des pages dynamiques
salut
il faudrait etudier le pb sur le papier
un option un table de pointage qui definit la langue et la page et qui pointe sur une autre table pour affichier la bonne page avec ses traductions
un peu complexe a mettre en oeuvre
ca te permettra d'avoir des pages dynamiques
salut
Bobinours
Messages postés
2898
Date d'inscription
jeudi 26 avril 2001
Statut
Membre
Dernière intervention
21 mars 2013
504
20 août 2001 à 05:18
20 août 2001 à 05:18
Bien entendu, les deux choix sont possibles et discutables... Pour ma part, et par simplicité et clarté, j'opterais pour faire une table par langue. Ceci sera avantageux si tu n'as pas besoin de faire sans cesse des relations entre les langues. Sinon tu pourras toujours faire des jointures...
-= Bobinours =-
-= Bobinours =-
Utilisateur anonyme
21 août 2001 à 11:59
21 août 2001 à 11:59
j'ai 19 table, si je fais une table par langue, j'obtiendrais 19*nb table.
je n'ai strictement aucune idée de la faisabilité ou des moyen a mettre en oeuvre ...
au mieux vaux PHP3 ou PHP4 ??
je n'ai strictement aucune idée de la faisabilité ou des moyen a mettre en oeuvre ...
au mieux vaux PHP3 ou PHP4 ??
Bobinours
Messages postés
2898
Date d'inscription
jeudi 26 avril 2001
Statut
Membre
Dernière intervention
21 mars 2013
504
22 août 2001 à 02:42
22 août 2001 à 02:42
Dans ce cas, je ferais carrement 1 base de données par Pays :
FR:
- table 1
- table 2
...
- table 19
UK:
- table 1
- table 2
...
- table 19
...
PHP4 est mieux que PHP3, plus rapide et de nouvelles fonctionnalités ont été ajoutées (comme les sessions). Mais pour ton cas je ne sais pas si ça a une importance...
-= Bobinours =-
-= Bobinours =-
FR:
- table 1
- table 2
...
- table 19
UK:
- table 1
- table 2
...
- table 19
...
PHP4 est mieux que PHP3, plus rapide et de nouvelles fonctionnalités ont été ajoutées (comme les sessions). Mais pour ton cas je ne sais pas si ça a une importance...
-= Bobinours =-
-= Bobinours =-
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
PhP
Messages postés
1770
Date d'inscription
lundi 11 décembre 2000
Statut
Membre
Dernière intervention
23 décembre 2009
606
22 août 2001 à 17:51
22 août 2001 à 17:51
Salut ZIG1
Pour ce qui est des tables PHP n'intervient pas : alors PHP3 ou PHP4 c'est juste une question de provider. Renseigne toi auprès de
lui pour savoir quelle version il supporte.
Quant aux différences entres les 2 versions ... aucune idée mais je suppose que pour les
cdes liées à MySql il n'y a rien de bien nouveau.
Par contre le module MySql livré avec la version PHP4 est peu être plus évolué.
Pour la structure même de ta base c'est à toi de bien penser la chose...
Chaque élément à traduire ne doit figurer que sous la forme d'une clé (ID_LANGUE pa ex) et ce dans tous les champs de ttes tes tables que tu en ais 1 ou 19 peu importe. Du moins c'est comme çà
que je procéderais.
Voici un ex : la gestion d'un petit menu FRANCAIS ou ANGLAIS
Tu noteras que le table MENU ne comporte aucun libellé "en clair" !
Juste une clé vers la ou les tables des langues.
1) Cas avec une seule table pour toutes les langues
Table : MENU
+-----------------+
|ID_MENU|ID_LANGUE|
+-------+---------+
| 0001 | 00001 |
| 0001 | 00003 |
| 0001 | 00005 |
| 0001 | 00002 |
| 0001 | 00004 |
+-----------------+
Table : LANGUE
+---------------------------------+
|ID_LANGUE|TXT_GB |TXT_FR |
+---------+-----------+-----------+
| 00001 |OPEN |OUVRIR |
| 00002 |CLOSE |FERMER |
| 00003 |SEARCH |RECHERCHER |
| 00004 |QUIT |QUITTER |
| 00005 |FILE |FICHIER |
+---------------------------------+
SQL pour menu en FRANCAIS :
select MENU.*, LANGUE.TXT_FR as LIBELLE
from MENU inner join LANGUE on MENU.ID_LANGUE=LANGUE.ID_LANGUE
Résultat de la jointure :
+----------------------------+
|ID_MENU|ID_LANGUE|LIBELLE |
+-------+---------+----------+
| 0001 | 00001 |OUVRIR |
| 0001 | 00003 |RECHERCHER|
| 0001 | 00005 |FICHIER |
| 0001 | 00002 |FERMER |
| 0001 | 00004 |QUITTER |
+----------------------------+
SQL pour menu en ANGLAIS :
select MENU.*, LANGUE.TXT_GB as LIBELLE
from MENU inner join LANGUE on MENU.ID_LANGUE=LANGUE.ID_LANGUE
Résultat de la jointure :
+----------------------------+
|ID_MENU|ID_LANGUE|LIBELLE |
+-------+---------+----------+
| 0001 | 00001 |OPEN |
| 0001 | 00003 |SEARCH |
| 0001 | 00005 |FILE |
| 0001 | 00002 |CLOSE |
| 0001 | 00004 |QUIT |
+----------------------------+
L'utilisation de l'alias 'LIBELLE' pour le texte au lieu du nom du champ te permet
de toujours faire référence dans ton code PHP à la même variable LIBELLE et ce qlque soit
la langue.
Tu noteras que les 2 tables résultantes des jointures ont bien la même structure !
En plus si tu donnes un nom bien précis au champ de chaque langue comme ici "TXT_"+Code_pays
alors tu peux n'avoir qu'une seule requête grâce à PHP
Ex de code PHP :
$code_pays="FR";
$sql="select MENU.*, LANGUE.TXT_".$code_pays." as LIBELLE
from MENU inner join LANGUE on MENU.ID_LANGUE=LANGUE.ID_LANGUE";
etc ...
1-1) Variante du cas 1 : une seule table des langues :
Table : LANGUE
+-----------------------------+
|ID_LANGUE|ID_PAYS|TXT |
+---------+-------+-----------+
| 00001 | FR |OUVRIR |
| 00002 | FR |FERMER |
| 00003 | FR |RECHERCHER |
| 00004 | FR |QUITTER |
| 00005 | FR |FICHIER |
| 00001 | GB |OPEN |
| 00002 | GB |CLOSE |
| 00003 | GB |SEARCH |
| 00004 | GB |QUIT |
| 00005 | GB |FILE |
+-----------------------------+
ou encore ...
Table : LANGUE
+----------------------+
|ID_LANGUE |TXT |
+----------+-----------+
| 00001FR |OUVRIR |
| 00002FR |FERMER |
| 00003FR |RECHERCHER |
| 00004FR |QUITTER |
| 00005FR |FICHIER |
| 00001GB |OPEN |
| 00002GB |CLOSE |
| 00003GB |SEARCH |
| 00004GB |QUIT |
| 00005GB |FILE |
+----------------------+
Mais dans ce cas un nbr de ligne est plus important est testé lors des jointures.
2) Cas avec une table par langue :
Table : MENU
+-----------------+
|ID_MENU|ID_LANGUE|
+-------+---------+
| 0001 | 00001 |
| 0001 | 00003 |
| 0001 | 00005 |
| 0001 | 00002 |
| 0001 | 00004 |
+-----------------+
Table : LANGUE_GB
+---------------------+
|ID_LANGUE|TXT |
+---------+-----------+
| 00001 |OPEN |
| 00001 |CLOSE |
| 00001 |SEARCH |
| 00001 |QUIT |
| 00001 |FILE |
+---------------------+
Table : LANGUE_FR
+---------------------+
|ID_LANGUE|TXT |
+---------+-----------+
| 00001 |OUVRIR |
| 00001 |FERMER |
| 00001 |RECHERCHER |
| 00001 |QUITTER |
| 00001 |FICHIER |
+---------------------+
SQL pour menu en FRANCAIS :
select MENU.*, LANGUE_FR.TXT as LIBELLE
from MENU inner join LANGUE on MENU.ID_LANGUE=LANGUE_FR.ID_LANGUE
Résultat de la jointure :
+----------------------------+
|ID_MENU|ID_LANGUE|LIBELLE |
+-------+---------+----------+
| 0001 | 00001 |OUVRIR |
| 0001 | 00003 |RECHERCHER|
| 0001 | 00005 |FICHIER |
| 0001 | 00002 |FERMER |
| 0001 | 00004 |QUITTER |
+----------------------------+
SQL pour menu en ANGLAIS :
select MENU.*, LANGUE_GB.TXT as LIBELLE
from MENU inner join LANGUE on MENU.ID_LANGUE=LANGUE.ID_LANGUE
Résultat de la jointure :
+----------------------------+
|ID_MENU|ID_LANGUE|LIBELLE |
+-------+---------+----------+
| 0001 | 00001 |OPEN |
| 0001 | 00003 |SEARCH |
| 0001 | 00005 |FILE |
| 0001 | 00002 |CLOSE |
| 0001 | 00004 |QUIT |
+----------------------------+
Ex de code PHP générique :
$code_pays="FR";
$sql="select MENU.*, LANGUE_".$code_pays.".TXT as LIBELLE
from MENU inner join LANGUE_".$code_pays." on MENU.ID_LANGUE=LANGUE_".$code_pays.".ID_LANGUE";
Dans un cas c'est le nom du champ qui est variable, dans l'autre le nom de la table.
Cas n° 1 : une table des langues
Avantages :
- on ne met à jour qu'un seul enregistrement pour toutes les langues.
- on peut comparer facilement les traductions (de moins tq le texte à traduire est court !)
dans toutes les langues en utilisant simplement PhpMyAdmin
- pas de risque d'oublier une langue : au pire le champ est à blanc
- 1 seule table à gérer
- le code PHP est un peu plus simple
Inconvenients :
- la taille de la table peut augmenter très vite
Cas n°2 : une table par langue
Avantages :
- peut-être une meilleur visibilité
- tables "réduites"
Inconvénients :
- il faut penser à mettre à jour chaque table en même temps.
- il faut que les clés (ici ID_LANGUE) coïncident entres les tables.
Personnellement je pencherais volontier pour le cas n°1 du début. :)
@+
Philippe
PS : fait un copier-coller du msg dans notepad pour avoir un alignement correct
Pour ce qui est des tables PHP n'intervient pas : alors PHP3 ou PHP4 c'est juste une question de provider. Renseigne toi auprès de
lui pour savoir quelle version il supporte.
Quant aux différences entres les 2 versions ... aucune idée mais je suppose que pour les
cdes liées à MySql il n'y a rien de bien nouveau.
Par contre le module MySql livré avec la version PHP4 est peu être plus évolué.
Pour la structure même de ta base c'est à toi de bien penser la chose...
Chaque élément à traduire ne doit figurer que sous la forme d'une clé (ID_LANGUE pa ex) et ce dans tous les champs de ttes tes tables que tu en ais 1 ou 19 peu importe. Du moins c'est comme çà
que je procéderais.
Voici un ex : la gestion d'un petit menu FRANCAIS ou ANGLAIS
Tu noteras que le table MENU ne comporte aucun libellé "en clair" !
Juste une clé vers la ou les tables des langues.
1) Cas avec une seule table pour toutes les langues
Table : MENU
+-----------------+
|ID_MENU|ID_LANGUE|
+-------+---------+
| 0001 | 00001 |
| 0001 | 00003 |
| 0001 | 00005 |
| 0001 | 00002 |
| 0001 | 00004 |
+-----------------+
Table : LANGUE
+---------------------------------+
|ID_LANGUE|TXT_GB |TXT_FR |
+---------+-----------+-----------+
| 00001 |OPEN |OUVRIR |
| 00002 |CLOSE |FERMER |
| 00003 |SEARCH |RECHERCHER |
| 00004 |QUIT |QUITTER |
| 00005 |FILE |FICHIER |
+---------------------------------+
SQL pour menu en FRANCAIS :
select MENU.*, LANGUE.TXT_FR as LIBELLE
from MENU inner join LANGUE on MENU.ID_LANGUE=LANGUE.ID_LANGUE
Résultat de la jointure :
+----------------------------+
|ID_MENU|ID_LANGUE|LIBELLE |
+-------+---------+----------+
| 0001 | 00001 |OUVRIR |
| 0001 | 00003 |RECHERCHER|
| 0001 | 00005 |FICHIER |
| 0001 | 00002 |FERMER |
| 0001 | 00004 |QUITTER |
+----------------------------+
SQL pour menu en ANGLAIS :
select MENU.*, LANGUE.TXT_GB as LIBELLE
from MENU inner join LANGUE on MENU.ID_LANGUE=LANGUE.ID_LANGUE
Résultat de la jointure :
+----------------------------+
|ID_MENU|ID_LANGUE|LIBELLE |
+-------+---------+----------+
| 0001 | 00001 |OPEN |
| 0001 | 00003 |SEARCH |
| 0001 | 00005 |FILE |
| 0001 | 00002 |CLOSE |
| 0001 | 00004 |QUIT |
+----------------------------+
L'utilisation de l'alias 'LIBELLE' pour le texte au lieu du nom du champ te permet
de toujours faire référence dans ton code PHP à la même variable LIBELLE et ce qlque soit
la langue.
Tu noteras que les 2 tables résultantes des jointures ont bien la même structure !
En plus si tu donnes un nom bien précis au champ de chaque langue comme ici "TXT_"+Code_pays
alors tu peux n'avoir qu'une seule requête grâce à PHP
Ex de code PHP :
$code_pays="FR";
$sql="select MENU.*, LANGUE.TXT_".$code_pays." as LIBELLE
from MENU inner join LANGUE on MENU.ID_LANGUE=LANGUE.ID_LANGUE";
etc ...
1-1) Variante du cas 1 : une seule table des langues :
Table : LANGUE
+-----------------------------+
|ID_LANGUE|ID_PAYS|TXT |
+---------+-------+-----------+
| 00001 | FR |OUVRIR |
| 00002 | FR |FERMER |
| 00003 | FR |RECHERCHER |
| 00004 | FR |QUITTER |
| 00005 | FR |FICHIER |
| 00001 | GB |OPEN |
| 00002 | GB |CLOSE |
| 00003 | GB |SEARCH |
| 00004 | GB |QUIT |
| 00005 | GB |FILE |
+-----------------------------+
ou encore ...
Table : LANGUE
+----------------------+
|ID_LANGUE |TXT |
+----------+-----------+
| 00001FR |OUVRIR |
| 00002FR |FERMER |
| 00003FR |RECHERCHER |
| 00004FR |QUITTER |
| 00005FR |FICHIER |
| 00001GB |OPEN |
| 00002GB |CLOSE |
| 00003GB |SEARCH |
| 00004GB |QUIT |
| 00005GB |FILE |
+----------------------+
Mais dans ce cas un nbr de ligne est plus important est testé lors des jointures.
2) Cas avec une table par langue :
Table : MENU
+-----------------+
|ID_MENU|ID_LANGUE|
+-------+---------+
| 0001 | 00001 |
| 0001 | 00003 |
| 0001 | 00005 |
| 0001 | 00002 |
| 0001 | 00004 |
+-----------------+
Table : LANGUE_GB
+---------------------+
|ID_LANGUE|TXT |
+---------+-----------+
| 00001 |OPEN |
| 00001 |CLOSE |
| 00001 |SEARCH |
| 00001 |QUIT |
| 00001 |FILE |
+---------------------+
Table : LANGUE_FR
+---------------------+
|ID_LANGUE|TXT |
+---------+-----------+
| 00001 |OUVRIR |
| 00001 |FERMER |
| 00001 |RECHERCHER |
| 00001 |QUITTER |
| 00001 |FICHIER |
+---------------------+
SQL pour menu en FRANCAIS :
select MENU.*, LANGUE_FR.TXT as LIBELLE
from MENU inner join LANGUE on MENU.ID_LANGUE=LANGUE_FR.ID_LANGUE
Résultat de la jointure :
+----------------------------+
|ID_MENU|ID_LANGUE|LIBELLE |
+-------+---------+----------+
| 0001 | 00001 |OUVRIR |
| 0001 | 00003 |RECHERCHER|
| 0001 | 00005 |FICHIER |
| 0001 | 00002 |FERMER |
| 0001 | 00004 |QUITTER |
+----------------------------+
SQL pour menu en ANGLAIS :
select MENU.*, LANGUE_GB.TXT as LIBELLE
from MENU inner join LANGUE on MENU.ID_LANGUE=LANGUE.ID_LANGUE
Résultat de la jointure :
+----------------------------+
|ID_MENU|ID_LANGUE|LIBELLE |
+-------+---------+----------+
| 0001 | 00001 |OPEN |
| 0001 | 00003 |SEARCH |
| 0001 | 00005 |FILE |
| 0001 | 00002 |CLOSE |
| 0001 | 00004 |QUIT |
+----------------------------+
Ex de code PHP générique :
$code_pays="FR";
$sql="select MENU.*, LANGUE_".$code_pays.".TXT as LIBELLE
from MENU inner join LANGUE_".$code_pays." on MENU.ID_LANGUE=LANGUE_".$code_pays.".ID_LANGUE";
Dans un cas c'est le nom du champ qui est variable, dans l'autre le nom de la table.
Cas n° 1 : une table des langues
Avantages :
- on ne met à jour qu'un seul enregistrement pour toutes les langues.
- on peut comparer facilement les traductions (de moins tq le texte à traduire est court !)
dans toutes les langues en utilisant simplement PhpMyAdmin
- pas de risque d'oublier une langue : au pire le champ est à blanc
- 1 seule table à gérer
- le code PHP est un peu plus simple
Inconvenients :
- la taille de la table peut augmenter très vite
Cas n°2 : une table par langue
Avantages :
- peut-être une meilleur visibilité
- tables "réduites"
Inconvénients :
- il faut penser à mettre à jour chaque table en même temps.
- il faut que les clés (ici ID_LANGUE) coïncident entres les tables.
Personnellement je pencherais volontier pour le cas n°1 du début. :)
@+
Philippe
PS : fait un copier-coller du msg dans notepad pour avoir un alignement correct