|
Formations privées Rue Albert 1er, 7 6810 Pin - Chiny (/fax: 061/32.00.15 |
|
|
|
FORMATIONS |
Le MAGASIN YBET |
PRODUITS et SERVICES |
| Logiciels de gestion | ||
| Logiciel compta CIEL |
|
27. Base de donnée relationnelle MySQL1 Introduction - 2. Petit exemple de départ - 3. La méthode Where - 4. La méthode Join Avant de voire les requêtes spécifiques, voyons d'abord ce qu'est une base de donnée relationnelle. Il y a d'abord "relation", le terme devrait déjà aider mais voyons plutôt une petite explication plus concrète: Supposons un module de facturation. Il reprend d'un coté des clients, de l'autre côté des factures. A chaque facture est attachée un client. Dès lors, plutôt que d'encoder à chaque fois les coordonnées du client pour chaque nouvelle livraison, on va créer deux tables MySQL, l'une reprend la facture en elle même, l'autre la fiche du client. L'astuce est de créer une liaison entre les deux. Elle se fait généralement via un champ commun, par exemple le code. Celui-ci est repris dans les deux tables, ce qui permet de relier les deux tables entre-elles lorsque c'est nécessaire. De même, on peut créer une relation entre les codes des produits et leur fiche. Le gros avantage est lié non seulement au gain de temps lors de l'encodage, mais aussi au gain de place dans les tables ou même à la possibilité de changer l'adresse du client sans devoir retaper toutes les anciens documents. Par contre, la clé de la relation doit être unique, pas question que la même facture soit reliée à deux clients différents. MySQL est nativement relationnel (au même titre qu'Access, DBase, ... ou même MsSQL de Microsoft) mais nous avons déjà vu que PHP et MySQL ne sont pas en fait liés. Le langage de programmation a simplement créer des fonctions spécifiques lui permettant d'exécuter des requêtes, une sorte de symbiose plus ou moins réussie entre deux logiciels du monde "libre". Les relations étant relativement complexes, avec de nombreuses options, cette partie de la formation est volontairement épurée de bon nombre de cas spéciaux. Si elle ne sera pas tout à fait complète, elle devrait permettre de créer et d'utiliser rapidement des commandes et des tables relationnelles 2. Petit exemple de départCette partie va reprendre deux tables à créer sous easyPhp (PhPMyadmin) ou dans la base de donnée fournie avec votre hébergement. En local, créez la base de donnée RELATION. La première table reprend l'utilisateur: Table USER
la deuxième reprend ses messages.
Entrez manuellement quelques valeurs (3 minimum) dans les 2 champs et mettant au moins un nombre égal dans user_id et message_user_id. L'entre d'un message par un utilisateur va donc remplir 3 champs dans la table MESSAGE, par contre l'affichage va permettre d'afficher également le nom de l'utilisateur. Le premier avantage, si l'utilisateur change de nom (ou de pseudo), ses messages lui seront toujours associés. Comme nous avons créé user_id comme clé primaire, nous savons déjà que la valeur de ce champ sera unique dans la table user. L'ouverture de la base de donnée se fait par la liste de commandes ci-dessous, elle peut éventuellement être inscrite dans un fichier en include:
Deux méthodes peuvent au départ être utilisée, la mauvaise (disons plutôt l'ancienne donc à éviter):
L'autre méthode va utiliser le JOIN et la requête va être de type
Par principe, mais surtout pour éviter des problèmes si des champs ont le même nom dans les différentes tables liées et pour augmenter la vitesse de traitement, sélectionnez les champs à utiliser et nom pas "SELECT *". 3. La méthode WhereCette méthode n'est pas la meilleure, notamment parce que la clause WHERE va mélanger des conditions de liaisons de tables et des conditions de valeurs des champs mais débutons par celle-ci. Elle ne doit plus être utilisée. Reprenons nos tables ci-dessus.
La première partie est finalement le plus important, c'est la requête qui va afficher toutes les messages de la table message en affichant le nom de l'utilisateur repris dans la table user via la relation user.user_id=message.message_user_id. Remarquez que le pour délimiter les champs en fonction de leur table, nous avons ajouter le "nom de la table." devant. Ceci peut également être fait dans les noms des champs si deux noms de champs sont identiques dans les différentes tables. Quoique intéressante, cette requête affiche toutes les valeurs. Supposons que nous voulons uniquement les messages de l'utilisateur numéro 1, la requête va reprendre une deuxième condition dans le where.
C'est le gros problème de cette méthode au niveau lecture de la requête, les conditions de jointures sont complètement mélangées avec les conditions restrictives des valeurs, mais elle fonctionne. 4. La méthode JOINC'est la méthode la plus propre, elle va séparer les liaisons des conditions de valeurs. Plusieurs types de jointures existent, notamment LEFT JOIN (par la gauche), RIGHT JOIN (par la droite) et INNER JOIN. Avant de commencer, nous allons créer une troisième table: Table renseignement
Elle reprend finalement des renseignements généraux sur l'utilisateur et est liée à la table user par le champ renseignement_nom. 4.1. INNER JOINC'est la jointure par défaut qui compare deux tables et retourne tous les enregistrement comportant une concordance de liaison. Reprenons notre exemple ci-dessus et remplaçons la requête par:
Ceci est exactement équivalent à la méthode where sans conditions de champs. Si nous exécutons en plus une condition de valeur (par exemple, users_id=1, la requête SQL en PHP devient:
Effectivement, la méthode INNER JOIN est finalement équivalente à la condition Where standard, si ce n'est la séparation des conditions de valeurs et de liaison. Les deux méthodes suivantes vont nous permettre de peaufiner les requêtes en signalant les directions des jointures. Elles seront plus précises, mais plus complexes. Par contre, elles vont permettre de créer des liaisons entre 3 tables avec comme relations table1 <-> table2 <-> table3, avec aucune liaisons entre les tables 1 et 2. 4.2. LEFT JOINPour une liaison par la gauche, nous allons utiliser la commande LEFT Join. En plus des concordances, la commande va afficher toutes les lignes de la table de gauche, même s'il n'y a pas de concordances. Dans notre cas, les utilisateurs sans messages seront donc également affichées.
Un petit exemple d'affichage donnerait:
4.3. Left Join sur trois tables.Nous allons cette fois compliquer un peu en utilisant les données de 3 tables.
Message est la table principale (tout affiché à cause du Left Join), elle est reliée à la table user, elle même reliée à la table renseignement.
Pour une table de 3 utilisateurs (users1,2 et 3 avec 2 messages pour le premier et 1 pour l'utilisateur 2 (pas pour le troisième), ceci donne: users 1- numéro message: 1 - contenu:message 1 4.4. Mélange.Pour cette partie, nous allons relier nos trois tables en utilisant les parties LEFT et RIGHT JOIN. Avant toute chose, des tables complétées ou non vont afficher des résultats tout à fait différents: le contenu des liaisons sont être complètement complété. En plus, inverser la commande RIGHT avec LEFT va aussi changer les résultats. |
|
Dans la même série de formations en ligne. |
Apprenez à créer rapidement des tableaux, ... mais aussi des fontions spécifiques de tris et filtrages |
Ludiques ou professionnelles, découvrir les possibilités de PowerPoint |
Quelques exemples de prix pratiqués au magasin à Pin (Chiny) |
|
YBET Informatique: formation débutant ou avancé dans notre salle de formation ou en entreprise Renseignements, tarifs et inscriptions sur notre page formations informatiques |
Mise en ligne: 27/03/2008