2013-06-01 160 views
0

我有一個快速問題。我在數據庫中有下表。mysql查詢排除重複記錄

CREATE TABLE IF NOT EXISTS `wp_agp_settings_data` (
    `ID` int(50) NOT NULL AUTO_INCREMENT, 
    `agp_user_id` int(10) NOT NULL, 
    `agp_order_id` int(10) NOT NULL, 
    `agp_blog_id` int(10) NOT NULL, 
    `agp_keywords` varchar(255) NOT NULL, 
    `agp_keywords_date` varchar(20) NOT NULL, 
    PRIMARY KEY (`ID`) 
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=5 ; 

INSERT INTO `wp_agp_settings_data` (`ID`, `agp_user_id`, `agp_order_id`, `agp_blog_id`, `agp_keywords`, `agp_keywords_date`) VALUES 
(1, 2, 5, 4, 'keyword1', '1369872000'), 
(2, 2, 0, 6, 'keyword2', '1369872000'), 
(3, 2, 0, 3, 'masterkey', '1369872000'), 
(4, 2, 0, 4, 'testkey', '1369872000'); 

我想只得到不同的agp_blog_ids。 到目前爲止,我這樣做:

SELECT agp_blog_id 
FROM wp_agp_settings_data 
WHERE 
     agp_user_id = 2 
     AND (agp_keywords NOT LIKE "%keyword1%" OR agp_keywords NOT LIKE "%key1%") 
     AND agp_keywords_date BETWEEN 1369872000 AND 1370044800 
GROUP BY agp_blog_id 

不過,我想,因爲在所有一個記錄已經匹配的條件排除結果「4」。

一些幫助將不勝感激。

+0

你想要的輸出是什麼? –

+0

它應該只返回6和3,因爲所有「4」匹配的日期範圍 –

+0

我不明白爲什麼4不應該檢索,日期都是一樣的。 「日期範圍內的所有4場比賽」是什麼意思? – Fabio

回答

0

我想這是你正在嘗試做的:

SELECT agp_blog_id 
FROM wp_agp_settings_data 
WHERE 
     agp_user_id = 2 
     AND agp_blog_id NOT IN(
       SELECT agp_blog_id FROM wp_agp_settings_data WHERE agp_keywords LIKE "%keyword1%") 
     AND agp_keywords_date BETWEEN 1369872000 AND 1370044800 
GROUP BY agp_blog_id 

這將排除具有在agp_keywords列「關鍵字1」的任何結果。您可以添加額外的關鍵字排除在'NOT IN'塊內

+0

謝謝大衛。這就是我一直在尋找的。我知道這是小調整。 –

0

您可以將NOT LIKE更改爲LIKE,然後否定該OR塊。

它去如下:

SELECT agp_blog_id, agp_keywords 
FROM wp_agp_settings_data 
WHERE 
     agp_user_id = 2 
     AND !(agp_keywords LIKE "keyword1%" OR agp_keywords LIKE "%testkey%") 
     AND agp_keywords_date BETWEEN 1369872000 AND 1370044800 
GROUP BY agp_blog_id; 

這裏是一個SQLFiddle example