通过匹配两个或多个表来对表进行排序

Order table results from matching two or more tables

提问人:Liam Morton 提问时间:7/8/2023 最后编辑:Liam Morton 更新时间:7/8/2023 访问量:48

问:

我有一个语句,它从两个表中获取数据,然后像这样:SELECTMATCH

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 rowa OR b match in a row (order doesn't mater for this)

任何帮助都会不胜感激!

mysql 匹配 sql-order-by

评论

0赞 nbk 7/8/2023
什么 A 或 B 应该是真的?这毫无意义,因为 a 是一个不可能为真的表,或者你的意思是匹配项大于 0?
0赞 Liam Morton 7/8/2023
@nbk对不起,你是对的。我的意思是,如果在同一行上找到 a 和 b 的匹配项,则首先显示它,然后显示所有其他匹配项。

答:

1赞 nbk 7/8/2023 #1

由于您的全文搜索不在选择中,因此您需要重复它们。

剩下的就是一个决定哪个先来的案例

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

评论

0赞 Liam Morton 7/8/2023
这有效,谢谢!
0赞 shawnt00 7/9/2023
真的没有理由重复,因为它已经通过了过滤器:whereCASE WHEN MATCH(a.column) AGAINST('something' IN BOOLEAN MODE) > 0 AND MATCH(b.column) AGAINST('something' IN BOOLEAN MODE) > 0 THEN 1 ELSE 2 END
0赞 nbk 7/9/2023
我们不知道所有的标准,所以可以考虑更多