2014-09-30 91 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