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,但如果您搜索的汽车包含在帖子中的另一个单词中,另一个答案将返回假阳性结果。