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
    Débutant  
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 096
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 096
    Points : 944
    Points
    944
    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?
    Il ne suffit pas de tout savoir. Vouloir et persévérer, c'est déjà presque tout!

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

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 235
    Points : 15 532
    Points
    15 532
    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 : 1846
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
    Débutant  
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 096
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 096
    Points : 944
    Points
    944
    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
    Il ne suffit pas de tout savoir. Vouloir et persévérer, c'est déjà presque tout!

  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