Bonsoir,

je n'arrive pas à utiliser une requête sql qui est composé à la fois de la fonction limite et de jointure.

Le but étant en fait d'afficher une liste avec plusieurs informations et une barre de navigation généré automatiquement, mais le problème c'est que j'ai besoin d'information située dans une autre table.


$sql =

'SELECT * FROM photo,categories_photo,appartenir_cat_photo
WHERE photo.numero_photo=appartenir_cat_photo.numero_photo
AND appartenir_cat_photo.numero_categorie_photo=categories_photo.numero_categorie_photo ORDER BY date_envoie,heure_envoie DESC
LIMIT 0,6;


Pourtant, d'après la fonction SLQ de mysql ma requête est bonne mais, elle n'affiche pas la liste lorsque j'y intègre les jointures.
Modifié par suLLi (08 Apr 2010 - 10:31)
Non en fait ma requête fonctionne, mais pas comme je le veux.

Ma base (simplifié)


photo (N_photo,photo)
categories_photo (N_categorie,categorie)
appartenir_cat_photo(#N_photo,#N_categorie)


le problème c'est que je veux que ma requête m'affiche la catégorie des photo même si celle-ci n'en a pas et là je ne vois pas trop comment faire.

Et en ce moment seul les photos qui ont une catégorie s'affiche dans ma liste.
salut,

d'abord voilà une version absolument identique en fonctionnement ( sauf erreur inattention de ma part, toi qui a la base verifies ) a ta requete SQL.

SELECT 
	* 
FROM 
	photo as p
INNER JOIN appartenir_cat_photo as acp 
	ON p.numero_photo=acp.numero_photo
INNER JOIN categories_photo as cp 
	ON acp.numero_categorie_photo=cp.numero_categorie_photo
ORDER BY date_envoie,heure_envoie DESC
LIMIT 0,6


j'y ai introduit des alias (as) pour la lisibilité. remarque que j'ai indenté aussi.

et surtout j'ai introduit la notion des INNER JOIN.

quand on veut joindre 2 tables via un champs (ou plusieurs ).

on peut ecrire aussi bien
 From A,B where A.id = B.id_a

que
 From A INNER JOIN B ON A.id = B.id_a


ça donne la même chose mais permet de souligné l'utilité de la condition.

Maintenant encore plus intéressant et qui réponds à ta question
le LEFT JOIN.

avec un LEFT JOIN si B n'a pas de correspondance avec une valeur de A il sort quand même une ligne. les valeurs de B etant à NULL.

j'espere que c'est clair Smiley rolleyes

donc je dirais si je me trompe pas la reponse a ta question serait

SELECT 
	* 
FROM 
	photo as p
INNER JOIN appartenir_cat_photo as acp 
	ON p.numero_photo=acp.numero_photo
[#red]LEFT[/#] JOIN categories_photo as cp 
	ON acp.numero_categorie_photo=cp.numero_categorie_photo
ORDER BY date_envoie,heure_envoie DESC
LIMIT 0,6

selon ce que tu veux faire peut-etre le LEFT est a mettre sur l'autre jointure ou les 2. mais au moins j'ai exposé le truc
Modifié par CPascal (07 Apr 2010 - 22:52)
Salut,

merci beaucoup sa fonctionne. Smiley biggrin

J'ai fait comme sa :


							
SELECT  


	*, p.numero_photo  

FROM 

	photo as p

LEFT JOIN appartenir_cat_photo as acp 

	ON p.numero_photo=acp.numero_photo

LEFT JOIN categories_photo as cp 

	ON acp.numero_categorie_photo=cp.numero_categorie_photo

ORDER BY date_envoie,heure_envoie DESC

LIMIT 0,6;



Je n'aurais jamais pensé à utiliser des LEFT JOIN.


Petit précision aussi dans le select, j'ai dû rajouter p.numero_photo pour pouvoir récupérer le numéro de mes photos.
Modifié par suLLi (08 Apr 2010 - 11:05)