我需要在jQuery中使用查询中的元素数组。我的疑问是:
"SELECT * FROM `projects` WHERE `Tags` LIKE CONCAT('%', ',', ('" + id + "'), ',', '%')"
id
是一个动态数组,所以我基本上需要:
"SELECT * FROM `projects` WHERE `Tags` LIKE CONCAT('%', ',', ('" + id[0] + "'), ',', '%') **OR LIKE id[1] OR LIKE id[2]**..."
如果我将使用forEach
循环,它将仅依赖于数组中的一个元素返回行,它不支持Like ..或Like ..逻辑
var idArr = id.split(",");
idArr.forEach(function (id) {
_runQuery("SELECT * FROM `projects` WHERE `Tags` LIKE CONCAT('%', ',', '" + id + "', ',', '%')", function (rows) {....}
答案 0 :(得分:1)
给定数组
var id = [1,2,3,4,5];
试试这个
" WHERE tags LIKE '%"+ id.join("%' OR tags LIKE '%")+'%');
请在此处查看:http://jsfiddle.net/XzXnf/
答案 1 :(得分:-1)
您问题的最简单答案是:标签应该是一个单独的表,然后您将拥有:
“SELECT * from projects as p join tags as t on t.project_id = p.id where t.tag in(id [0],id [1],id [2] ....)”
当然,您可以通过连接轻松生成所需的id字符串(id.join(“,”)可能会这样做。
或者,正如@codingbiz指出的那样,你可以使用更复杂的id.join()调用来扩展所需的OR,但这种方法有限制,这就像你可以合理地制作一个复杂的查询一样在规范化之前开始看起来像个好主意。