我有一个SELECT语句,它从两个表中获取数据,然后执行类似这样的MATCH语句:

SELECT a.*, b.* 
 FROM a INNER JOIN b ON a.id=b.id 
 WHERE MATCH(a.column) AGAINST( 'somthing' IN BOLLEAN MODE) 
   OR MATCH(b.column) AGAINST( 'somthing' IN BOLLEAN MODE) 
 ORDER BY

我想把结果排序为a AND b BOTH match on the same row,然后是a OR b match in a row (order doesn't mater for this)

任何帮助都是徒劳的!

推荐答案

由于全文搜索不在SELECT中,因此需要重复它们.

剩下的就是决定哪个先来的情况了

SELECT a.*, b.* 
 FROM a INNER JOIN b ON a.id=b.id 
 WHERE MATCH(a.column) AGAINST( 'somthing' IN BOoLEAN MODE) 
   OR MATCH(b.column) AGAINST( 'somthing' IN BOOLEAN MODE) 
 ORDER BY 
CASe WHEN MATCH(a.column) AGAINST( 'somthing' IN BOoLEAN MODE) > 0 AND MATCH(b.column) AGAINST( 'somthing' IN BOOLEAN MODE)  > 0 THEN 1
WHEN MATCH(a.column) AGAINST( 'somthing' IN BOoLEAN MODE) > 0 OR MATCH(b.column) AGAINST( 'somthing' IN BOOLEAN MODE)  > 0 THEN 2 END

Mysql相关问答推荐

LaravelEloquent ToSql()缺少连接表

JPA对具有动态键和动态值的JSON列的原生查询

表列中的SQL SUM MENY值记录单个查询

发生的原因及解决方法

如何清除mysql 8 innodb中的数据库缓存

MySQL如何将字符串列表与子查询进行比较

为生日创建 MySQL 索引

如何让连续 3 周或以上的用户有订单?

为什么没有创建此触发器?

将sql查询转换为sequelize

连接两个表.使用连接列作为分组依据,然后根据时间戳 Select 最新行

非常规字符的不正确字符串值错误

此插页中的X是什么> X'3C2F756C3E'

使用 MySQL LIMIT、OFFSET 进行分页

如何在不违反唯一约束的情况下交换 MySQL 中两行的值?

从一个带有连接的表中删除

如何在 MySQL 上一次删除一系列记录?

如何删除没有临时表的 MySQL 表中的所有重复记录

INSERT ... 使用 WHERE 进行重复的密钥更新?

判断多个列的一个值