2

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

该目录包含一大堆产品。每个产品都可以包含一个、多个和一个区间的项目编号。为了澄清这一点,我在下面列出了几个例子。

示例 1) 多个项目编号

项目编号 = 100、105、109、200

示例 2) 项目编号的区间

项目编号 = 100 - 110

示例 3) 组合

项目编号 = 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' ) ) )";

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


4

3 回答 3

1

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

其中 Column_Name 介于 100 和 110 之间

于 2013-06-13T09:20:06.413 回答
0

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

因此,您能做的最好的事情就是执行 2 个查询:

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

作为一个好处,您将获得更快的执行速度

于 2013-06-13T08:13:55.523 回答
-1

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

创建过程文档:

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

字符串函数文档:

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

于 2013-06-13T08:02:54.510 回答