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

问题描述 投票:0回答:1

这是由第三方API提供的Accomodation

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代表孩子。 ()中的数字范围是指儿童的年龄范围。

所以,例如,如果我需要找到由字符串组成的行,这意味着:

1 - Adult, 
1 - 3 years old child
1 - 5 years old child

它看起来像(例如)

1 ADL + CHD (2-5) + CHD (4 - 9)

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

考虑到事实,这些名称中可能存在拼写错误,并且此过程需要非常快速地完成,我对sql查询非常困惑,这可能有助于我从表中找到正确的住宿ID。

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

mysql sql string
1个回答
0
投票

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

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领域的目的。

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

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+或其他最佳代表的东西,只要这些值是一致的。

您必须判断衍生表的开销是否在此提供任何值。我倾向于尝试尽可能地引导更规范化的模式,但在这种情况下,由于辅助表只有少数潜在的年龄值,因此很难说哪种方法最好。如果有其他元数据,如名称等,那么“客人”的第二个模型将是理想的。

© www.soinside.com 2019 - 2024. All rights reserved.