[RESOLU] Probleme de jointure requete sql

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : [RESOLU] Probleme de jointure requete sql

Re: [RESOLU] Probleme de jointure requete sql

par ludovic » 26 juil. 2012, 12:42

D'accord merci ^^

Oublier de me co xD

Re: [RESOLU] Probleme de jointure requete sql

par Invité » 26 juil. 2012, 12:41

D'accord merci ^^

Re: [RESOLU] Probleme de jointure requete sql

par Ryle » 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'];

Re: Probleme de jointure requete sql

par ludovic » 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 :)

Re: Probleme de jointure requete sql

par Ryle » 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 ;))

Re: Probleme de jointure requete sql

par ludovic » 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.

Re: Probleme de jointure requete sql

par Ryle » 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 :)

Re: Probleme de jointure requete sql

par ludovic » 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.

Re: Probleme de jointure requete sql

par xTG » 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.

Re: Probleme de jointure requete sql

par ludovic » 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 ^^.

Re: Probleme de jointure requete sql

par xTG » 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.

Probleme de jointure requete sql

par ludovic » 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.