跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • 请教一个 SQL 按关键词查询的问题
未分類
11 1 月 2021

请教一个 SQL 按关键词查询的问题

请教一个 SQL 按关键词查询的问题

資深大佬 : yodhcn 1

假设有表
t_user
id column_1 column_2 column_3

t_tag
id name

r_user_tag
tag_id user_id

前端传来一组关键字 “keyword_A keyword_B|keyword_C -keyword_D”
要求查询包含 “keyword_A” 且 包含 “keyword_B”或”keyword_C” 且不包含 “keyword_D” 的 user 的结果

注:关键字 keyword 可能出现在 column_1,column_2,column_3,t_tag.name 中

像这种情景,该如何编写 SQL 查询语句?

是不是应该在 t_user 新增一个 search 列,在插入数据时,先将关键词提前拼接好存到 search 里,再在查询时根据 search 查找关键词,这样做更好些?

大佬有話說 (6)

  • 資深大佬 : test3207

    不要在数据库里搞搜索好些……虽然有些数据库有类似分词插件的邪道玩法,但是搞搜索 es 才是正统啊

  • 資深大佬 : dfzj

    如果不考虑执行效率,只考虑开发效率,可以这样干:构造一张新表,把字段拼接起来,
    然后用新造字段去匹配条件:
    SELECT * FROM
    (SELECT concat(column_1, column_2, column_3, t_tag) as ccc,
    …
    FROM t_user left join t_tag) as A
    WHERE ccc like keyword_A and ccc like keyword_B and ccc like keyword_C
    AND ccc not like keyword_D

    显然上述方法没办法走索引。
    另外现在直接写 SQL 就可以快速开发系统了: wuyuan.io

  • 資深大佬 : w504391883

    一说的对呀,怎么写都感觉邪门歪道,如果条件所限,只能笨办法来了

  • 主 資深大佬 : yodhcn

    @dfzj #2 确实我也很疑惑,”ccc like %keywork_A%” 用不到索引,用 SQL 搜索关键字是不是只能逐行比对?
    在我的使用场景中,数据库中至多有 1 万 行数据,请问这种情况下,用 SQL 搜索关键字是否可行?

  • 資深大佬 : sunsijia

    一说的对,搞个搜索吧

  • 資深大佬 : dfzj

    @yodhcn 如果至多一万行的话,那不用在意什么执行效率了,可以尝试

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具