Comment lancer une requête multi-bases avec les fonctions MySQL ?

Apprenez à faire des requêtes SQL sur plusieurs bases et à les exécuter à l'aide de PHP avec une seule connexion.

03 février 2011

Scénario : Vous développez une application PHP 5 pour l'entreprise Informatix qui vend des jeux vidéos et des consoles vidéos. L'administrateur de la base de données MySQL a décidé de diviser l'ensemble en 3 grosses partie :

  • Une base jeux vidéo : jeux_video
  • Une base consoles vidéo : console_video
  • Une base avec les partie communes telles que les clients, les départements etc... : commun

Dans votre application il vous est demandé d'afficher, par date d'achat de la plus récente à la plus ancienne et par ordre alphabétique, le nom des jeux achetés par un client lorsque son nom est saisi.

La requête devrait ressembler à un truc dans ce style :

CODE

	SELECT
	jv.nom AS jv_nom
	FROM
	commun.clients c
	INNER JOIN jeux_video.achats_jeux aj ON (aj.client_id = c.id)
	INNER JOIN jeux_video.jeux jv ON (jv.id = aj.jeu_id)
	WHERE
	c.nom = 'NlC0'
	ORDER BY
	aj.date_achat DESC,
	jv.nom ASC
	

Reste maintenant à pouvoir lancer cette requête avec PHP. Habituellement nous utilisons dans l'ordre les fonctions mysql_connect pour établir une connexion avec le serveur SQL, puis mysql_select_db pour sélectionner une base de données, et enfin mysql_query pour lancer la requête.

Dans votre cas, pour travailler avec plusieurs bases de données, deux solutions existent :

  • Ne pas mettre de fonction mysql_select_db du tout.
  • Utiliser la fonction comme ceci : mysql_select_db("")

Vous trouverez sur la toile de nombreuses personnes qui vous proposent de créer deux connexions puis de réinjecter les résultats d'une requête dans l'autre, une sorte de jointure manuelle. Evidemment ces pratiques sont à bannir dans la majorité des cas et proviennent de personnes qui ne savent tout simplement pas comment faire autrement.

Par
Créateur et administrateur.

Dans la même catégorie

Formater un tableau pour CURLOPT_POSTFIELDS
Email avec pièce jointe en PHP
PHP : modifier les attributs privés d'un objet
Tester l'existence d'un fichier dans l'include path
Convertir récursivement un objet PHP en tableau
PHP : formater un tableau en CSV
Comment envoyer un mail en ligne de commande ?
RSYNC : Comment synchroniser des fichiers à travers une connexion ssh ?
Exécuter un code PHP en ligne de commande
Doctrine 2 : générer les classes PHP depuis la base de données
Comment catcher les erreurs en PHP ?
Doctrine 2 : comment afficher la requête SQL ?
Comment construire une URL sans caractères spéciaux en PHP ?
Comment lister les fichiers PHP inclus sur ma page ?
Les fonctions anonymes récursives en PHP
Requête HTTP asynchrone en PHP
La résolution statique à la volée ou Late Static Bindings
Trouver les jours fériés français en PHP
Comment allumer son ordinateur à distance en PHP ?
Comment utiliser la balise meta viewport ?
Une version mobile de mon site avec le Zend Framework
Doctrine et le Zend Framework : Présentation, intégration et utilisation
Créer son flux RSS simplement avec Zend_Feed
Appliquer un layout sur un mail avec le Zend Framework
Implode / Explode : Du tableau à la chaine de caractères, de la chaine de caractères au tableau

Commentaire(s)