Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1156 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°397026
tafkap
Posté le 16-05-2003 à 15:36:35  profilanswer
 

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

mood
Publicité
Posté le 16-05-2003 à 15:36:35  profilanswer
 

n°397056
polo021
Posté le 16-05-2003 à 15:43:52  profilanswer
 

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


Message édité par polo021 le 16-05-2003 à 15:44:08
n°397288
backdafuck​up
Back to da old skool
Posté le 16-05-2003 à 16:48:01  profilanswer
 

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 ?

n°397297
polo021
Posté le 16-05-2003 à 16:52:52  profilanswer
 

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.

n°397308
backdafuck​up
Back to da old skool
Posté le 16-05-2003 à 16:55:36  profilanswer
 

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...

n°397326
backdafuck​up
Back to da old skool
Posté le 16-05-2003 à 17:02:37  profilanswer
 

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

n°397329
tafkap
Posté le 16-05-2003 à 17:03:15  profilanswer
 

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:

n°397338
backdafuck​up
Back to da old skool
Posté le 16-05-2003 à 17:09:16  profilanswer
 

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...

n°397348
polo021
Posté le 16-05-2003 à 17:17:15  profilanswer
 

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

n°397461
tafkap
Posté le 16-05-2003 à 19:36:35  profilanswer
 

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
mood
Publicité
Posté le 16-05-2003 à 19:36:35  profilanswer
 

n°397802
cybil
Posté le 17-05-2003 à 10:54:24  profilanswer
 

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)  
 
 

n°397818
tafkap
Posté le 17-05-2003 à 11:37:22  profilanswer
 

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  ;)  

n°397826
cybil
Posté le 17-05-2003 à 12:16:40  profilanswer
 

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  ;)  
 

n°397831
tafkap
Posté le 17-05-2003 à 12:25:31  profilanswer
 

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.

n°397836
cybil
Posté le 17-05-2003 à 12:35:19  profilanswer
 

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.

n°397837
tafkap
Posté le 17-05-2003 à 12:36:25  profilanswer
 

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

n°397851
cybil
Posté le 17-05-2003 à 13:13:52  profilanswer
 

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;
 

n°397857
tafkap
Posté le 17-05-2003 à 13:31:40  profilanswer
 

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
n°397864
tafkap
Posté le 17-05-2003 à 13:40:47  profilanswer
 

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  :??:

n°397891
cybil
Posté le 17-05-2003 à 14:34:36  profilanswer
 

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 ?

n°397902
tafkap
Posté le 17-05-2003 à 14:57:22  profilanswer
 

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
n°397903
cybil
Posté le 17-05-2003 à 15:00:07  profilanswer
 

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  :??:

n°397904
joce
Architecte / Développeur principal
&#034;BugHunter&#034;
Posté le 17-05-2003 à 15:00:29  profilanswer
 

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;

n°397915
tafkap
Posté le 17-05-2003 à 15:34:09  profilanswer
 

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.
 

n°397918
joce
Architecte / Développeur principal
&#034;BugHunter&#034;
Posté le 17-05-2003 à 15:36:15  profilanswer
 

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à ;)

n°397926
MagicBuzz
Posté le 17-05-2003 à 15:51:50  profilanswer
 

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:

n°397927
MagicBuzz
Posté le 17-05-2003 à 15:52:15  profilanswer
 

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

n°397933
joce
Architecte / Développeur principal
&#034;BugHunter&#034;
Posté le 17-05-2003 à 16:01:18  profilanswer
 

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)

n°397937
joce
Architecte / Développeur principal
&#034;BugHunter&#034;
Posté le 17-05-2003 à 16:15:31  profilanswer
 

HotShot a écrit :

Tiens Joce y a un bug :D

ouca ? :o

n°397947
joce
Architecte / Développeur principal
&#034;BugHunter&#034;
Posté le 17-05-2003 à 16:36:26  profilanswer
 

[:wam]
pouet ! :o


Message édité par joce le 17-05-2003 à 16:41:14
n°397952
joce
Architecte / Développeur principal
&#034;BugHunter&#034;
Posté le 17-05-2003 à 16:41:48  profilanswer
 

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:

n°398324
joce
Architecte / Développeur principal
&#034;BugHunter&#034;
Posté le 18-05-2003 à 12:39:03  profilanswer
 

HotShot a écrit :

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

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

n°398352
tafkap
Posté le 18-05-2003 à 13:28:44  profilanswer
 

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)
 
 :??:  
 

n°398354
joce
Architecte / Développeur principal
&#034;BugHunter&#034;
Posté le 18-05-2003 à 13:33:53  profilanswer
 

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

n°398556
MagicBuzz
Posté le 18-05-2003 à 16:54:39  profilanswer
 

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

n°398602
joce
Architecte / Développeur principal
&#034;BugHunter&#034;
Posté le 18-05-2003 à 17:29:57  profilanswer
 

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é :)

n°398818
MagicBuzz
Posté le 18-05-2003 à 22:43:15  profilanswer
 

joce a écrit :

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


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

n°398881
Profil sup​primé
Posté le 18-05-2003 à 23:43:42  answer
 

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

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

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

 

Sujets relatifs
[mysql] clée primaire: avoir 00001 au lieu de 1UML : Besoin de vos lanternes
[mysql] inserer des données provenant d'une autre tableMySQL : Errcode 144
Lien hypertext vers page Web ou email dans une page d'aide WinHelp ?[Php, mysql] [résolu] Récupérer la valeur de max_allowed_packet ?
[RESOLU][JBDC][MYSQL] un petit pb d'accent?modifier un enregistrement a partir d'une requete
comment récupérer en php les valeurs possibles d'un enum mysql[PHP/MYSQL]Parametre dans les URL, probleme de majuscules
Plus de sujets relatifs à : [MySQL] Besoin d'aide pour une requête


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR