[MySQL] Besoin d'aide pour une requête

Besoin d'aide pour une requête [MySQL] - SQL/NoSQL - Programmation

Marsh Posté le 16-05-2003 à 15:36:35    

Bonjour,
 
je sèche. :??:  
 
J'ai une table T1 dans laquelle j'ai deux champs ID_ID et ID_ARTICLE qui sont les indexes. Voici le contenu :
 
ID_ID    ID_ARTICLE
17       5
1        47
54       3
33       47
 
Je voudrais donner à ma requête les ID_ID 1 et 33 et lui doit me remonter uniquement un ID_ARTICLE unique : 47 dans ce cas.
 
Encore une fois merci pour votre aide

Reply

Marsh Posté le 16-05-2003 à 15:36:35   

Reply

Marsh Posté le 16-05-2003 à 15:43:52    

utilise un count(*)<2 peut etre [:spamafote]


Message édité par polo021 le 16-05-2003 à 15:44:08
Reply

Marsh Posté le 16-05-2003 à 16:48:01    

je comprends pas trop le truc la...
Tu veux faire quoi ?
 
select ID_ARTICLE FROM TABLE_ID where ID_ID=1 OR ID_ID=47  
 
ca ou autre chose ?

Reply

Marsh Posté le 16-05-2003 à 16:52:52    

ca me parait bizarre comme requete mais a mon avis il veut faire select ID_ARTICLE from T1 where ID_ID = 1
or ID_ID = 33
and count(*)<2;
 
j'ai pas testai et ca date mais c un truc du genre je pense ou alors j'ai pas tout compris non plus.

Reply

Marsh Posté le 16-05-2003 à 16:55:36    

De toute facon, meme si tu mets pas le count(*), il me semble que ca ne t'en renverra qu'une...
 
Attends, je vais voir ca...

Reply

Marsh Posté le 16-05-2003 à 17:02:37    

le count(*) ne marche pas.
J'essaie de trouver une requete

Reply

Marsh Posté le 16-05-2003 à 17:03:15    

Salut à tous les deux et merci pour l'aide  :jap:  
 
Je me suis surement mal exprimé...  :D  
 
Simplement je veux savoir si il y a un ID_ARTICLE pour tous les ID_MOTS : 1 et 33 dans ce cas.
 
C'est mieux là ?  :whistle:

Reply

Marsh Posté le 16-05-2003 à 17:09:16    

Euh... non ?
 
Non franchement, soit j'ai du mal, soit je suis bete, soit ca vient de toi, et tu m'expliques mal...
 
C'est pas ce que je t'ai donné que tu veux, la apparement on est d'accord.
 
Mais faut que tu m'expliques concrètement...

Reply

Marsh Posté le 16-05-2003 à 17:17:15    

ata, je viens de penser a un truc de fou
 
select t.id_article from T1 t where t.id_id = 1  and id_article = (select id_article from t1 where id_id = 33);
heu....[:meganne]
a essayer :D

Reply

Marsh Posté le 16-05-2003 à 19:36:35    

Je retente le coup  :wahoo:  
 
ça reviendrait à écrire un truc du genre :  
 
SELECT DISTINCT ID_ARTICLE FROM T1 WHERE ID_ID IN ('1','33) AND COUNT(*)>2
 
Sauf que le IN ('1','33' est interprêté comme (ID_ID =1 OR ID_ID=33) alors que je veux (ID_ID =1 AND ID_ID=33)  
 


Message édité par tafkap le 16-05-2003 à 19:52:48
Reply

Marsh Posté le 16-05-2003 à 19:36:35   

Reply

Marsh Posté le 17-05-2003 à 10:54:24    

alors t'as trouvé ?
je trouve çà compliqué, je croyais que tu voulais qqch de plus simple du style
select distinct ID_ARTICLE
from T1
where ID_ID = 1 and ID_ID =33;  
 
 
 

tafkap a écrit :

Je retente le coup  :wahoo:  
 
ça reviendrait à écrire un truc du genre :  
 
SELECT DISTINCT ID_ARTICLE FROM T1 WHERE ID_ID IN ('1','33) AND COUNT(*)>2
 
Sauf que le IN ('1','33' est interprêté comme (ID_ID =1 OR ID_ID=33) alors que je veux (ID_ID =1 AND ID_ID=33)  
 
 

Reply

Marsh Posté le 17-05-2003 à 11:37:22    

Salut,
 
non toujours pas trouvé  [:zoutte]  
 
Je vais réexpliquer plus en détail.
 
J'ai une table qui s'appelle MOTS_ARTICLES qui contient deux champs ID_MOT et ID_ARTICLE. ID_MOT fait référence à un mot-clé et ID_ARTICLE a un n° d'article. Un mot-clé peut être associé à plusieurs articles ainsi on aura :
 
TABLE MOTS_ARTICLES
 
ID_MOT     ID_ARTICLE
5              6
12             6  
33             3
33             6
 
En "français" ça donnerait ça :
L'article n°6 est associé à 3 mots-clés : 5, 12 et 33
L'article n°3 est associé à 1 mots-clés : 33
 
Mon soucis est de connaitre si un article est associé à certains mots-clés. Par exemple, je souhaite savoir si il existe un article qui est associé aux 3 mots-clés suivants : 5, 12 et 33. La réponse est oui c'est l'article n° 6.
 
Je ne sais pas écrire la requête qui me permettrait de remonter l'ID_ARTICLE.
 
Mmmhh c'est pas mal ce que je viens d'écrire, c'est ultra clair non ?  :D  
 
Une récompense pour celui qui trouve la solution  ;)  

Reply

Marsh Posté le 17-05-2003 à 12:16:40    

et ce que je viens de te donner ne marche pas ?
 

tafkap a écrit :

Salut,
 
non toujours pas trouvé  [:zoutte]  
 
Je vais réexpliquer plus en détail.
 
J'ai une table qui s'appelle MOTS_ARTICLES qui contient deux champs ID_MOT et ID_ARTICLE. ID_MOT fait référence à un mot-clé et ID_ARTICLE a un n° d'article. Un mot-clé peut être associé à plusieurs articles ainsi on aura :
 
TABLE MOTS_ARTICLES
 
ID_MOT     ID_ARTICLE
5              6
12             6  
33             3
33             6
 
En "français" ça donnerait ça :
L'article n°6 est associé à 3 mots-clés : 5, 12 et 33
L'article n°3 est associé à 1 mots-clés : 33
 
Mon soucis est de connaitre si un article est associé à certains mots-clés. Par exemple, je souhaite savoir si il existe un article qui est associé aux 3 mots-clés suivants : 5, 12 et 33. La réponse est oui c'est l'article n° 6.
 
Je ne sais pas écrire la requête qui me permettrait de remonter l'ID_ARTICLE.
 
Mmmhh c'est pas mal ce que je viens d'écrire, c'est ultra clair non ?  :D  
 
Une récompense pour celui qui trouve la solution  ;)  
 

Reply

Marsh Posté le 17-05-2003 à 12:25:31    

J'ai tapé la requête suivante :
 
select id_article from MOTS_ARTICLES  
 where id_mot = 5 and id_mot = 12 and id_mot = 33
 
Et non ça ne fonctionne pas, il ne trouve aucune ligne.

Reply

Marsh Posté le 17-05-2003 à 12:35:19    

Je m'y penche et je te fais signe si je trouve :)
 

tafkap a écrit :

J'ai tapé la requête suivante :
 
select id_article from MOTS_ARTICLES  
 where id_mot = 5 and id_mot = 12 and id_mot = 33
 
Et non ça ne fonctionne pas, il ne trouve aucune ligne.

Reply

Marsh Posté le 17-05-2003 à 12:36:25    

Génial, et une récompense au bout :)
 
Merci pour ton aide

Reply

Marsh Posté le 17-05-2003 à 13:13:52    

cybil a écrit :

Je m'y penche et je te fais signe si je trouve :)
 
 


 
c'est or !!!
select distinct id_Article
from "nom de la table"
where id_id = 5 or id_id =12 or id_id = 33;
 

Reply

Marsh Posté le 17-05-2003 à 13:31:40    

Et non ce n'est pas OR  :)  
 
Je te donne un autre exemple.
 
TABLE MOTS_ARTICLES
 
id_mot  id_articles
3  1  
53  2  
33  3  
40  4  
47  5  
5  6  
53  10  
53  11  
53  12  
1  47  
54  47  
33  47  
40  47  
51  47  
1  48  
54  48  
33  48  
40  48  
51  48  
 
Alors je veux connaitre l'article qui est rattaché aux mots-clés 33 ET 40. Si je prends ta requête select distinct id_Article from spip_mots_articles where id_mot = 33 or id_mot = 40
, MySQL me donne les articles n°3, 47, 48 et 4, il fait bien un OR.
 
héhé pas simple non ?  ;) Faut peut-être regarder de ce côté : http://cerig.efpg.inpg.fr/tutoriel [...] chap21.htm


Message édité par tafkap le 17-05-2003 à 13:32:35
Reply

Marsh Posté le 17-05-2003 à 13:40:47    

J'ai un élément de réponse. La requête doit ressembler à cela, mais ça ne fonctionne pas en MySQL :
 
select distinct id_article from mots_articles where mots_articles.id_mot IN (SELECT id_article from mots_articles where id_mot=33) AND mots_articles.id_mot IN (SELECT id_article from mots_articles where id_mot=40)
 
Logiquement la solution a l'air d'être ça, maintenant synthaxiquement il faut trouver  :??:

Reply

Marsh Posté le 17-05-2003 à 14:34:36    

tafkap a écrit :

J'ai un élément de réponse. La requête doit ressembler à cela, mais ça ne fonctionne pas en MySQL :
 
select distinct id_article from mots_articles where mots_articles.id_mot IN (SELECT id_article from mots_articles where id_mot=33) AND mots_articles.id_mot IN (SELECT id_article from mots_articles where id_mot=40)
 
Logiquement la solution a l'air d'être ça, maintenant synthaxiquement il faut trouver  :??:  


 
je comprends pas très bien ce que tu cherches
tu voudrais qu'il regroupe les réponses pour avoir d'un cote ce qui concerne le 33 et de l'autre le 40 ?

Reply

Marsh Posté le 17-05-2003 à 14:57:22    

IN (SELECT id_article from mots_articles where id_mot=33) AND mots_articles.id_mot IN (SELECT id_article from mots_articles where id_mot=40)  
 
Tu remplaces les select dans le IN et ça ferait :
 
select distinct id_article from mots_articles where mots_articles.id_mot IN (33) AND mots_articles.id_mot IN (40)
 
Mais pour le coup, MySQL me remonte 0 ligne, y'a quelque chose qui cloche...


Message édité par tafkap le 17-05-2003 à 14:58:44
Reply

Marsh Posté le 17-05-2003 à 15:00:07    

tafkap a écrit :

IN (SELECT id_article from mots_articles where id_mot=33) AND mots_articles.id_mot IN (SELECT id_article from mots_articles where id_mot=40)  
 
Tu remplaces les select dans le IN et ça ferait :
 
select distinct id_article from mots_articles where mots_articles.id_mot IN (33) AND mots_articles.id_mot IN (40)
 
Mais pour le coup, MySQL me remonte 0 ligne, y'a quelque chose qui cloche...


 
désolée mais je ne comprends pas ce que tu cherches  
j'aimerais comprendre pourtant  :??:

Reply

Marsh Posté le 17-05-2003 à 15:00:29    

tafkap a écrit :

Et non ce n'est pas OR  :)  
 
Je te donne un autre exemple.
 
TABLE MOTS_ARTICLES
 
id_mot  id_articles
3  1  
53  2  
33  3  
40  4  
47  5  
5  6  
53  10  
53  11  
53  12  
1  47  
54  47  
33  47  
40  47  
51  47  
1  48  
54  48  
33  48  
40  48  
51  48  
 
Alors je veux connaitre l'article qui est rattaché aux mots-clés 33 ET 40. Si je prends ta requête select distinct id_Article from spip_mots_articles where id_mot = 33 or id_mot = 40
, MySQL me donne les articles n°3, 47, 48 et 4, il fait bien un OR.
 
héhé pas simple non ?  ;) Faut peut-être regarder de ce côté : http://cerig.efpg.inpg.fr/tutoriel [...] chap21.htm


 
SELECT COUNT(id_mot) as sum,id_articles FROM MOTS_ARTICLES WHERE id_mot IN (33,40) GROUP BY id_articles HAVING sum>1;

Reply

Marsh Posté le 17-05-2003 à 15:34:09    

Mille merci joce  :jap: . A noter que pour que ça fonctionne correctement la valeur dans HAVING sum>'valeur' doit être égale au nombre d'arguments dans le IN.
 

Reply

Marsh Posté le 17-05-2003 à 15:36:15    

tafkap a écrit :

Mille merci joce  :jap: . A noter que pour que ça fonctionne correctement la valeur dans HAVING sum>'valeur' doit être égale au nombre d'arguments dans le IN.
 

tu veux dire HAVING sum>='valeur' avec valeur égale au nombre d'arguments dans le IN à ce moment là ;)

Reply

Marsh Posté le 17-05-2003 à 15:51:50    

joce a écrit :

tu veux dire HAVING sum>='valeur' avec valeur égale au nombre d'arguments moinsd un dans le IN à ce moment là ;)


 
Y savent même pas compte :whistle:

Reply

Marsh Posté le 17-05-2003 à 15:52:15    

Arf, j'avais pas vu le "=" :D

Reply

Marsh Posté le 17-05-2003 à 16:01:18    

MagicBuzz a écrit :

Arf, j'avais pas vu le "=" :D

c'est pour ca que je l'ai rajouté :D (c'était ou ca ou le -1 :D)

Reply

Marsh Posté le 17-05-2003 à 16:15:31    

HotShot a écrit :

Tiens Joce y a un bug :D

ouca ? :o

Reply

Marsh Posté le 17-05-2003 à 16:36:26    

[:wam]
pouet ! :o


Message édité par joce le 17-05-2003 à 16:41:14
Reply

Marsh Posté le 17-05-2003 à 16:41:48    

HotShot a écrit :

Hé ouais. Tu peux tester avec un de tes multis, tu verras.
 
Crée un topic sous Joce, loggue toi avec un multi, puis essaie d'éditer ce topic en rentrant login : Joce pass : bigbug et ca va chier :D

aucun problème chez moi, t'as du chier le chargement de la passage d'édit, devait manquait un champ hidden quelque part :heink:

Reply

Marsh Posté le 18-05-2003 à 12:39:03    

HotShot a écrit :

Non, ça me l'a fait plusieurs fois...

zarbe, j'ai pas le problème :D

Reply

Marsh Posté le 18-05-2003 à 13:28:44    

Salut les gars,  
 :)  
 
Dites c'est pas possible en MySQL de faire ça ? :
 
SELECT * FROM t_articles WHERE id_article IN (SELECT COUNT(id_mot) as sum,id_article FROM t_mots_articles WHERE id_mot IN (53,33) GROUP BY id_article HAVING SUM=2)
 
 :??:  
 

Reply

Marsh Posté le 18-05-2003 à 13:33:53    

avec MySQL 4.1 si, sinon non
et c'est HAVING sum=2, pas HAVING SUM=2

Reply

Marsh Posté le 18-05-2003 à 16:54:39    

Et essaie d'utiliser autrechose qu'un mot réservé (SUM est une fonction interne), ça t'évitera d'éventuels soucis.

Reply

Marsh Posté le 18-05-2003 à 17:29:57    

MagicBuzz a écrit :

Et essaie d'utiliser autrechose qu'un mot réservé (SUM est une fonction interne), ça t'évitera d'éventuels soucis.

:non: sum n'est pas un mot reservé :)

Reply

Marsh Posté le 18-05-2003 à 22:43:15    

joce a écrit :

:non: sum n'est pas un mot reservé :)


pourquoi ? sum n'existe pas en mysql :heink:

Reply

Marsh Posté le 18-05-2003 à 23:43:42    

c'est sum() qui est réservé(la fonction), pas sum, qui est un mot quelconque

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed