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

Discussion dans 'Développement d'un site Web ou d'une appli mobile' créé par Chacho, 18 Janvier 2008.

  1. Chacho
    Chacho WRInaute discret
    Inscrit:
    16 Septembre 2007
    Messages:
    72
    J'aime reçus:
    0
    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 :)
     
  2. jcaron
    jcaron WRInaute accro
    Inscrit:
    13 Février 2004
    Messages:
    2 579
    J'aime reçus:
    0
    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.

    Non, tu as besoin de faire une jointure (mais c'est probablemlent ça que tu veux dire).

    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.
     
  3. Chacho
    Chacho WRInaute discret
    Inscrit:
    16 Septembre 2007
    Messages:
    72
    J'aime reçus:
    0
    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 ?
     
Chargement...
Similar Threads - [MYSQL] requête optimisation Forum Date
[MySQL] Requête SELECT et INSERT entre 3 tables liées+Aide Développement d'un site Web ou d'une appli mobile 30 Avril 2014
[MySQL] sélectionner la dernière note pour chaque élève en une seule requète ? Développement d'un site Web ou d'une appli mobile 12 Avril 2012
[Mysql] Requête PDO avec variable php Développement d'un site Web ou d'une appli mobile 16 Février 2012
[Mysql] Requête PDO aléatoire Développement d'un site Web ou d'une appli mobile 7 Février 2012
[MySQL] Requête SELECT entre 3 tables liées Développement d'un site Web ou d'une appli mobile 10 Août 2011
[mysql] trier les résultats d'une requête selon une table non liée à la requête Développement d'un site Web ou d'une appli mobile 15 Avril 2011
(Résolu par une jointure)[MYSQL] Dissocier ma requête ? Administration d'un site Web 16 Juin 2008
[MySQL] Requête imbriquée Développement d'un site Web ou d'une appli mobile 25 Juin 2007
[MySQL] requête mal formulée ? Développement d'un site Web ou d'une appli mobile 19 Décembre 2006
[résolu][mysql] faire un "NOT LIKE" sur une chaîne contenant des / Développement d'un site Web ou d'une appli mobile 25 Octobre 2014
[MySQL] Liste (select) avec des lignes au hasard Développement d'un site Web ou d'une appli mobile 23 Octobre 2014
[MySQL] Nombre d'enregistrements sur des horaires précis Développement d'un site Web ou d'une appli mobile 19 Juillet 2013
[MYSQL] Comment remplacer caractères dans tous les champs de toutes les tables d'une base? Développement d'un site Web ou d'une appli mobile 11 Juillet 2013
[MYSQL] Une sorte de "OR JOIN" ? Développement d'un site Web ou d'une appli mobile 5 Juillet 2013
[MYSQL] Tri par date Développement d'un site Web ou d'une appli mobile 7 Septembre 2011
[MySQL] rechercher une valeur dans un champ sérialisé Développement d'un site Web ou d'une appli mobile 10 Août 2011
[MySQL] addslashes et stripslashes Développement d'un site Web ou d'une appli mobile 9 Août 2011
[résolu] [mysql] Conditions WHERE avec AND et OR Développement d'un site Web ou d'une appli mobile 13 Mai 2011
[résolu] [mysql] passer un champ à une valeur donnée pour tous les enregistrements Développement d'un site Web ou d'une appli mobile 25 Mars 2011
[MySQL] INSERT / UPDATE conditionnel Développement d'un site Web ou d'une appli mobile 1 Février 2011