【问题标题】:Search within the search results of an MYSQL Query在 MYSQL 查询的搜索结果中搜索
【发布时间】:2014-11-25 03:37:18
【问题描述】:

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

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

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

我正在寻找在 (特定日期)-First Search 中打开的请求,其中包含单词 xxx -second search

我找到了这个查询:

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

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

例如:

此查询将返回:

1,bannaba,我要活着,2014-09-01

6,苹果,呜呼,2014-09-02

7,芒果,心中有沟,2014-09-02

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

6,苹果,呜呼,2014-09-02

【问题讨论】:

    标签: java mysql sql database search


    【解决方案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 子句中添加条件。

    【讨论】:

    • col2 代表什么?我希望 word search 搜索整行,所以我可以在同一个搜索中搜索 id、comment 或 name。
    • 你没有在问题中命名你的列,所以你必须猜测列名。如果要搜索多个列,则在where 中添加附加子句:'Apple' in (col2, col3, col4, col5)
    • 我可以使用“*”而不是添加所有 8 列吗?
    • 这是我能找到的最好方法:SELECT * FROM requestserverdb.closedrequests WHERE ClosingTimeStamp >= '2014-09-17' AND ClosingTimeStamp
    • @DavidGidony 。 . .通常,您不能在where 子句中使用*。您需要列出列。
    【解决方案2】:

    使用嵌套的 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%";
    

    有什么影响。

    【讨论】:

      【解决方案3】:

      与其搜索日期,不如直接搜索包含单词 apple 的记录?另一种方法可能是有 2 个 WHERE 条件。一个延续日期,一个包含 Apple 一词

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-03-22
        • 2010-11-24
        • 1970-01-01
        • 1970-01-01
        • 2014-05-18
        相关资源
        最近更新 更多