Mysql Je souhaites faire une requete sur 3 tables

Axo
Invité n'ayant pas de compte PHPfrance

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 ???

Mammouth du PHP | 19672 Messages

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";
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Axo
Invité n'ayant pas de compte PHPfrance

23 oct. 2005, 16:22

version MySQL 4.1.13

Axo
Invité n'ayant pas de compte PHPfrance

23 oct. 2005, 16:24

Je n'ai pas fait de jointure entre les tables

Mammouth du PHP | 19672 Messages

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.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Axo
Invité n'ayant pas de compte PHPfrance

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

Mammouth du PHP | 19672 Messages

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 ?
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Axo
Invité n'ayant pas de compte PHPfrance

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

Axo
Invité n'ayant pas de compte PHPfrance

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