0

首先,我不控制我正在管理的数据。它来自电子表格中的客户,我正在尽我所能。我实际上是在处理一团乱麻,并尽我所能将其正常化。

我正在使用 MariaDB 5.5.30,InnoDB 表格式。

我的一个项目要求要求在搜索结果中显示由“标准”缩写(至少在他们公司内部)组成的项目描述。用户可能不知道所有的缩写定义,所以他们最初的想法是一个单独的搜索框来查找一个缩写。相反,我想让用户悬停/单击内联缩写并查看定义的工具提示。

我知道这将涉及某种将描述中的缩写与缩写表匹配以获取定义的视图。我也知道这可能产生的开销。

我正在寻找一种相对有效的方法(视图、例程等)的建议。即使这意味着构建一个静态表,将项目与提供定义的记录联系起来......

|          ITEMS                       |
|--------------------------------------|
| Item ID | Desc                       |
|--------------------------------------|
|       1 | CHOC CONG DR DRP 18" 25ct. |
|--------------------------------------|

|       ABBREVIATIONS              |
|----------------------------------|
| Abbr ID | Abbr | Definition      |
|----------------------------------|
|       1 | CHOC | Chocolate       |
|       2 | CONG | Congestion      |
|       3 | DR   | Delayed-Release |
|       4 | DRP  | Drops           |
|----------------------------------|

缩写词几乎可以任何组合出现在项目描述中。只有与缩写匹配的描述片段才会有工具提示。不幸的是,一些缩写是多个单词,而另一些缩写则少于 4 个字符。

如果这样做会对性能造成痛苦,我愿意回到他们最初的想法。但是为了统一界面,我认为这会很好。

任何(建设性的)建议表示赞赏。

4

1 回答 1

0

它被搁置了几个月,但我又开始玩这个了......

SELECT ITEMS.ID, ITEMS.Desc, ABBRS.Abbr, ABBRS.Definition
FROM ITEMS
LEFT JOIN ABBREVIATIONS ABBRS ON ITEMS.Desc 
  LIKE REGEXP CONCAT('.*[[:<:]]', ABBRS.Abbr, '[[:>:]].*');

这会生成多条记录的项目描述,每条记录都有一个匹配的缩写和定义:

| RESULTS                                                  |
|----------------------------------------------------------|
| ID | Desc                       | Abbr | Definition      |
|----------------------------------------------------------|
|  1 | CHOC CONG DR DRP 18" 25ct. | CHOC | Chocolate       |
|  1 | CHOC CONG DR DRP 18" 25ct. | CONG | Chocolate       |
|  1 | CHOC CONG DR DRP 18" 25ct. | DR   | Delayed-Release |
|  1 | CHOC CONG DR DRP 18" 25ct. | DRP  | Drops           |
|----------------------------------------------------------|

使用REGEXP单词边界标记确保单字母缩写与描述中的部分单词不匹配。

从那里我可以在与缩写匹配的描述子字符串周围放置一个可操作元素,以便他们可以看到定义。

啊。

于 2013-08-29T17:08:12.833 回答