Aller au contenu

Problème complexe.


DJsmileyus

Sujets conseillés

Bonjour bonjour !

J'ai un problème assez complexe (du moins que j'utilise pour la première fois) : il s'agit d'une connexion MySQL avec une sous-requête. J'espère que quelqu'un pourra m'aider car je suis sur un os, là ...

$connect = "SELECT id_album, file_name FROM members_album_files WHERE id_member = '1' AND [b](SELECT album_limitation FROM members_album_albums WHERE id_member = '1' AND id_album = '[id_album]')[/b] != 'private'";

Brève explication (il s'agit d'un script d'album photos) :

- Je sélectionne les champs "id_album" et "file_name" de la base de donnée "members_album_files" : il s'agit des fichiers avec l'ID de l'album photos correspondant ;

- Dans le Where, vous pouvez aperçevoir une nouvelle connexion SQL à une autre base de donnée qui contient les album photos : je dois vérifier que l'album traité ne soit pas privé ( " private " ). J'ai essayé en faisant *id_album = '[id_album]'*, sans succès ...

J'espère avoir été clair ; si quelqu'un à une solution, je suis preneur. Merci d'avance.

Gaylord.P.

Lien vers le commentaire
Partager sur d’autres sites

pour ça , utilises plutôt les jointures genre:

$connect = "SELECT members_album_files.id_album, members_album_files.file_name, members_album_albums.album_limitation FROM members_album_files, members_album_albums WHERE members_album_files.id_member = '1' AND members_album_albums.id_album != 'private'";
Lien vers le commentaire
Partager sur d’autres sites

Merci bien ! Je ne connaissais même pas les jointures ... c'est dingue, même quand on croit avoir de très bonnes connaissances, on s'aperçoit très régulièrement qu'il reste encore plein de choses à apprendre. J'adore ! :)

Par contre, si il y a deux tables d'album ; je m'explique :

- member_album : correspondant à l'album principal du membre et contenant les principales données (description, graphisme, ...). Cette album, pour les fichiers, correspond à ID_album = 0 (fichiers étant affichés sur la page d'accueil).

- member_album_albums : correspondant à tous les autres albums du membre. Ces albums correspondent, pour les fichiers, à ID_album = X.

Comment peut on faire pour sélectionner le *album_limitation* selon l'ID_album du fichier. Plus clairement :

- Si id_album == 0 : on sélectionne "member_limitation" dans la base member_album ;

- Sinon : on sélectionne "member_limitation" dans la base member_album_albums ;

Le tout doit être dans une seule requête puisque dans la réelle requête, il y a un LIMIT à la fin (là, j'ai simplifié).

Si quelqu'un à une idée, je suis preneur. En espérant avoir été clair ; je doute ... :P

Et grand merci à Licorne pour son aide.

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

SELECT 
a.id_album, a.file_name
FROM members_album_files a
INNER JOIN members_album_albums b ON a.id_album = b.id_album
WHERE a.id_member = '1' and b.album_limitation != 'private'

Essaie ca pour voir.

Et pour ta seconde question, regarde les "CASE" qui sont l'équivalent du "IF" pour SQL :)

Lien vers le commentaire
Partager sur d’autres sites

$connect = "SELECT a.id_album FROM members_album_files a INNER JOIN members_album_albums b ON a.id_album = b.id_album WHERE a.id_member = '1' AND b.id_member = '1' AND b.album_limitation != 'private'";

Merci bien !

Merci à tous, en plus de voir mon script avancé et être presque terminé, j'apprends de nouvelles choses. Cependant j'ai réellement du mal avec CASE ou IF (car j'ai vu que ça existait également sur MySQL.com) ; je tombe toujours sur un message d'erreur, je dois mal l'appliquer (je viens juste d'apprendre l'existence ce tous ces trucs).

Quelqu'un pourrait-il me dire comment procéder ?

L'idéal serait de remplacer "INNER JOIN members_album_albums b ON a.id_album = b.id_album" par :

- Si *a.id_album = 0* on éxecute *INNER JOIN members_album b ON a.id_album = 0*

- Autrement on éxecute *INNER JOIN members_album_albums b ON a.id_album = b.id_album*

- Tout en sachant que le reste du Where ne change pas ...

Encore une fois, merci d'avance pour votre aide.

Gaylord.P. :)

Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...