2013-01-07 3 views
8

Devo selezionare una riga dalla mia tabella mysql.MYSQL Selezionare su due valori una colonna

Nella tabella ci sono due righe con un valore uguale.

TABLE 
----- 
articleId 
keywordId 

Ora ho bisogno di selezionare un articolo, che ha parole chiave Id = 1, così come parola chiave Id = 12.

Ogni link per una parola chiave ha il proprio record.

Come posso fare una query di selezione per sapere se c'è un articolo che corrisponde alle due parole chiave?

risposta

9

Prova questa:

SELECT * 
FROM tablename 
WHERE keywordId IN (1, 12) 
GROUP BY articleId 
HAVING COUNT(*) = 2; 

Controllare il SQL FIDDLE DEMO

+0

SELEZIONA ccdn_nid, COUNT (*) FROM 'ccdn_cmdt' dove 'cmdt_tid' IN (1, 31584) GROUP BY' ccdn_nid' HAVING COUNT (*) = 2 Ho provato questo, ma ancora ottenere i risultati che appena hanno un record in 1. Tutte le idee? –

+0

@ user1955019 Controllare la demo. –

+0

Hey Saharsh, non riesco ancora a farlo funzionare: selezionare 'ccdn_nid' da 'ccdn_cmdt' dove' cmdt_tid'IN (1, 31641) GROUP BY 'ccdn_nid' HAVING COUNT (*) = 2 mio tavolo si presenta così: ccdn_nid int (11) cmdt_tid int (11) ccdncmdt_outpid int (11) Ancora ottenere una risultati risultato. –

1
SELECT * 
FROM `table_name` 
WHERE `keywordId` = '1' AND `keywordId` = '12' 
+0

assicurarsi che l'ortografia 'TABLE' :) –

2

Questo si chiama Relation Division. Ecco un modo per farlo:

SELECT * 
FROM tablename 
WHERE articleId IN 
(
    SELECT articleId 
    FROM tablename 
    WHERE KeywordId IN (1, 2) 
    GROUP BY articleId 
    HAVING COUNT(KeywordId) = 2 
);; 
+0

Questa query rallenterà il db molto in giù se usato in centinaia di querys al minuto? –

+0

@ user1955019 Dipende da quante righe hai in quella tabella. –

0
SELECT * 
FROM table 
WHERE keywordId IN (1, 12); 
1

È inoltre possibile utilizzare sottoquery per ogni parola chiave e unirsi a loro

select k1.articleId from 
(
    select articleId from TABLE where keywordId = 1 
) k1 
inner join 
(
    select articleId from TABLE where keywordId = 12 
) k2 on k1.articleId = k2.articleId 

A seconda indici e dimensioni della tabella questo può essere più efficiente rispetto Raggruppa

+0

thankssss lol: P – CantThinkOfAnything

1
select ArticleId from Table where keywordId = 1 
Intersect 
select ArticleId from Table where KeywordId = 12