我有一个MySQL数据库例如所谓的“关键字”字段关键字的列表中记录的关键字字段包含3个样本记录MYSQL匹配关键字列表逗号分隔文本字段
KEYWORD LIST 1: tree,apple,banana,cherry,flower,red apple,pink cherry,cat,mouse
KEYWORD LIST 2: cat,mouse,apple,red apple,flower,red appleberry
KEYWORD LIST 3: apple, red appleberry, flower
的关键字列表不是一个数组 - 只是一个mysql数据库中的文本字段,它有很多其他字段。
当我运行从我所看到的一个MYSQL SELECT查询“到目前为止,”有两种方式:1)像%% b)针对
比赛比方说,我想请对单词的查询“苹果”
SELECT *从哪里表
LIKE“%苹果%”的关键字这将弹出包含单词“苹果”,包括以上,但它并不一定给我任何顺序记录记录更高或更低。我不得不做的结果后过滤查询。
假如我是在我的查询更详细,并选择了“红苹果”它仍然会显示一个比赛,但我不一定会得到具有关键字列表1比2或3
有人更相关使用对阵代替
SELECT *, MATCH(Keywords) AGAINST('apple') AS Score
FROM table
WHERE Keywords like '%red apple%'
ORDER BY score DESC;
这是朝着正确的方向肯定航向建议 - 但将不会通过精确匹配的结果被人发现更多相关的排序。相关性将基于关键字列表中出现“苹果”一词的多少次重复(这是所有搜索引擎选择完全忽略关键字的古老原因) - 您是否看到我要与此相伴?
我正在寻找的是在MYSQL中处理大部分逻辑,而不是像其他人所说的那样将其读入数组并在PHP中处理。因此这个简单的例子。
下面是查询应该给它应该如何:
1)如果我的查询是“苹果”的关键字列表1应显示第一
2)如果我的查询是“红苹果”,那么关键字列表2应该显示首先是因为'red apple'这个词在关键字列表的FRONT处更接近于字符串的开头。
因为LIKE %%
关键字列表3会出现,而不是“红苹果”,即使比赛是“红色appleberry”,但
(这将是最简单的MySQL是否有某种'explode'函数可以指定逗号(',')作为匹配中的分隔符,但我不知道任何这样的方法,是吗?当然,您必须将整个结果列表读入3)假设我搜索'红苹果',这里是bug:我仍然会在'红苹果'(记录3)上找到一个匹配项, - 我不想那样。记录2应显示,然后记录1,甚至不显示记录3.
这是一个讨论和一个查询。任何人有任何建议?
我自己的答案: 包括在查询的 而不是搜索的“红苹果”搜索逗号“红苹果” 但如果用户把之间的空间 - 在末端或者其关键字列表?
问题: 我们如何在MYSQL的逗号分隔文本字段中搜索特定的SCORE,使用精确的单词(而不是片段)来创建ORDERED结果列表。
尽管红苹果和红苹果是用逗号分隔的两个不同的短语,但到目前为止的每一次尝试仍将使关键字列表3显示高于2。
谢谢!来!我们讨论一下!
栈是Q&A网站不是一个讨论参见[文章](http://meta.stackexchange.com/questions/13198/where-我可以找到有趣的编程讨论) – xQbert
为什么这些关键字全部卡在一个列中而不是另一个表中? –
您的数据库设计混乱了。有了这个设计,你就不会得到你想要的满足和高性能的方式。 – Reeno