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

标签 mysql sql string

这是第 3 方 API 为我提供的住宿

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 代表 child 。 () 中的数字范围表示 - child 的年龄范围。

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

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

它看起来像(例如)

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

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

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

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

最佳答案

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

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+之类的内容 或任何最能代表这一点的内容,只要这些值一致。

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

关于mysql - 搜索以字符串格式提供的数字范围内的数字(MySQL),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48013177/

相关文章:

php - 如何在SQL查询中使用bindValue和LIKE运算符?

arrays - 检查列表字符串中的元素是否为 BigQuery

Python:在三个字符的子字符串中切片字符串

mysql - 创建具有约 6 列复合键的表有何含义?

mysql - 从扳机体内放下扳机

java - 如何从Android发送数据到Mysql

sql - postgres 每日数据按小时分组

mysql - 获取所有产品、类别和元数据的 SQL 查询 woocommerce/wordpress

c - 二分查找出现无限循环,为什么?

sql - 简单的SQL问题(mysql)