完全匹配,如果没有完全匹配,则在单个查询中进行部分匹配?

Joshuahedlund

我需要在以下条件下搜索MySQL数据库:

1)如果找到与关键字完全匹配的结果,则返回行数和结果完全匹配的结果。

2)如果未找到完全匹配,则返回行数和部分匹配的结果。

例如,如果关键字为cake,并且表具有以下行,则搜索应仅返回第1行和第5行。

1| cake
2| pancake
3| cupcake
4| fruitcake
5| cake
6| pie

但是,如果仅存在以下行,则搜索应仅返回2-4行。

2| pancake
3| cupcake
4| fruitcake
6| pie

在两个查询中执行此操作很简单,例如:

SELECT SQL_CALC_FOUND_ROWS fields FROM table WHERE word = `cake`

//PHP checks for number of rows, if 0, do second query

SELECT SQL_CALC_FOUND_ROWS fields FROM table WHERE word LIKE '%cake%'

问题:为了减少访问数据库的次数,有没有办法在单个查询中执行此操作?

我能想到的最好的解决方案是通过OR进行匹配,使用ORDER BY支持完全匹配。但是,如果找到完全匹配项,则要切断部分匹配项,需要对结果进行迭代,如果完全匹配项返回2,000个结果,而部分匹配项又返回5,000个,这是不可行的,但我只想显示前25个,同时仍然显示2,000个

第二

编辑3:

下面做工作:

SELECT 
    COALESCE(NULLIF(COUNT(exact.Id), 0), COUNT(partial.Id))
FROM
    Test AS partial
LEFT JOIN
    Test AS exact ON exact.Id = partial.Id AND exact.Name = 'pi'
WHERE
    partial.Name LIKE '%pi%'

我在这里删除了我的上一个文本,因为它是错误的。

编辑4:

以下内容是用TSQL编写的(我不知道正确的MySql语法)并返回实际的行(您可以将其包装在MySql服务器上的StoredProcedure中):

CREATE TABLE #Result (Id int, Name nvarchar(max));

INSERT INTO #Result
SELECT * FROM #YourCakeTable WHERE Name = 'cake'

if(FOUND_ROWS() = 0)
    INSERT INTO #Result
    SELECT * FROM #YourCakeTable WHERE Name like '%cake%'

SELECT * FROM #Result

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

避免在grep中进行部分匹配

来自分类Dev

如何在Elasticsearch中进行部分匹配?

来自分类Dev

Kibana查询完全匹配

来自分类Dev

有没有办法只选择部分匹配而不是完全匹配

来自分类Dev

如果不完全匹配

来自分类Dev

与ElasticSearch完全匹配(在查询时)

来自分类Dev

sailsjs数组查询完全匹配

来自分类Dev

在MongoDB中查询完全匹配

来自分类Dev

与ElasticSearch完全匹配(在查询时)

来自分类Dev

如何在Wordpress tax_query中进行部分匹配以进行自定义分类

来自分类Dev

如果*多个*列完全匹配,有没有办法突出显示单元格?

来自分类Dev

Elasticsearch:如何查询长字段以进行完全匹配

来自分类Dev

如何在Lucene文本字段上进行完全匹配和部分匹配?

来自分类Dev

红宝石尝试首先按完全匹配然后部分匹配进行排序

来自分类Dev

如何在Lucene文本字段上进行完全匹配和部分匹配?

来自分类Dev

htaccess删除没有扩展名的索引的完全匹配

来自分类Dev

调用初始化器没有完全匹配

来自分类Dev

Grep完全匹配没有破折号

来自分类Dev

下标[Swift]的调用中没有完全匹配的项

来自分类Dev

ElasticSearch:完全比部分匹配的得分低

来自分类Dev

Sphinx完全/部分匹配和排名

来自分类Dev

PHP搜索数组以部分或完全匹配

来自分类Dev

完全匹配的正则表达式不部分匹配

来自分类Dev

获取分类术语的完全匹配,而不是部分匹配

来自分类Dev

Elasticsearch:为什么完全匹配的得分低于部分匹配的得分

来自分类Dev

完全匹配的正则表达式不部分匹配

来自分类Dev

如何替换完全匹配或部分匹配的完整单词

来自分类Dev

正则表达式捕获具有完全匹配和部分匹配的子组

来自分类Dev

如何使用PFQuery查询与数组的完全匹配?

Related 相关文章

  1. 1

    避免在grep中进行部分匹配

  2. 2

    如何在Elasticsearch中进行部分匹配?

  3. 3

    Kibana查询完全匹配

  4. 4

    有没有办法只选择部分匹配而不是完全匹配

  5. 5

    如果不完全匹配

  6. 6

    与ElasticSearch完全匹配(在查询时)

  7. 7

    sailsjs数组查询完全匹配

  8. 8

    在MongoDB中查询完全匹配

  9. 9

    与ElasticSearch完全匹配(在查询时)

  10. 10

    如何在Wordpress tax_query中进行部分匹配以进行自定义分类

  11. 11

    如果*多个*列完全匹配,有没有办法突出显示单元格?

  12. 12

    Elasticsearch:如何查询长字段以进行完全匹配

  13. 13

    如何在Lucene文本字段上进行完全匹配和部分匹配?

  14. 14

    红宝石尝试首先按完全匹配然后部分匹配进行排序

  15. 15

    如何在Lucene文本字段上进行完全匹配和部分匹配?

  16. 16

    htaccess删除没有扩展名的索引的完全匹配

  17. 17

    调用初始化器没有完全匹配

  18. 18

    Grep完全匹配没有破折号

  19. 19

    下标[Swift]的调用中没有完全匹配的项

  20. 20

    ElasticSearch:完全比部分匹配的得分低

  21. 21

    Sphinx完全/部分匹配和排名

  22. 22

    PHP搜索数组以部分或完全匹配

  23. 23

    完全匹配的正则表达式不部分匹配

  24. 24

    获取分类术语的完全匹配,而不是部分匹配

  25. 25

    Elasticsearch:为什么完全匹配的得分低于部分匹配的得分

  26. 26

    完全匹配的正则表达式不部分匹配

  27. 27

    如何替换完全匹配或部分匹配的完整单词

  28. 28

    正则表达式捕获具有完全匹配和部分匹配的子组

  29. 29

    如何使用PFQuery查询与数组的完全匹配?

热门标签

归档