Mysql Je souhaites faire une requete sur 3 tables

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Mysql Je souhaites faire une requete sur 3 tables

par Axo » 24 oct. 2005, 17:03

Bonjour,

En faite ceux sont des tables qui n'ont rien à voir entre elles, mais je veux pouvoir mettre en avant les dernières mise à jour sur le site

Tables :

Videos
Articles
Annonces
Photos
Nouveau post
Nouveau membre

par Axo » 23 oct. 2005, 17:29

Oui parfaitement, je vais m'amuser à faire des jointures entre 3 tables maitenant.

Car je m'étais replié sur le faites d'alimenter une table tiers pour rapatrier les informations nécessaire à une requete moins complexe

par Cyrano » 23 oct. 2005, 17:19

Le principe de la jointure est relativement simple: on établit un rapport entre plusieurs tables pour extraire des données cohérentes. Je vais illustrer par un exemple, ce sera plus parlant.

Suppose que j'aie une table membre dans laquelle je stocke nom, prenom, adresse. Mais pour le téléphone, je peux en avoir 0, 1, 2 ou +. Pour simplifier la structure, je vais donc avoir une seconde table telephone dans laquele je stockerai: numéro et type de téléphone (domicile, mobile, fax, bureau, etc...)

Maintenant, je veux tous les numéros d'un membre en particulier. Pour ce faire, je dois pouvoir identifier formellement un numéro comme appartenent à tel membre. J'aurai donc dans la table membre une clé primaire, membre_id, et dans la table téléphone une clé étrangère membre_id qui reprendra la valeur de la clé primaire de membre.

J'aurai donc une requête qui sera du style:

Code : Tout sélectionner

SELECT numero FROM telephone WHERE membre_id = 123
Là, je n'ai pas de jointure, je vais directement sur une seule table.

Maintenant, je veux le nom, le prénom et le numéro de mobile des membres:

Code : Tout sélectionner

SELECT nom, prenom, numero FROM membre, telephone WHERE membre.membre_id = telephone.membre_id AND type_tel = 'mobile'
Là, je vais établir la liste de tous les membres qui ont un numéro de mobile: la jointure est dans la clause WHERE où je compare la clé primaire de la table membre (formulée par le nom du champ préfixé par le nom de la table) et la clé étrangère de la table téléphone (formulée de la même manière que l'autre)

Est-ce que ce schéma te permet de mieux comprendre ce qu'est sommairement ce qu'est une jointure ?

par Axo » 23 oct. 2005, 17:01

Le problème c'est que les jointures j'y connais rien

mysql je connais au fur et à mesure que j'ai besoin

par Cyrano » 23 oct. 2005, 16:48

Sans jointure, tu risques fort de sortir un produit cartésien: il serait préférable dans ce cas de faire une requête par table interrogée.

par Axo » 23 oct. 2005, 16:24

Je n'ai pas fait de jointure entre les tables

par Axo » 23 oct. 2005, 16:22

version MySQL 4.1.13

par Cyrano » 23 oct. 2005, 16:07

Quelle est la jointure entre les trois tables ? Là, ta requête comprend ds sous-requêtes qui ne fonctionneront qu'à partir de MySQL 4.1.xx. TU pourrais simplifier comme ça:
$sql = "SELECT photos.noms,photos.dateposte, videos.noms,videos.dateposte, articles.dateposte,articles.noms  ".
       "FROM videos,photos ".
       "WHERE photos.dateposte = MAX(photos.dateposte) ".
       "AND videos.dateposte = MAX(videos.dateposte) ".
       "LIMIT 20";

Mysql Je souhaites faire une requete sur 3 tables

par Axo » 23 oct. 2005, 15:51

bonjour,

Je souhaites faire une requete sur 3 tables avec comme critère de recherche la date sur les 3 tables pour un classement optimal, des mises à jour des 20 dernières dates uniquement.
Tables : videos, photos, articles.
Je veux récuperer la date(dateposte) et le nom(noms) dans les trois.
dans photos et videos le repertoire (repertoire), dans articles le lien(url).
$sql = 'SELECT photos.noms,photos.dateposte, videos.noms,videos.dateposte, articles.dateposte,articles.noms  
FROM videos,photos 
WHERE photos.dateposte=(SELECT MAX(photos.dateposte) 
and videos.dateposte=(SELECT MAX(videos.dateposte) FROM videos,photos)) LIMIT 20';
est ce possible ???