Mysql Order by most包含在另一个表的字段中
汽车表Mysql Order by most包含在另一个表的字段中,mysql,Mysql,汽车表 ---ID--- ----car---- 1 bmw 2 mercedes 3 volvo 员额表 ---ID--- ----post---- 1 I have a volvo car 2 I like volvo cars 3 I dont like bmw 我想得到一个结果,订购汽车,从
---ID--- ----car----
1 bmw
2 mercedes
3 volvo
员额表
---ID--- ----post----
1 I have a volvo car
2 I like volvo cars
3 I dont like bmw
我想得到一个结果,订购汽车,从大多数包含在文字的帖子,以较少
预期结果:
Volvo
Bmw
Mercedes
您可以在此处尝试使用聚合进行简单连接:
SELECT
c.car
FROM Cars c
LEFT JOIN Posts p
ON p.post LIKE CONCAT('%', c.car, '%')
GROUP BY
c.car
ORDER BY
COUNT(p.ID) DESC;
严格地说,我们应该使用正则表达式匹配来检测帖子中出现的汽车名称REGEXP
可用于此操作,然后连接条件将变为:
ON p.post REGEXP CONCAT('[[:<:]]', c.car, '[[:>:]]')
p.post REGEXP CONCAT(“[[::]]”上的)
您可以在此处尝试使用聚合进行简单连接:
SELECT
c.car
FROM Cars c
LEFT JOIN Posts p
ON p.post LIKE CONCAT('%', c.car, '%')
GROUP BY
c.car
ORDER BY
COUNT(p.ID) DESC;
严格地说,我们应该使用正则表达式匹配来检测帖子中出现的汽车名称REGEXP
可用于此操作,然后连接条件将变为:
ON p.post REGEXP CONCAT('[[:<:]]', c.car, '[[:>:]]')
p.post REGEXP CONCAT(“[[::]]”上的)
尝试在ORDER BY
子句中使用相关子查询:
select c.car
from Cars c
order by (
select count(*)
from Posts p
where concat(' ', p.post, ' ') like concat('% ', c.car, ' %')
) desc
我在每个列值之前和之后添加了空格,以避免在car
值包含在post
中的另一个单词中时出现假阳性结果请参阅。
结果:
尝试在
ORDER BY
子句中使用相关子查询:
select c.car
from Cars c
order by (
select count(*)
from Posts p
where concat(' ', p.post, ' ') like concat('% ', c.car, ' %')
) desc
我在每个列值之前和之后添加了空格,以避免在car
值包含在post
中的另一个单词中时出现假阳性结果请参阅。
结果:
非常感谢。这项工作做得很好,但是对于一个有1500行的posts表,执行此查询需要9秒钟,您认为我如何加快此查询?如果您确实需要直接处理posts的原始文本,那么您应该考虑使用全文搜索。否则,考虑将数据归一化并将每个关键字存储在一个单独的行中。如何在FultLeXT索引中使用这个查询?我尝试用左连接帖子P包含(P.PoST,C.Car),但它不起作用?谢谢。这项工作做得很好,但是对于一个有1500行的posts表,执行此查询需要9秒钟,您认为我如何加快此查询?如果您确实需要直接处理posts的原始文本,那么您应该考虑使用全文搜索。否则,考虑将数据归一化,并将每个关键字存储在一个单独的行中。如何在FultLeXT索引中使用这个查询?我尝试用左连接帖子P包含(P.PoST,C.Car),但它不起作用。我如何在这个查询中使用匹配?我不认为匹配将有效。因为:搜索字符串必须是在查询求值期间保持不变的字符串值。例如,这排除了一个表列,因为它对于这里提到的每一行都可能不同:所以在这种情况下我不能使用全文?据我所知,没有。阅读关于match()的内容此处:@UtkuDalmaz,除了另一个答案会返回假阳性结果,以防您搜索的汽车包含在帖子中的另一个单词中。我如何在此查询中使用MATCH-On?我认为MATCH-On不起作用,因为:搜索字符串必须是在查询求值期间保持不变的字符串值。例如,这排除了一个表列,因为它对于这里提到的每一行都可能不同:所以我不能在这种情况下使用全文?据我所知,没有。在这里阅读match()@UtkuDalmaz,但如果您搜索的汽车包含在帖子中的另一个单词中,另一个答案将返回假阳性结果。