【问题标题】:SQL select if number is between intervalSQL选择如果数字在区间之间
【发布时间】:2013-06-13 07:57:15
【问题描述】:

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

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

示例 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' ) ) )";

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


【问题讨论】:

  • “检查用'-'分隔的两个数字之间的间隔”是什么意思?您能否添加输入和预期输出?
  • Boris,示例 2 -> 数字用 ' - ' 分隔。输入可以是1 - 4,输出是sql,检查搜索的字符串是否匹配1234

标签: sql wordpress mysqli intervals


【解决方案1】:

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

Column_Name 介于 100 和 110 之间

【讨论】:

    【解决方案2】:

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

    所以,你能做的最好的就是执行 2 个查询:

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

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

    【讨论】:

    • 我正在考虑这一点,但我的印象是获取所有产品 + 元数据(大约 100 多种产品,每个产品都有大量元数据),然后在 PHP 中处理会减慢执行速度,而不是仅仅通过 SQL (?) 匹配它
    • 没有通过 SQL 进行匹配,因为您根本没有在架构中使用 SQL,而是使用键值存储。因此,您必须遵循您选择的相同键值方法。你知道,一个人不能同时坐在两把椅子上。
    【解决方案3】:

    您应该创建自己的函数,该函数将使用 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-01
      • 1970-01-01
      • 2019-05-12
      • 2012-05-04
      • 1970-01-01
      相关资源
      最近更新 更多