我有什么
SELECT CONCAT(`names`,' ',`office`) `bigDataField`
FROM `item_table`
HAVING `bigDataField` REGEXP "jessy|c";
返回还包含字母“c”的数据,所以我想订购大多数相同的匹配字符,这可能吗?
注意:用户输入会更改单词和字符。所以它只能是一个字符或几个甚至几个字。
sql fiddle http://sqlfiddle.com/#!2/dc87e/1
感谢所有帮助
答案 0 :(得分:4)
您可以通过任何表达方式订购。
regexp
返回指定正则表达式的匹配数
所以,这个:
order by `bigDataField` regexp 'c' desc
会根据bigDataField
中最多c
的数据对您的数据进行排序,因此我猜这不是您想要的。您可以使用多个CASE-WHEN
来检查模式匹配的长度(警告:性能不佳 - 不建议用于大表)
试试这个
SELECT CONCAT(`names`,' ',`office`) `bigDataField`,
CASE WHEN CONCAT(`names`,' ',`office`) regexp 'jessy' > 0 then length('jessy') * (CONCAT(`names`,' ',`office`) regexp 'jessy') ELSE
CASE WHEN CONCAT(`names`,' ',`office`) regexp 'c' > 0 then length('c') * (CONCAT(`names`,' ',`office`) regexp 'c') ELSE 0 END
END as charmatchcount
FROM `item_table`
HAVING `bigDataField` REGEXP "jessy|c"
ORDER BY charmatchcount desc
为避免上述丑陋,您必须使用外部库,或创建自己的功能。您可能会发现此主题有用MySQL - Return matching pattern in REGEXP query
答案 1 :(得分:1)
你可以试试这个
SELECT CONCAT(`names`,' ',`office`) `bigDataField`
FROM `item_table`
HAVING `bigDataField` REGEXP '[a-z] c' order by bigDataField asc;
希望这对你有用
答案 2 :(得分:0)
这有效:
SELECT col, IF( LOCATE('Jessy', col) = 0, 0 , LENGTH('Jessy')) as ord
FROM
(
SELECT CONCAT( `names`,' ',`office`) `col`
FROM `item_table`
HAVING `col` REGEXP "jessy|c"
) x
ORDER BY ord DESC;
但是如果REGEX中有3个单词,很难找到相关的查询。 BTS你在寻找全文搜索吗?