如果数字介于间隔之间,则选择SQL

时间:2013-06-13 07:57:16

标签: sql wordpress mysqli intervals

我正忙着为我的客户建立一个目录网站,需要稍微调整一下搜索。

目录包含大量产品。每个产品都能够包含单个,多个和一个间隔的项目数。为了澄清这一点,我在下面列举了几个例子。

示例1) 多个项目数

itemnumber = 100,105,109,200

示例2) 项目编号的间隔

itemnumber = 100 - 110

示例3) 组合

itemnumber = 100 - 110,220,300 - 310,400,401

  

我的问题是:

     

是否有一种语法允许我检查两者之间的间隔   用' - '分隔的数字?

     

如果,有关如何构建允许我的查询的任何建议   实施。

     

如果,您会推荐任何指示?


其他信息

该网站是在WordPress中构建的 - 其中itemnumber是一个自定义元字段。 Atm我已经加入pre_posts并添加: - 也粘贴在pastebin中以便于阅读pastebin

$where .= " OR ID IN ( SELECT post_id FROM {$wpdb->postmeta} WHERE meta_value LIKE '%" . $wp_query->query_vars['s'] . "%' AND ( {$wpdb->posts}.ID=post_id AND {$wpdb->posts}.post_status!='inherit' AND ( {$wpdb->posts}.post_type='produkt' ) ) )";

上面的代码只是检查产品元字段是否包含搜索到的单词,不够具体。


3 个答案:

答案 0 :(得分:1)

将“ - ”替换为“AND”并使用BETWEEN关键字获取记录:

其中Column_Name介于100和110之间

答案 1 :(得分:0)

在故意非规范化数据库上使用关系逻辑是不可能的,比如邪恶的“Wordpress自定义元字段”方法。

因此,您可以做的最好的事情是执行2次查询:

  • 获得所有数字
  • 然后在PHP中扩展所有间隔(使用array_fill(),range()或其他)以创建以逗号分隔的常规列表
  • 后者将第二个查询传递给IN()

作为一项好处,您可以更快地执行

答案 2 :(得分:-1)

您应该使用CREATE FUNCTION / CREATE PROCEDURE创建自己的函数来构建查询

创建程序文档:

http://dev.mysql.com/doc/refman/5.0/en/create-procedure.html

字符串函数docs:

http://dev.mysql.com/doc/refman/5.1/en/string-functions.html