选择最大匹配的外键(组)


Select foreign key (group) where is the biggest match

我有三个表group_sententsgroup_sentents_attributesgroup_senteces_categories

我有一个属性数组,我正在使用IN进行查询(内爆后)。

然后我有一个类别ID,因为它们是递归存储的,所以不需要数组。

我需要为$attributesArray选择一个最大匹配的组号,当然还有类别

这是表格组_内容_属性

+-----+-------+-----------+
| id  | group | attribute |
+-----+-------+-----------+
|  1  |   1   |   3564    |
|  2  |   1   |   3687    |
|  3  |   1   |   3689    |
|  4  |   2   |   3687    |
|  5  |   2   |   3564    |
+-----+-------+-----------+

这是group_sentences_category

+-----+-------+----------+
| id  | group | category |
+-----+-------+----------+
|  1  |   1   |   1564   |
|  2  |   1   |   1221   |
|  3  |   1   |   1756   |
|  4  |   2   |   1358   |
|  5  |   2   |   1125   |
+-----+-------+----------+

这是我的问题,但我担心它不能完成任务。

SELECT group_categories.group
FROM group_categories, group_attributes 
WHERE group_categories.category = '$category'
    AND group_attributes.attribute IN ($attributesArray)
GROUP BY group_categories.group
ORDER BY count(group_attributes.attribute)

任何帮助都将不胜感激,谢谢。

首先,查询中的表与问题中的表不匹配。我猜他们只是漏掉了"句子"。那么,就没有join子句了。简单规则:永远不要在from子句中使用逗号。

group是一个糟糕的列名称,因为它是SQL中的关键字。以下可能是您正在寻找的:

SELECT gc.groupid
FROM group_sentences_attributes sa JOIN
     group_sentences_category sc
     ON sa.groupid = sc.groupid
WHERE sc.category = '$category' AND
      sa.attribute IN ($attributesArray)
GROUP BY sa.groupid
ORDER BY count(sa.attribute);

如果只需要一行,则将LIMIT 1添加到末尾。