lorik Posté 9 Janvier 2017 Posté 9 Janvier 2017 Hello les génies Bon, problème de CE2 : J'ai une requete basique avec jointure sur 2 tables. Pas de Pb. Par contre, sur les 83 champs des 2 tables, j'en ai 3 qui ont le même nom. Pour par me taper les 83 champs dans le select, avec 6 alias, je fais un basic 'select * blabla'. Je recupere là aussi basiquement (j'ai un niveau très très basique ) avec un mysql_fetch_array. Et là je coince, pour récuperer les données de mes 6 champs : $row['table.field'] me renvoi une erreur Undefined index... Bref, ma quesiton : ya une methode pour arriver à ne pas devoir se taper la saisie des 83 champs dans la requete ?? Pitié, dites moi que 'oui, t'es une quiche, ya une soluce !' pitié
BlackPage Posté 9 Janvier 2017 Posté 9 Janvier 2017 Salut, Problème classique... Tu fais ca : Select MT1.*, MT2.*, MT1.Champ1 as Champ1_Matable1, MT2.Champ1 as Champ1_Matable2 from Matable1 MT1 INNER JOIN Matable2 MT2 ON BLABLABLA Apres tu appelle chaque champ via son alias : print $row['Champ1_Matable1'] et print $row['Champ1_Matable2'] C'est un peu brut de décoffrage comme explication mais sur le principe c'est ca^^ Tu devrais t'en sortir facilement, si c'est pas le cas, poste ta requète et je la remanierai. Bon courage !
Aenoa Posté 10 Janvier 2017 Posté 10 Janvier 2017 Bonjour, Tout d'abord, je ne peut que te suggérer de laisser tomber mysql_*. Ces méthodes sont déjà dépréciées en 5.X et totalement désactivées en 7.0, ce qui causera une armée de FATAL ERROR: MYSQL_FETCH_ARRAY IS NOT A FUNCTION et autres joyeusetés si ton projet venait à tourner dans un environnement 7.0. Ensuite, en effet, tu as la possibilité de re-sélectionner une colonne d'une table sous un autre nom grâce au mot clé AS. Comme indiqué par BlackPage, qui te propose une solution. Pour résumer: * Emploie une requête SQL similaire à ceci: SELECT test1.*, test2.*, test2.name AS t2name FROM test1 INNER JOIN test2 ON test2.test1_id = test1.id; * Le résultat sera semblable à celui-ci (utilisant des dummy-data) MariaDB [db]> select test1.*, test2.*, test2.name as t2name FROM test1 INNER JOIN test2 ON test2.test1_id = test1.id; +----+---------+--------+----+---------+----------+----------+---------+ | id | name | potato | id | name | pccotato | test1_id | t2name | +----+---------+--------+----+---------+----------+----------+---------+ | 3 | Test1-3 | C | 1 | Test2-1 | D | 3 | Test2-1 | | 2 | Test1-2 | B | 2 | Test2-2 | E | 2 | Test2-2 | | 1 | Test1-1 | A | 3 | Test2-3 | F | 1 | Test2-3 | +----+---------+--------+----+---------+----------+----------+---------+ 3 rows in set (0.01 sec) * N'utilise plus mysql_ en PHP. Privilégie la librairie PDO qui elle est supportée, et te permet de faire l'échappement des données bien plus facilement, en orienté objet. http://php.net/manual/en/ref.pdo-mysql.php * Utilise des préfixes ou suffixes dans tes colonnes, pour chaque table. Par exemple: MariaDB [db]> describe users; +--------------+--------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +--------------+--------------+------+-----+---------+-------+ | usr_id | int(11) | YES | | NULL | | | usr_name | varchar(30) | YES | | NULL | | | usr_email | varchar(240) | YES | | NULL | | | usr_password | varchar(150) | YES | | NULL | | +--------------+--------------+------+-----+---------+-------+ 4 rows in set (0.00 sec) MariaDB [db]> describe vehicles; +-----------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-----------+-------------+------+-----+---------+-------+ | veh_id | int(11) | YES | | NULL | | | veh_color | varchar(40) | YES | | NULL | | | veh_year | int(4) | YES | | NULL | | | veh_km | int(11) | YES | | NULL | | | veh_usr | int(11) | YES | | NULL | | +-----------+-------------+------+-----+---------+-------+ 5 rows in set (0.00 sec) Cela te permet, non seulement de toujours savoir à quelle table la colonne corresponds, mais cela évite tout doublon entre deux tables, le préfixe (ou suffixe) étant unique à une table. Dans mon exemple, j'utilise un préfixe, mais les gens ont plutôt tendance à utiliser un suffixe, tel que IDUSR, NAMEUSR, EMAILUSR, PASSWORDUSR, IDVEH, COLORVEH, YEARVEH, etc. Bonne journée!
lorik Posté 10 Janvier 2017 Auteur Posté 10 Janvier 2017 Merci les gars, la vie est plus belle désormais
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant