我有一个MySQL字段,引用另一个表,其中id被保存为逗号分隔列表,例如:
12,13,14,16
Run Code Online (Sandbox Code Playgroud)
它代表另一个表中的值.我知道这是非常糟糕和错误,但这来自上面,我不能做任何事情.现在的问题是我想用这样的查询在该字段中搜索:
SELECT ... WHERE field LIKE '%1%'
Run Code Online (Sandbox Code Playgroud)
问题现在很明显,几乎所有条目都可以通过此示例查询找到,因为最常见的ID位于范围10-20中.我的想法是搜索%,1,%,但这不适用于该字段中的第一个和最后一个ID.我有类似内部替换的东西或我如何解决这个最好的方法?
awm*_*awm 75
你需要这个FIND_IN_SET功能:
SELECT ... WHERE FIND_IN_SET('1', field)
Run Code Online (Sandbox Code Playgroud)
Sco*_*Chu 17
请注意,plain FIND_IN_SET不区分大小写,
即FIND_IN_SET('b3','a1,a2,B3,b3')和FIND_IN_SET('B3','a1,a2,B3,b3')都返回3.
为区分大小写,将"binary"修饰符添加到第一个参数,例如FIND_IN_SET (binary 'b3', 'a1,a2,B3,b3')返回4.
正如其他人所说,Find_In_Set会让你编写查询,但你真的需要看看你的数据库设计(我知道你知道这个...)
在这样的分隔列表中包含外键的问题在于,外键的重点是使您能够使用索引快速定位另一个表中的信息.通过实现您拥有的数据库,您可以解决各种问题:
只有一种真正可以接受的解决方法 - 首先不要面对问题.
与高层人员聊天,并用他们的解决方案解释问题 - 然后解释正确完成工作的好处.
如果他们甚至不讨论这一点,那就找一份合适的雇主来评价你的贡献.
马丁.
| 归档时间: |
|
| 查看次数: |
25316 次 |
| 最近记录: |