在MYSQL查询的搜索结果中搜索

时间:2014-09-30 13:24:18

标签: java mysql sql database search

我正在用java编写一个应用程序,它接收请求并将它们保存到文件中, 然后它可以搜索旧的请求。

我开始升级我的应用程序以使用MySQL而不是普通的Txt文件。

我正在寻找一种以下列方式查询数据库的方法:

我正在寻找在(特定日期) - 首次搜索中打开的请求,其中包含单词xxx - 第二次搜索

我找到了这个查询:

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

这给了我在这些日期创建的所有行, 我希望查询只返回包含特定单词的这些结果中的行...

例如:

此查询将返回:

1,班纳巴,我想活着,2014-09-01

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

7,芒果,沟在心里,2014-09-02

我需要一个查询,该查询只返回其中一列中包含单词“apple”的行:

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

3 个答案:

答案 0 :(得分: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子句添加条件。

答案 1 :(得分: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%";

对此产生影响。

答案 2 :(得分:0)

为什么不搜索包含苹果这个词的记录,而不是搜索日期?另一种方式可能是有2个WHERE条件。一个包含日期和一个包含Apple

的词