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 :

Quel est la meilleur pratique pour extraire des données de tables liées


Sujet :

PHP & Base de données

  1. #1
    Membre expérimenté
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 160
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 160
    Par défaut Quel est la meilleur pratique pour extraire des données de tables liées
    Bonjour,

    J'ai un doute sur le code

    J'ai un terrain (field) qui a des stations. Un autre terrain avec d'autres stations...

    J'ai une table 'fields' qui conteint les informations sur les terrains. Elle a une colonne id_field ('primary_key' + Auto incrément)
    J'ai une autre table 'stations' qui contient toutes les connées des stations. Elle est liée à 'fields' grâce a la colonne 'fields_id_field'

    Pour extraire les données des stations liées au champs (fields), je le faisais ainsi

    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    (isset($_SESSION['user']['fields'][0])) ? $fi = $_SESSION['user']['fields'][0] : $fi = $field_demo;
    $sql_select = 'SELECT s.id_station,s.station_name,s.station_description,s.station_longname, s.active FROM stations AS s
    						INNER JOIN fields AS f ON s.fields_id_field = f.id_field
    						WHERE s.active = 1 AND f.id_field = '. $fi .'
    						ORDER BY s.id_station ASC';
    			$sql_result = $connect->query($sql_select);

    Ca fonctionne, mais refais une autre partie de mon code ou je dois extraire les mêmes données. Je l'ai fais comme ceci

    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    (isset($_SESSION['user']['fields'][0])) ? $fi = $_SESSION['user']['fields'][0] : $fi = $field_demo;
    $sql_stations = 'SELECT s.id_station,s.station_name,s.station_description,s.station_longname, s.active FROM fields AS f
    			INNER JOIN stations AS s ON s.fields_id_field = f.id_field
    			WHERE s.active = 1 AND f.id_field ='. $fi .' 
    			ORDER BY s.id_station ASC';
    			$sql_result_stations = $connect->query($sql_stations);

    Ca me semble faire la même chose, mais est-ce que la première manière est correct?
    Est-ce vraiment la même chose?

  2. #2
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 619
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 619
    Par défaut
    si vous faites la même jointure sur les mêmes tables, vous aurez le même résultat même si les 2 tables sont échangées entre le "FROM" et "INNER JOIN".
    ensuite si vous avez besoin des mêmes informations à 2 endroits, c'est plus pratique d'utiliser une fonction pour cela.

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    1- Il faut VRAIMENT que tu APPRENNES à faire des requêtes PRÉPARÉES !...

    2- Ce qui est valable pour "INNER JOIN" et "FULL JOIN" ne l'est pas pour "LEFT JOIN" et "RIGHT JOIN".

    Voir : Les JOINTURES SQL

    Il suffit de regarder le schéma pour s'en convaincre :

    Nom : sql-joins.png
Affichages : 1894
Taille : 61,7 Ko

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    ".... FROM [left table] XXXX JOIN [right table] ON ...."
    • Autant on peut intervertir les 2 tables avec "INNER JOIN" et "FULL JOIN",
    • autant l'ordre est important avec "LEFT JOIN" et "RIGHT JOIN".
    Dernière modification par Invité ; 15/10/2019 à 10h47.

  4. #4
    Membre expérimenté
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 160
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 160
    Par défaut
    Bonjour à tous
    Merci pour vos réponses.
    Oui jreaux, j'ai encore du mal a capter les diffrences entre LEFT, INNER , RIGH join.
    J'avais pourtant essayer les différents JOIN sur ma requête, mais je n'ai pas vi de différence.
    Je vais lire ton lien.
    Merci

  5. #5
    Invité
    Invité(e)
    Par défaut
    Il faut regarder les schémas.

    Tu as des fields :
    • certains fields ont des stations
    • d'autres n'en ont pas

    • "SELECT ... FROM fields INNER JOIN stations ON ..." : NE renverra QUE les fields QUI ONT une/des station(s).
    • "SELECT ... FROM fields LEFT JOIN stations ON ..." : renverra TOUS les fields, MEME ceux SANS station.

    Si on va plus loin (moins utilisé) :
    • "SELECT ... FROM fields FULL JOIN stations ON ..." : renverra TOUS les fields ET TOUTES les stations.
    • "SELECT ... FROM stations RIGHT JOIN fields ON ..." : renverra TOUTES les stations, MEME celles SANS field .

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL] Quel est la meilleur pratique pour créer un systeme d'authentification lié à des BDs
    Par pierrot10 dans le forum PHP & Base de données
    Réponses: 15
    Dernier message: 08/10/2019, 02h37
  2. [Débutant] Quel est le meilleur moyen pour gérer des documents dans CRM ?
    Par patsai dans le forum Microsoft Dynamics CRM
    Réponses: 1
    Dernier message: 04/06/2010, 22h22
  3. Quel est le meilleur controle pour faire des graph
    Par stdebordeau dans le forum Windows Forms
    Réponses: 2
    Dernier message: 28/09/2009, 12h17
  4. Réponses: 4
    Dernier message: 26/09/2008, 13h16
  5. Réponses: 12
    Dernier message: 24/09/2007, 14h35

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