[RESOLU] Probleme de jointure requete sql

Eléphanteau du PHP | 25 Messages

24 juil. 2012, 11:52

Bonjour,

Voilà, j'ai un soucis au niveau des jointures de ma requête sql. Je m'explique, en effet les jointures fonctionne lorsque que je fait appel à l'ensemble des données des mes 2 tables jointes.
Le soucis vient lorsque je veux faire appel à des informations venant des 2 tables correspondant à ma variable $_GET['id']. Voilà le résultat :
object(PDOStatement)[2]
  public 'queryString' => string 'SELECT * FROM `artistes` INNER JOIN `album` ON `artistes`.`ID_Artiste`  LIKE '%1%' || `album`.`ID_Album`' (length=104)

array
  'ID_Artiste' => string '0' (length=1)
  'name' => string '' (length=0)
  'firstname' => string '' (length=0)
  'nickname' => string '' (length=0)
  'birthdate' => string '' (length=0)
  'birthlocation' => string '' (length=0)
  'pays' => string 'Américain' (length=9)
  'biography' => string '' (length=0)
  'website' => string '' (length=0)
  'ID_Album' => string '1' (length=1)
  'titre' => string 'Nous les gars, nous les filles (Vogue)' (length=38)
Il n'y que l'ID_Album et cette ID ne change jamais ^^, je dois avoir looper quelque chose dans ma requête SQL mais quoi ? ^^ je vous la poste
"SELECT * FROM `artistes` INNER JOIN `album` ON `artistes`.`ID_Artiste`  LIKE '%" . $_GET['id'] . "%' || `album`.`ID_Album`";

Je continue a chercher dans mon coin merci d'avance pour vos réponse.

Bien à vous.

ViPHP
xTG
ViPHP | 7331 Messages

24 juil. 2012, 13:00

Un PDOStatement c'est une collection, as-tu bien itéré dessus pour récupérer les autres enregistrements retournés ?
As-tu d'autres albums pour cet artiste ?

Aussi on n'utilise pas l'opérateur LIKE sur un id... L'opérateur d'égalité est là pour cela, sinon je vois mal l'intérêt de ta requête.

Eléphanteau du PHP | 25 Messages

24 juil. 2012, 13:15

Un PDOStatement c'est une collection, as-tu bien itéré dessus pour récupérer les autres enregistrements retournés ?
C'est le résultat juste après la requête SQL
As-tu d'autres albums pour cet artiste ?
Non j'ai fait au plus simple, histoire que ca fonctionne. J'ajouterais de la complexité dans la table par après.
J'ai crée une table 'artistes' une table de liaison 'tbl_liaison1' et une table 'album'.

Table artistes j'ai un champs ID_Artiste
Table tbl_liaison1 j'ai un champs ID_Artiste et un champs ID_Album
Table album j'ai un champs ID_Album
Aussi on n'utilise pas l'opérateur LIKE sur un id... L'opérateur d'égalité est là pour cela, sinon je vois mal l'intérêt de ta requête.
bah j'avais ceci comme requête avant qui fonctionnais bien pour me renvoyer toutes les informations des tables jointée :
SELECT * FROM `artistes` INNER JOIN `album` ON `artistes`.`ID_Artiste` = `album`.`ID_Album` 
Donc les infos je les aient, mon but et de rassembler les infos ayant pour point de repére $_GET['id.']

Est ce que sait possible de tout recuperer via une requête sql en tenant compte de l'ID ? En parcourant un peu les différents sujet sur le net j'ai trouver une solution que je ne comprend pas du moin je pense
que sait une solution.

c'est une requete preparatoire sql, mais je ne saissit pas vraiment le fonctionnement ^^.

ViPHP
xTG
ViPHP | 7331 Messages

24 juil. 2012, 15:24

Si ce sont les jointures que tu ne comprends pas je t'invite à lire cet article : http://sqlpro.developpez.com/cours/sqlaz/jointures/
Car pour moi tu obtiens exactement ce que tu demandes.

Eléphanteau du PHP | 25 Messages

24 juil. 2012, 15:35

Oui dans le cas que je viens de mettre oui j'obtiens toutes les infos brutes. Je voulais juste savoir si l'on pouvait trier le résultat directement avec une requête sql en fonction d'un ID et d'une table de liaison? ^^

je vais devoir trier l'infos moi même et la redistribuées dans les bonnes variables si je comprends bien.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

24 juil. 2012, 16:34

En fait ta requête sql est constituée ainsi :
SELECT les données que tu veux récupérer
  FROM la table où tu veux les chercher
   [ INNER JOIN une autre table concernée ON la condition de jointure entre les 2 tables]
 [WHERE les conditions que les résultats doivent respecter]
Dans ton cas, il suffit donc de faire une jointure entre tes deux tables et d'ajouter dans la clause WHERE une condition pour que seuls les enregistrements dont l'id est égal à celui passé en GET ne soient retournés :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphanteau du PHP | 25 Messages

24 juil. 2012, 19:26

J'aurais donc quelque chose comme ceci :
'SELECT * FROM `artistes` INNER JOIN `album` ON `artistes`.`ID_Artiste` = `album`.`ID_Album` WHERE " . $_GET['id'] . "';
J'ai un doute, il me semble avoir déjà essayer çà, je testerais ça et je vous dit quoi.

Merci.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

24 juil. 2012, 21:14

Ah ben là en l'état, je peux te dire quoi, ça fonctionnera pas :)

Dans cette requête tu es en train de demander à MySQL de :

SÉLECTIONNER toutes les colonnes (ok)
DE LA TABLE artistes (ok)
AINSI QUE LA TABLE album POUR LESQUELS id_artiste de l'artiste est égal à id_album de l'album (déjà là, c'est louche :))
POUR LESQUELS : 42! (ça va pas vraiment l'aider à comprendre ce que tu attends de lui ;))

Avec un "WHERE mon_champ = une_valeur", ça devrait lui sembler plus clair (et à nous aussi ;))
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphanteau du PHP | 25 Messages

26 juil. 2012, 11:34

Bonjour,

J'ai finalement trouver ^^
"SELECT * FROM `artistes` INNER JOIN `album` ON `artistes`.`ID_Artiste` = `album`.`ID_Album` WHERE ID_Artiste LIKE '%" . $_GET['id'] . "%' ";
J'avais pas saisi correctement le sens des jointures, maintenant ces bons.

Merci a tous :)

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

26 juil. 2012, 12:38

Tant mieux :)

Et petite précision, quand tu compares des valeurs qui doivent être identiques, utilise l'opérateur = plutôt que LIKE, ce sera beaucoup plus rapide :)
" ... WHERE ID_Artiste = " . $_GET['id'];
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Invité
Invité n'ayant pas de compte PHPfrance

26 juil. 2012, 12:41

D'accord merci ^^

Eléphanteau du PHP | 25 Messages

26 juil. 2012, 12:42

D'accord merci ^^

Oublier de me co xD