我有这个查询:
SELECT `id` FROM `accounts` WHERE AES_DECRYPT(`email`, :salt) = CONCAT_WS('@',:mailbox,:host) OR AES_DECRYPT(`email`, :salt) LIKE CONCAT('%',:host)
我在该表中有2条记录:
id email 1 test@test.com 2 other@test.com
当我像这样运行此查询时:
SELECT `id` FROM `accounts` WHERE AES_DECRYPT(`email`, '123') = CONCAT_WS('@','test','test.com') OR AES_DECRYPT(`email`, '123') LIKE CONCAT('%','test.com')
我得到的结果是:
id email 2 other@test.com 1 test@test.com
问题: 我想要的是:我希望在不使用全文搜索的情况下将最佳匹配作为第一个结果。如果可以,我该怎么办?
您可以根据匹配数轻松地对结果进行排序:
SELECT `id` FROM `accounts` WHERE AES_DECRYPT(`email`, '123') = CONCAT_WS('@', 'test', 'test.com') OR AES_DECRYPT(`email`, '123') LIKE CONCAT('%','test.com') ORDER BY ( (AES_DECRYPT(`email`, '123') = CONCAT_WS('@', 'test', 'test.com')) + (AES_DECRYPT(`email`, '123') LIKE CONCAT('%','test.com')) );
这将为您的示例工作。