Besoin d'aide pour une requête [MySQL] - SQL/NoSQL - Programmation
Marsh Posté le 16-05-2003 à 15:43:52
utilise un count(*)<2 peut etre
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 ?
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.
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...
Marsh Posté le 16-05-2003 à 17:02:37
le count(*) ne marche pas.
J'essaie de trouver une requete
Marsh Posté le 16-05-2003 à 17:03:15
Salut à tous les deux et merci pour l'aide
Je me suis surement mal exprimé...
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à ?
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...
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....
a essayer
Marsh Posté le 16-05-2003 à 19:36:35
Je retente le coup
ç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)
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 |
Marsh Posté le 17-05-2003 à 11:37:22
Salut,
non toujours pas trouvé
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 ?
Une récompense pour celui qui trouve la solution
Marsh Posté le 17-05-2003 à 12:16:40
et ce que je viens de te donner ne marche pas ?
tafkap a écrit : Salut, |
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.
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 : |
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;
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
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
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 : |
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 ?
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...
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) |
désolée mais je ne comprends pas ce que tu cherches
j'aimerais comprendre pourtant
Marsh Posté le 17-05-2003 à 15:00:29
tafkap a écrit : Et non ce n'est pas OR |
SELECT COUNT(id_mot) as sum,id_articles FROM MOTS_ARTICLES WHERE id_mot IN (33,40) GROUP BY id_articles HAVING sum>1;
Marsh Posté le 17-05-2003 à 15:34:09
Mille merci joce . A noter que pour que ça fonctionne correctement la valeur dans HAVING sum>'valeur' doit être égale au nombre d'arguments dans le IN.
Marsh Posté le 17-05-2003 à 15:36:15
tafkap a écrit : Mille merci joce . 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à
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
Marsh Posté le 17-05-2003 à 16:01:18
MagicBuzz a écrit : Arf, j'avais pas vu le "=" |
c'est pour ca que je l'ai rajouté (c'était ou ca ou le -1 )
Marsh Posté le 17-05-2003 à 16:41:48
HotShot a écrit : Hé ouais. Tu peux tester avec un de tes multis, tu verras. |
aucun problème chez moi, t'as du chier le chargement de la passage d'édit, devait manquait un champ hidden quelque part
Marsh Posté le 18-05-2003 à 12:39:03
ReplyMarsh 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)
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
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.
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. |
sum n'est pas un mot reservé
Marsh Posté le 18-05-2003 à 22:43:15
ReplyMarsh Posté le 18-05-2003 à 23:43:42
c'est sum() qui est réservé(la fonction), pas sum, qui est un mot quelconque
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