【发布时间】:2020-05-02 10:30:10
【问题描述】:
String name = null;
String keyword2 = null;
String author = "John";
PreparedStatement stmt3 = DBM.conn.prepareStatement("SELECT * FROM `timelines` LEFT JOIN `users` ON users.UserID = timelines.TimelineOwner WHERE " +
" `TimelineName` = COALESCE(NULLIF(?, ''), `TimelineName`) AND `Keywords` = COALESCE(NULLIF(?, ''), `Keywords`) and `UserName` = COALESCE(NULLIF(?, ''), `UserName`);") ;
stmt3.setString(1, name);
stmt3.setString(2, keyword2);
stmt3.setString(3, author);
List<Timeline> list = DBM.getFromDB(stmt3, new Timeline());
上面是我对 MySQL 数据库的搜索查询,一切都很好,除了我想添加一个附加项,但我不知道如何编码。
问题是关键字存储在数据库中的逗号拼接字符串中,当我将关键字参数更改为“罗马”时,它应该返回该时间轴,但它不会因为数据库字符串是罗马,凯撒, Sun ......我怎样才能添加到查询中,以便在关键字列中 - 它应该单独将参数与单词进行比较?
更新:也许我可以使用 FIND_IN_SET() 并且如果从中返回大于 0 则返回匹配?
【问题讨论】:
-
说明你要比较的字符串
-
您是否考虑过使用存储过程来运行它而不是在前端运行它?
-
有什么理由使用逗号分隔的字符串而不是 1:N 关系?