当表有八列时搜索数据库条目以查找匹配项

Posted

技术标签:

【中文标题】当表有八列时搜索数据库条目以查找匹配项【英文标题】:Search DB entries for a match when table has eight columns 【发布时间】:2015-05-11 06:32:33 【问题描述】:

我必须使用 8 个字段的 POJO“订单”,每个字段都是“订单”表中的一列。 DB 模式是非规范化的(更糟糕的是,被认为是最终的和不可更改的)所以现在我必须编写一个搜索模块,它可以使用上述 8 个字段的任意组合执行搜索。

有什么方法可以做到这一点吗?现在,我在一个新的 POJO 中获取输入,并通过 8 个 IF 语句查找非 NULL 值。每次找到这样的值时,我都会将其添加到 SELECT 语句中的 WHERE 条件中。

这是我所希望的最好的吗?可以说选择一些最低标准更好,然后在内存中迭代接收到的集合,只保留与其余标准匹配的条目吗?如果有用的话,我可以提供伪代码。使用 Java 1.7、JSF 2.2 和 mysql

【问题讨论】:

我会删除 java 和 jsf 标签并添加 jpa 或 jdbc。但是关于这个问题:只需使用八个 if 语句。只要确保你有所有的索引 【参考方案1】:

每次我找到这样一个值时,我都会将它添加到我的 SELECT 语句中的 WHERE 条件中。

这是 Sql 注入攻击的主要目标!

MySql 可以使用类似下面的内容吗?

SELECT *
FROM SomeTable
WHERE (@param1 IS NULL OR SomeTable.SomeColumn1 = @param1) OR
    (@param2 IS NULL OR SomeTable.SomeColumn2 = @param2) OR
    (@param3 IS NULL OR SomeTable.SomeColumn3 = @param3) OR
    /* .... */

【讨论】:

以上是关于当表有八列时搜索数据库条目以查找匹配项的主要内容,如果未能解决你的问题,请参考以下文章

当表有0行时如何检查数据库表是不是存在?

雪花任务条件:当表有数据时

Laravel:当表有两个外键时,为具有关系的数据库表播种

搜索元组列表以查找匹配子字符串的算法方法?

在 python 列表中向后或向前循环以查找匹配项

NSPredicate 仅查找第一个匹配项