2014-09-30 153 views
0

我正在用java編寫一個應用程序,它接收請求並將它們保存到文件中,然後它可以搜索舊請求。在MYSQL查詢的搜索結果中搜索

我開始升級我的應用程序以使用MySQL而不是普通的Txt文件。

我正在尋找一種方式來查詢數據庫以下列方式:

我期待針對在(特定日期)開通請求 - 首先搜索,包含單詞XXX - 第二搜索

我發現這個查詢:

SELECT * FROM requestserverdb.closedrequests WHERE ClosingTimeStamp LIKE "%2014-09-01%" 
OR ClosingTimeStamp LIKE "%2014-09-02%" ; 

這給了我,在這些日期創建的所有線路, 我希望查詢只返回這些結果包含特定單詞太內的線......

例如:

這查詢將返回:

1,bannaba,我想活着,2014年9月1日

6,蘋果,宇豪,2014年9月2日

7,芒果,凹槽是在心臟,2014年9月2日

我需要一個查詢將返回只包含單詞「蘋果」在其列的一個行:

6, apple,woo hoo,2014-09-02

回答

1

您的查詢是一個非常糟糕的方式來搜索日期時間。下面是一個好一點:

SELECT * 
FROM requestserverdb.closedrequests 
WHERE date(ClosingTimeStamp) = '2014-09-01' OR date(ClosingTimeStamp) = 2014-09-02'; 

如果你沒有時間組件時間戳,然後取出date()功能。僅在字符串上使用like

一個更好的方法是:

SELECT * 
FROM requestserverdb.closedrequests 
WHERE ClosingTimeStamp >= '2014-09-01' AND ClosingTimeStamp < 2014-09-03'; 

後者將允許發動機在ClosingTimeStamp使用索引。

如果要添加其他條件,只是將它加入:

SELECT * 
FROM requestserverdb.closedrequests 
WHERE ClosingTimeStamp >= '2014-09-01' AND ClosingTimeStamp <= 2014-09-03' AND 
     col2 = 'Apple'; 

SQL沒有內置節省查詢結果的另一個查詢的概念。你可以實現這樣的功能,但它可能不需要你的應用程序。您可以將條件添加到where條款。

+0

col2是什麼意思?我希望單詞搜索能夠搜索整行,這樣我就可以在同一搜索中搜索標識,評論或名稱。 – 2014-09-30 13:37:56

+0

你不會在問題中命名你的列,所以你必須猜測列名。如果你想搜索多個列,那麼在(col2,col3,col4,col5)''中的'where':''Apple'中添加附加的子句。 – 2014-09-30 13:59:20

+0

我可以使用「*」而不是添加所有8列嗎? – 2014-09-30 14:21:07

0

使用嵌套的SELECT。但是內部SELECT不應該使用*,以便可以從外部SELECT引用列表。

SELECT col_1 (SELECT col_1, col_2 FROM requestserverdb.closedrequests WHERE ClosingTimeStamp LIKE "%2014-09-01%" OR ClosingTimeStamp LIKE "%2014-09-02%") WHERE col_1 LIKE "%XXX%"; 

對此有影響。

0

而不是搜索日期,爲什麼你不只是搜索一個包含蘋果一詞的記錄?另一種方式可能是有2個WHERE條件。一個包含日期和一個包含單詞Apple