J'essaye en vain depuis quelques jours à réaliser une sorte de jointure de table (avec 3 tables: table_principale, table2 et table3) le tout basé sur un ID stocké dans la table_principale et répliqué, pour chaque enregistrements, dans la table2 et table3 (afin par la suite de faire correspondre les enregistrements de la table_principale avec ceux de table2 ET/OU table3). Ceci me permettant d'afficher un élément de la table_principale si l'élément existe dans la table2 ET/OU dans la table3.
Vous mes suivez ?
Exemple : table_principale contient l'id 1 et au moins un enregistrements de la table 2 ET/OU table 3 contient l'id 1 ==> On affiche l'élément.
L'id de la table_principale est Unique et autoincrémenté.
Les tables2 et 3 ont pour chaque enregistrements l'id répliquée de la table_principale.
Mon problème est qu'il m'est impossible d'obtenir l'id d'un enregistrement si il ne figure pas dans les 3 tables.
Ce que j'aimerai faire c'est afficher l'id d'un enregistrement si il existe dans la table2 ET/OU dans la table3
Voici ce que j'ai tenté de faire dans un premier jet : Jointure type LEFT :
// $max = LIMIT ... (pagination)
// table principale : $CfgTableMain | table2 : $CfgTablePhotos | table3 : $CfgTableVideos
$req_main="SELECT * FROM $CfgTableMain LEFT JOIN $CfgTablePhotos ON ($CfgTableMain.gallery_id = $CfgTablePhotos.gallery_id)
LEFT JOIN $CfgTableVideos ON ($CfgTableMain.gallery_id = $CfgTableVideos.gallery_id)
GROUP BY $CfgTableMain.gallery_id ORDER BY $CfgTableMain.gallery_date DESC $max";
$res_main=mysql_query($req_main) or die(mysql_error());
while ($row = mysql_fetch_array ($res_main)) {
echo $row['gallery_id'];
}
Le souci avec ce code c'est que si l'ID n'existe pas dans la table photo, l'id ne s'affiche pas ...alors qu'il existe dans la table video et la table principale !J'ai essayé RIGHT JOIN ET INNER mais cela ne semble pas fonctionner non plus.
Alors j'ai tenté une imbrication de requête ...
$req_main="SELECT * FROM $CfgTableMain LEFT JOIN $CfgTablePhotos ON ($CfgTableMain.gallery_id = $CfgTablePhotos.gallery_id)
WHERE $CfgTableMain.gallery_id IN (SELECT * FROM $CfgTableVideos WHERE $CfgTableMain.gallery_id = $CfgTableVideos.gallery_id)
GROUP BY $CfgTableMain.gallery_id ORDER BY $CfgTableMain.gallery_date DESC $max";
Mais ça plante grave ...Comment puis-je afficher l'ID d'un enregistrement si il existe dans la table photo (table2) ET/OU table video (table3) ?
(sachant que par défaut il existe et il est créé dans la table_principale)
A mon avis c'est une question de jointure mais je ne sais pas comment m'y prendre.
Meci pour votre aide,
Raph