我目前有两个表:

search_matches:

match_id (int) <-- primary key
parent_id (int) <-- foreign-key
word_id (int) <-- foreign-key (to a table filled with words that are unique and have an id)
pos (int) <-- the position of the word in the block of text it comes from

search_words :(更新)

word_id (int) <-- primary key
word (varchar ...) <-- the word

(我使用的是innodb,并且我的主机不会升级mysql,因此全文不可用)

我希望用户可以使用“。”,以便他们可以搜索“ foo bar”。

我已经想到了几种方法,但是最不密集的方法似乎是添加了另一列:

next_pos (int)

然后我可以做

(SELECT * FROM table WHERE word_id='foo') as foo
INNER JOIN (SELECT * FROM table WHERE word_id='bar') AS bar 
ON (
  foo.parent_id=bar.parent_id AND
  foo.next_pos=bar.next_pos
)

它以存储额外的列和每个单词之外的每个单词的内部联接为代价,但这是我到目前为止提出的最佳选择。 (之前的想法是减少一列,但是需要在ON块内进行加法运算,我认为随着网站的发展,这可能会变得过于昂贵。

这是我最好的选择,还是那里还有其他选择? 我仍然只是在舞台上玩,所以现在是时候进行更改了。


更新1:

我现在正在考虑使用关键字表来缩小搜索范围,然后在其上使用like而不是多个联接,因为这可能更快,并且极大地消除了对联接的需要。 在我的整个数据库上做一个赞只是没有效果。

===============>>#1 票数:0

我真的不明白您为什么要完成所有这些手动工作。 有一些工具可以简单地完成它。 根据我的阅读,您想要做的事情与全文搜索有关。 您不需要自己建立索引。

您是否考虑过使用SolR之类的东西? 只要您创建索引,它就可以与任何类型的数据库一起很好地工作。

===============>>#2 票数:-1

我看不到您将如何使用当前设置进行搜索。 如果您说有一个表,其中仅包含一个文本块中的UNIQUE单词,那么您如何期望将唯一单词的列表与整个内容中的实际单词位置相关联? 例如,说原始内容看起来像这样:

some text with foo and also with foo bar

您会使用独特的单词表吗?

word_id   word
--------------
1         some
2         text
3         with
4         foo
5         and
6         also
7         bar

如果是这样,您将如何查找foobar作为相邻记录?

我假设您的数据库在某处也有完整的内容,那么为什么不只使用LIKE搜索内容呢?

  ask by Kirk translate from so

未解决问题?本站智能推荐:

2回复

关键字搜索,多个表,PHP和Mysql,要使用哪个Join?

我有3个表event,location,event_location。 事件可以有多个位置。 位置表具有经度,纬度和hasGeocode字段。 因此,对于关键字“ hello world” 对事件表的简单查询成为 但是,如果用户输入了他们的位置,那么我也想在此查询中包括位
4回复

MySQL搜索(按相关性排序)

谁能帮我按以下标准按相关性对行进行排序? 在搜索表单上,用户具有以下字段 学校学院和大学是可选的 “名称”分为2个单词(中间的其他单词被省略),第一个单词作为第一个主题,最后一个单词作为姓。 现在,我想基于相关性进行搜索。 谢谢您的帮助 :)
3回复

MySQL搜索用户及其角色

我正在重新编写SQL,该SQL可让用户搜索我们网站上的任何其他用户,并显示他们的角色。 例如,角色可以是“作家”,“编辑者”,“发布者”。 每个角色将用户链接到发布。 用户可以在多个出版物中扮演多个角色。 表格设置示例: 当前的伪SQL: 目前,我的角色声
3回复

MySQL搜索多个联接结果

我有一个“产品”表和一个存储产品某些属性的表: zd_product_attached_attributes 我只想在zd_products中搜索具有某些属性值的产品,例如用于考试的地方在属性1为A而属性3为AB时获取产品在属性2为10且属性3为CC等时获取产品 我如何使用
1回复

MySQL搜索好友查询

我有一个用户表: 我也有一个朋友表: 我有一个简单的查询,可以根据条件($ searchString)搜索用户,并根据“最佳”匹配对它们进行排序: 该查询将忽略当前用户: 因为您无法将自己加为好友。 如何忽略/不显示已经是朋友的用户? 例 我是用
1回复

MySQL 2搜索2个表联接

是否可以在两个查询中对两个不同的表进行两次搜索,并以某种方式使用JOIN在一个查询中收集它们重叠的位置? 这是用人的术语思考的过程:(请注意,我有两个表;配置文件和发票) 从发票表中找到所有已支付列填充为“已支付”的行 获取所有相应的“ profileid”列号
1回复

MySQL-搜索自我联接和范围或数据

我受命与当地社区中心一起在情人节之前及时制作“新婚”类游戏,所以不要着急! 因此,我们有50对陌生的夫妻,他们彼此非常了解,因此将在时间之前被问到100个问题。 每个问题都有用户响应以及允许误差范围的范围(此范围配额将受到限制)。 然后他们可以选择他们认为合作伙伴将要回答的内容,并且误
1回复

使MySQL“ IN”搜索返回所有相关行

我必须在三个表中使用mysql执行查询。 查询是这样的 这给我以下结果 但是我需要与inter1有关系的所有应用程序,(即)我希望得到以下结果。 请指导我修改以上查询。 先感谢您。
1回复

MySQL搜索单个和多个子选择

我有一张大桌子(大约1000万行,此刻所有假测试数据。)。 id用户和操作都不都是唯一的,但是用户只能执行一次操作。 (这意味着将永远只有一个id_user和id_action的组合。 x和y都只会是INT的1-100 我已经索引了每一列。 这是我要开发的游戏。
1回复

mysql搜索带有多个表的电子邮件和域名

我有3个mysql表: unsubscribers => (id, email) bounces => (id, email, bounce_reason) blacklists => (id, domain) 例如,假设我们必须搜索电子邮件ID: so