【发布时间】:2016-11-29 14:03:01
【问题描述】:
(编辑:结尾的LIMIT 无法解决。请仔细阅读。)
我有一个表格,可以通过LEFT JOIN 和LIKE 在另一个表格中查找文本,我想限制结果的数量每左行.
- 表
usergames AS u包含代表游戏名称的用户输入字符串的子字符串。 - 表
games AS g包含游戏名称的主列表。
1234563列),并且都包含完整的游戏名称(在 如果完整的游戏名称与主列表中的任何内容都不完全匹配(例如,用户错误地输入“Haatline Miami”),我会查看主列表以获取建议,例如任何带有 @ 987654338@或
"Miami"。
name 列中)。
这是我的查询,效果很好:
SELECT u.name,g.name AS suggestion,count(g.name)
FROM usergames u
LEFT JOIN games g
ON CONCAT(' ', g.name, ' ') LIKE CONCAT('% ', u.piece, ' %')
GROUP BY g.name, u.name
ORDER BY u.name ASC, count(g.name) DESC
我的问题是有时建议太多。也许有 1000 款游戏带有“迈阿密”这个词。如何限制“每左行”连接创建的行数?请看下面的数据,一些结果来自“热线”,一些来自“迈阿密”。我怎么能限制每个子字符串的 X 个结果。
样本数据
substrs
games
result
(注意:尾随 LIMIT 不是我想要的,因为我不想限制结果的总数,而只限制由 @ 产生的每个连接项的结果987654345@加入)
(注意:CONCAT 带空格是为了确保只返回完整的单词匹配。如果它们令人困惑,请在心理上删除它们,如果是g.name LIKE s.piece,问题将是相同的)
【问题讨论】:
-
对于每个单独的配对,你想限制多少?
-
假设我想限制为 10 个。
-
您能否添加一些示例数据,清楚地显示您要完成的工作?
-
@TimBiegeleisen 我添加了场景的可视化表示。如果有任何不清楚的地方,请告诉我。