我有一张桌子
select * from dom
Run Code Online (Sandbox Code Playgroud)
dom表细节:
id name skills
1 dom c,c++
Run Code Online (Sandbox Code Playgroud)
在这里,我想使用like运算符检索查询
select * from dom where skills like '%c,c++%'
Run Code Online (Sandbox Code Playgroud)
然后我得到了想要的结果,这不是问题.
假设我想使用以下查询
select * from dom where skills like '%C++,C%'
Run Code Online (Sandbox Code Playgroud)
我没有得到结果.
因此即使我在数据库中搜索相反的顺序,我也必须显示详细信息.
我怎样才能做到这一点?
Mar*_*ith 12
为了处理所有可能的情况(字符串的开头,字符串的结尾,2个分隔符之间),你需要低效(不能使用索引)
SELECT *
FROM dom
WHERE CONCAT(',', skills, ',') LIKE '%,C,%'
AND CONCAT(',', skills, ',') LIKE '%,C++,%'
Run Code Online (Sandbox Code Playgroud)
最好的答案是将您的数据库放入至少第一个Normal Form!
一个单独的技能表和技能/人矩阵表更有效地搜索和更容易使用(例如,删除个人技能)
如果你需要一个查询,将带回记录匹配谁DOMS 两个 C和C++(假设相同的模式jimmy_keen的答案),这可能是与自做加盟,以获得路口,交叉操作,或者使用其他关系划分技术如
SELECT d.name
FROM dom d
JOIN dom_skills ds
ON ( d.id = ds.id_dom )
JOIN skills s
ON ( ds.id_skill = s.id )
WHERE s.name IN ( 'C', 'C++' )
GROUP BY d.id,
s.id,
d.name
HAVING COUNT(DISTINCT s.name) = 2
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
191 次 |
| 最近记录: |