选择外键(组)最匹配的位置

时间:2015-04-04 15:33:43

标签: php mysql sql arrays

我有三个表 group_sentences group_sentences_attributes group_senteces_categories

我有一个属性数组,我在IN的查询中使用(在内爆之后)。

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

我需要选择一个组号,其中$ attributesArray和类别的最大匹配。

这是表group_sentences_attributes

+-----+-------+-----------+
| 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)

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

1 个答案:

答案 0 :(得分:1)

首先,查询中的表与问题中的表不匹配。我猜他们只是错过了"句子"。然后,您没有join子句。简单规则:切勿在{{1​​}}子句中使用逗号。

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

group

如果您只想要一行,请将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); 添加到最后。