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


julien__
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 362
Inscription: 28 Déc 2006

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

Message le Lun Avr 11, 2011 13:39

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
WRInaute occasionnel
 
Messages: 317
Inscription: 13 Jan 2006

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

Message le Lun Avr 11, 2011 14:29

Tu devrais essayer un truc du genre :

Code: Tout sélectionner
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é
WRInaute passionné
 
Messages: 1765
Inscription: 31 Aoû 2007

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

Message le Lun Avr 11, 2011 16:28

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: Tout sélectionner
SELECT MONTH(NOW());
SELECT YEAR(NOW());


julien__
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 362
Inscription: 28 Déc 2006

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

Message le Lun Avr 11, 2011 17:32

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
WRInaute occasionnel
 
Messages: 362
Inscription: 28 Déc 2006

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

Message le Lun Avr 11, 2011 17:49

Julia41 a écrit: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: Tout sélectionner
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é
WRInaute passionné
 
Messages: 1765
Inscription: 31 Aoû 2007

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

Message le Lun Avr 11, 2011 20:51

julien__ a écrit: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.


julien__
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 362
Inscription: 28 Déc 2006

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

Message le Mer Avr 13, 2011 16:04

Yes c'est dans mes projets, merci pour tous vos conseils...


Si vous avez aimé cette discussion, partagez-la sur vos réseaux sociaux préférés :

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 2 invités