Problème de jointure entre deux tables requête SQL

julien__

WRInaute occasionnel
Bonjour, j'ai un problème pour une requête SQL avec une jointure. Je dois récupéré l'emplacement d'images sur une autre table. J'ai une référence de produit qui est dans la base1 base1.affiches qui se trouve être base2.urlaffiche dans l'autre table, et le colonne que je dois récupérer dans la base 2 est base2.urlimage


SELECT base1.id,base1.titre,base1.sortie1,base1.affiches,base2.urlimage FROM base1,base2 WHERE base1.sortie1a=EXTRACT(YEAR FROM NOW()) AND base1.sortie1m=(EXTRACT(MONTH FROM NOW())) AND base1.affiches = base2.urlaffiche ORDER BY sortie1a DESC,sortie1m DESC,sortie1j DESC LIMIT 6

Cette requête fonctionne, seulement elle me sort seulement les enregistrement de la base 1 qui ont une référence dans la base2, alors qu'il me faudrait une requête qui me trouve les enregistrement qui ont des références dans la base 2 mais aussi ceux de la base 1 qui n'en n'ont pas selon la requête WHERE base1.sortie1a=EXTRACT(YEAR FROM NOW()) AND base1.sortie1m=(EXTRACT(MONTH FROM NOW())) !
 

silef

WRInaute occasionnel
Tu devrais essayer un truc du genre :

Code:
SELECT base1.id,base1.titre,base1.sortie1,base1.affiches,base2.urlimage 
FROM base1
LEFT JOIN base2 ON base1.affiches = base2.urlaffiche 
WHERE base1.sortie1a=EXTRACT(YEAR FROM NOW()) AND base1.sortie1m=(EXTRACT(MONTH FROM NOW()))  ORDER BY sortie1a DESC,sortie1m DESC,sortie1j DESC LIMIT 6
 

Julia41

WRInaute passionné
Rien à voir mais en passant :
à ta place je virerais les champs sortie1a et sortie1m pour un seul champs unique contenant "année + mois".
A la place de l'extract j'utiliserais aussi la fonction date() de PHP ou alors un LTRIM.
Edit: ou alors les :
Code:
SELECT MONTH(NOW());
SELECT YEAR(NOW());
 

julien__

WRInaute occasionnel
Merci silef,

c'est exactement ça, ça me donne le résultat que je voulais... Un grand merci, il n'y avait rien à changer!
 

julien__

WRInaute occasionnel
Julia41 a dit:
Rien à voir mais en passant :
à ta place je virerais les champs sortie1a et sortie1m pour un seul champs unique contenant "année + mois".
A la place de l'extract j'utiliserais aussi la fonction date() de PHP ou alors un LTRIM.
Edit: ou alors les :
Code:
SELECT MONTH(NOW());
SELECT YEAR(NOW());

le champ avec la date entière je l'ai déjà dans ma base, mais le drame c'est qu'elle n'est pas au format date mysql, mais c'est un champ TEXT
Il faut que je fasse la transformation, mais prudente :D avec un champ provisoire et surtout bien contrôler l'intégrité des données après le changement avant de basculer... Dans mon champ date au format texte j'ai de tout, des dates où il y a que l'année, année + mois ou année moi jour... je ne veux surtout pas bousiller mes dates...
 

Julia41

WRInaute passionné
julien__ a dit:
le champ avec la date entière je l'ai déjà dans ma base, mais le drame c'est qu'elle n'est pas au format date mysql, mais c'est un champ TEXT
Il faut que je fasse la transformation, mais prudente :D avec un champ provisoire et surtout bien contrôler l'intégrité des données après le changement avant de basculer... Dans mon champ date au format texte j'ai de tout, des dates où il y a que l'année, année + mois ou année moi jour... je ne veux surtout pas bousiller mes dates...
Je pense que tu gagnerais pas mal avec un champ INT(6) style YYYYMM.
Ca ferait des bonnes perfs et ça conservait les classements.
Pour ne rien perdre il faudra créer un champs temporaire le temps que tu majs tes scripts mais après ça devrait aller vite.
 

Discussions similaires

Haut