[MYSQL] Pb de requête + optimisation structure table

WRInaute discret
Bonsoir :)

Je suis en train de mettre en place le système de commentaires sur mon site qui utilise phpbb pour la table des membres.
J'ai donc crée une table que je vais appeler ici "commentaires" avec une structure :

id | id_video | date | user_id | contenu

Première question, je me suis inspiré de la structure des tables de phpbb et j'ai mis un champs user_id. Est-ce que ca vaut vraiment le coup de faire ainsi ou autant mettre en plus le nom de l'user ?
Si je ne mets que l'user_id, la table est plus petite mais je dois faire une requête en plus pour aller chercher le username dans la table phpbb_users alors alors qu'avec le nom directement inscris, plus besoin.

En fonction de vos réponses, je déciderai donc pour la structure.

Si rajoute le nom de l'user, pas de pb pour la requête.
Par contre si je dois aller chercher le nom de l'user, est-ce qu'il y a moyen de faire une requête imbriquée ? J'ai essayé de chercher mais je ne suis pas vraiment au point ds les requêtes imbriquées.. Qqun pour me dire si c'est possible ?
Pour rappel les tables sont commentaires et phpbb_users et l'idée est de chercher tous les commentaires avec l'id_video fourni dans la requête.

En faisant deux requêtes :

Code:
SELECT id, date, user_id , contenu FROM commentaires WHERE id_video='$id' 

puis :

SELECT username FROM phpbb_users WHERE user_id ='$user_id'

Merci :)
 
WRInaute accro
Chacho a dit:
J'ai donc crée une table que je vais appeler ici "commentaires" avec une structure :

id | id_video | date | user_id | contenu

Première question, je me suis inspiré de la structure des tables de phpbb et j'ai mis un champs user_id. Est-ce que ca vaut vraiment le coup de faire ainsi ou autant mettre en plus le nom de l'user ?

Il vaut mieux en effet garder juste le user_id, ça évite de recopier plein de données inutiles (et plus longues à manipuler), et qui surtout pourraient changer de façon indépendante (même si je ne suis pas sûr qu'on puisse changer de pseudo dans phpbb, ça pourrait devenir possible un jour). On appelle ça "normaliser", et c'est une bonne habitude à prendre.

Chacho a dit:
Par contre si je dois aller chercher le nom de l'user, est-ce qu'il y a moyen de faire une requête imbriquée ?
Non, tu as besoin de faire une jointure (mais c'est probablemlent ça que tu veux dire).

Chacho a dit:
Code:
SELECT id, date, user_id , contenu FROM commentaires WHERE id_video='$id' 

puis :

SELECT username FROM phpbb_users WHERE user_id ='$user_id'

Jointure explicite:

SELECT c.id, c.date, c.contenu, u.username FROM commentaires c JOIN phpbb_users u ON (c.user_id = u.user_id) WHERE id_video='$id'

Jointure implicite:

SELECT c.id, c.date, c.contenu, u.username FROM commentaires c, phpbb_users u WHERE c.user_id = u.user_id AND id_video='$id'

Aussi, n'oublie pas de nettoyer/vérifier/escaper $id pour éviter une injection de code SQL.

Jacques.
 
WRInaute discret
Merci jcaron :)
Ok pour la structure des tables
et OK pour la requête, les deux sont toutes les deux aussi efficaces ou il y en a une de meilleure ?

En implémentant ceci, je me dis que si j'efface une utilisateur de la table php_users, la requete ne va plus aboutir... Est-ce qu'il y a un moyen de retourner un résultat même si le user_id n'existe plus dans cette table ?
 
Discussions similaires
Haut