Requête MySQL

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 : Requête MySQL

Re: Requête MySQL

par Jacques2014 » 26 déc. 2013, 19:52

A y est ! :-)

Je pense avoir trouvé... grâce à vous ! :-)

Il fallait faire : (je vais quand même faire des tests..)
SELECT * FROM titres AS a
INNER JOIN specs AS b ON ( a.id_tit = b.id_tit )
WHERE (a.pays LIKE '10')
AND ( b.specs_id IN ('29', '70', '38'))
GROUP BY  a.id_ch
Le "GROUP BY" semble éviter que le titre apparaisse 10 fois si il y a 10 spécificités.

Merci
Bonnes fêtes à vous tous
Jacques

Re: Requête MySQL

par Jacques2014 » 26 déc. 2013, 19:45

ooops ! :o)
J'ai trouvé le "IN" :

WHERE    b.specs_id IN (29, 70, 38)

Mais cela ne semble pas fonctionner non plus ?
Je vais essayer avec un GROUP BY !?

Merci

Jacques

Re: Requête MySQL

par Jacques2014 » 26 déc. 2013, 15:54

noobinoob
Comment utiliser : "b.specs_id in ('29', '70')" ?
Je ne l'ai vu nulle part ?

Merci
Jacques

Re: Requête MySQL

par Jacques2014 » 26 déc. 2013, 15:45

Merci noobinoob de ta réponse,

C'est donc cela, un champ ne avoir plusieurs valeurs.

J'ai bien essayé avec " OR " Mais ce n'est pas l'effet recherché.

Je vais essayer avec : "b.specs_id in ('29', '70')" et vous dire

Merci

Jacques

Re: Requête MySQL

par noobinoob » 26 déc. 2013, 15:31

et je suppose qu'on peut aussi faire :

monchamp in (liste de valeurs)

ici : b.specs_id in ('29', '70')

Re: Requête MySQL

par noobinoob » 26 déc. 2013, 15:26

en effet aucune réponse car b.specs_id ne peut pas valoir des valeurs différentes en même temps

essaie :
SELECT *
FROM
   titre AS a
   INNER JOIN specs AS b
ON (
   a.id_tit = b.id_tit
)
WHERE (
   (a.pays = '10' )
   AND (
      (b.specs_id = '29') 
      OR (b.specs_id = '70')
   )
);

Re: Requête MySQL

par Jacques2014 » 26 déc. 2013, 14:06

Précisions :
Alors qu'il y a bien des titres avec "guitare" et "batterie" dans le pays recherché.
Et j'ai remplacé tous les "LIKE" par des " = " !

Re: Requête MySQL

par Jacques2014 » 26 déc. 2013, 14:02

sirakawa,

J'ai fais comme tu as dis même remplacé "LIKE" par " = ",

Mais c'est pareil ! Si un titre à 10 spécificités il apparait 10 fois ?

Alors j'ai ajouté un nouveau critère : Que "Guitare" soit présent.

Cela à l'air de fonctionner !? Car alors il y a moins de résultats :o)

J'ai ajouté un second critère : Que "Batterie" soit présent...
SELECT *
                       
FROM titre AS a
INNER JOIN specs AS b ON ( a.id_tit= b.id_tit)
WHERE (
(a.pays LIKE '10' )
AND (b.specs_id LIKE '29')  // ID 29 est guitare
AND (b.specs_id LIKE '70')  // ID 70 est Batterie 
);
Mais la aucun résultat ? C'est écrit en vert : "MySQL n'a retourné aucun enregistrement. " ?
Je ne comprend pas ?
Jacques

Re: Requête MySQL

par sirakawa » 26 déc. 2013, 13:21

maintenant que tu sais que ton point de départ a l'air correct,
SELECT *
                         
FROM titre AS a
INNER JOIN specs AS b ON ( a.id_tit= b.id_tit)
WHERE (
(a.pays LIKE '10' )
et si ça va, continue.
Au fait LIKE '10' servirait si tu mettais LIKE '1%" (tous les pays commençant par 1) par exemple. Sinon = '10' suffit largement et doit aller un brin plus vite.

Re: Requête MySQL

par Jacques2014 » 26 déc. 2013, 12:52

Bonjour sirakawa,
Merci de ton aide.

J'ai essayé ce que tu proposais et sur PhpMyAdmin apparait toutes les titres, fois le nombre de spécificités qu'ils sont.
Si un titre à 10 spécificités il apparait 10 fois dans le résultat de recherche.

Alors avec un "DISTINCT" cela fonctionne mieux... Mais je n'ai que les infos que je met dans le "DISTINCT (a.id_tit) ici seulement les id de la table "Titre".

Dois-je le faire avec deux requêtes distinctes ?

Une sur la table "Titres" (avec éventuellement le Pays), puis dans le "WHILE" faire un nouveau test sur les spécificités ?

Merci de ton aide

Jacques

Re: Requête MySQL

par sirakawa » 26 déc. 2013, 09:47

teste:
select * FROM titre AS a INNER JOIN specs AS b ON ( a.id_tit = b.id_tit);
pour voir si ça donne un résultat plausible.

Requête MySQL

par Jacques2014 » 26 déc. 2013, 03:54

Bonsoir à vous tous,

Pourriez vous m'aider pour créer une requête SQL (depuis un script PHP)

J'ai deux tables :
La première "Titre" (titre d'un morceau musical)
Avec comme champs (entre autre) : "id_tit", "titre", "Pays" ...etc.

La deuxième table "Specificites" (Des spécificités divers comme : Les instruments à vent, les instruments à cordes, ... etc.)
Avec comme champs (entre autre) : "specs_id", "specs_nom", "id_tit", ...etc.

J'ai un formulaire qui (devrait) permet de faire des recherches sur des titres, joués dans un pays, interprétés par 2 cordes et 3 vents (par exemple)

J'ai commencé par :
SELECT * FROM titre AS a, specs AS b 
WHERE (a.pays LIKE '10' )
AND (b.specs_id LIKE '29' ) // ID 29 est guitare
AND (b.specs_id LIKE '70' ) // ID 70 est Batterie
AND (b.specs_id LIKE '38' ) // ID 38 est Contrebasse
AND (b.specs_id LIKE '43' ); // ID 43 est piano
Cela n'a rien retourné... alors qu'il existe certains morceaux avec ces spécificités.

Alors j'ai modifié suivant des choses que j'ai trouvé sur Internet par :
SELECT *
			
FROM titre AS a
INNER JOIN specs AS b ON ( a.id_tit= b.id_tit)
WHERE (
(a.pays LIKE '10' ) 
AND (b.specs_id LIKE '29')  // ID 29 est guitare
AND (b.specs_id LIKE '70')  // ID 70 est Batterie
AND (b.specs_id LIKE '38')  // ID 38 est Contrebasse
AND (b.specs_id LIKE '43')  // ID 43 est piano
);			
Mais toujours rien ?
J'ai même écris directement ces requêtes dans PhpMyAdmin et cela n'a rien retourné, ni même une erreur ?

Pourriez vous m'aider ou m'aiguiller ?

Merci
Jacques.