首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在字符串格式(MySQL)提供的数字范围内搜索数字

在字符串格式(MySQL)提供的数字范围内搜索数字
EN

Stack Overflow用户
提问于 2017-12-29 03:22:58
回答 1查看 29关注 0票数 0

这是第三方API提供给我的Accomodation

代码语言:javascript
复制
ID              NAME   
1               1 ADL + 1 CHD (0-2) + 1 CHD (6-9) + 1 CHD (10-18)   
2               1 ADL + 1 CHD   
3               1 ADL

在此表中,ADL代表成人,chd代表儿童。()中的数字范围是孩子的意思年龄范围。

因此,例如,如果我需要查找由字符串组成的行,这意味着:

代码语言:javascript
复制
1 - Adult, 
1 - 3 years old child
1 - 5 years old child

它看起来像(例如)

代码语言:javascript
复制
1 ADL + CHD (2-5) + CHD (4 - 9)

所以我需要看一下,如果我要寻找的年龄在这些年龄范围之间,还需要分析这些字符串以找到正确的匹配。

考虑到这些名称中可能存在打字错误,并且此过程需要非常快速地完成,我对sql查询感到非常困惑,因为它可以帮助我从表中找到正确的住宿id。

有什么建议吗?如果这不是正确的方法,那么正确的方法是什么呢?

EN

回答 1

Stack Overflow用户

发布于 2017-12-29 04:56:57

您需要更好地组织此数据,因此一种方法是将其拼写为一系列列:

代码语言:javascript
复制
CREATE TABLE accommodations (
  id INT PRIMARY KEY AUTO_INCREMENT NOT NULL,
  descriptor VARCHAR(255),
  adults INT DEFAULT 0,
  child_0_1 INT DEFAULT 0,
  child_2_5 INT DEFAULT 0,
  child_6_9 INT DEFAULT 0,
  child_10_18 INT DEFAULT 0
);

其中这些列中的每一列表示特定的量。在解析任意的、经常被破坏的数据时,我更喜欢做的一件事是在表中保留准确的输入字符串,以便您可以检查错误。这就是这里descriptor字段的用途。

您还可以创建一个适当的一对多结构,大致如下:

代码语言:javascript
复制
CREATE TABLE accommodations (
  id INT PRIMARY KEY AUTO_INCREMENT NOT NULL,
  descriptor VARCHAR(255)
);

CREATE TABLE accommodation_people (
  id INT PRIMARY KEY AUTO_INCREMENT NOT NULL,
  accommodation_id INT NOT NULL,
  age VARCHAR(255) NOT NULL,
  number INT NOT NULL,
  KEY `index_on_accommodation_id` (accommodation_id)
);

age列中,您可以放入类似child(0-1)0-119+之类的内容,只要这些值是一致的。

您必须判断拥有一个派生表的开销是否在这里提供了任何值。我倾向于尽可能地尝试使用更规范化的模式,但在本例中,由于辅助表只有几个潜在的年龄值,很难说哪种方法是最好的。如果有额外的元数据,比如名字之类的,那么第二个“来宾”模型将是理想的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48013177

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档