2013-01-07 51 views
8

Tôi cần chọn một hàng từ bảng mysql của mình.MYSQL Chọn hai giá trị một cột

Trong bảng có hai hàng có giá trị bằng nhau.

TABLE 
----- 
articleId 
keywordId 

Bây giờ tôi cần phải chọn một bài báo, mà có từ khóa Id = 1, cũng như từ khóa Id = 12.

Mỗi liên kết đến một từ khóa có kỷ lục của chính mình.

Tôi làm cách nào để thực hiện một truy vấn chọn, nếu có bài viết phù hợp với hai từ khóa?

Trả lời

9

Hãy thử điều này:

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

Kiểm tra SQL FIDDLE DEMO

+0

CHỌN ccdn_nid, COUNT (*) FROM ' ccdn_cmdt' ĐÂU 'cmdt_tid' IN (1, 31.584) GROUP BY' ccdn_nid' COUNT địa CÓ (*) = 2 Tôi tryed này, nhưng vẫn nhận được kết quả mà chỉ có một kỷ lục trong 1. ý tưởng Bất kỳ? –

+0

@ user1955019 Kiểm tra bản trình diễn. –

+0

Hey Saharsh, tôi vẫn không thể làm cho nó làm việc: CHỌN 'ccdn_nid' FROM 'ccdn_cmdt' ĐÂU' cmdt_tid'IN (1, 31.641) GROUP BY 'ccdn_nid' HAVING COUNT (*) = 2 bàn của tôi trông như thế này: ccdn_nid int (11) cmdt_tid int (11) ccdncmdt_outpid int (11) Tuy nhiên nhận được một kết quả kết quả. –

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

đảm bảo chính tả 'TABLE' :) –

2

này được gọi là Relation Division. Dưới đây là một cách để làm như vậy:

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

Truy vấn này có làm chậm db nhiều khi được sử dụng trong các truy vấn mỗi phút? –

+0

@ user1955019 Tùy thuộc vào số lượng hàng bạn có trong bảng đó. –

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

Bạn cũng có thể sử dụng truy vấn con cho mỗi từ khóa và tham gia cùng họ

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 

Tùy thuộc vào chỉ số và kích thước bảng này có thể hiệu quả hơn Nhóm Bằng

+0

thankssss lol: P – CantThinkOfAnything

1
select ArticleId from Table where keywordId = 1 
Intersect 
select ArticleId from Table where KeywordId = 12 
Các vấn đề liên quan