忍受我,这需要大量的前期信息来解释我正在尝试做什么。我尽可能地将其尽可能通用化,以使事情更清晰。在一个查询中,我希望能够列出与另一个表中链接的标签相匹配的页面列表,并且这些标签是分组的。我希望使用该项目的文本表示,而不是它的id,但是如果没有别的,我可以做2个前置查询来获得tag_id和taggroup_id - 只是希望不必这样做。通过链接表多条件连接
DB模式:
+-----------------------------------+
| taggroups |
+------------------+----------------+
| taggroup_id | group_name |
+------------------+----------------+
| 1 | fruits |
+------------------+----------------+
+-----------------------------------------------+
| tags |
+-------------+-----------------+---------------+
| tag_id | taggroup_id | tag_name |
+-------------+-----------------+---------------+
| 1 | 1 | apple |
| 2 | 1 | orange |
| 3 | 1 | grape |
+-------------+-----------------+---------------+
+--------------------------------------+
| pages |
+------------------+-------------------+
| page_id | title |
+------------------+-------------------+
| 99 | Doctor a day |
+------------------+-------------------+
+--------------------------------------------------+
| tags_to_pages |
+------------+----------+---------------+----------+
| join_id | tag_id | taggroup_id | page_id |
+------------+----------+---------------+----------+
| 1 | 1 | 1 | 99 |
| 2 | 2 | 1 | 99 |
+------------+----------+---------------+----------+
测试查询: 远远得到这个似乎并不能得到它的工作。
SELECT
pages.*, tags.tag_name, taggroups.group_name
FROM
tags_to_pages
INNER JOIN taggroups as grp ON (
grp.group_name = 'fruits'
AND
tags_to_pages.taggroup_id = grp.taggroup_id
)
INNER JOIN tags as val ON (val.tag_name = 'apple' AND tags_to_pages.tag_id = val.tag_id)
LEFT JOIN pages ON (tags_to_pages.page_id = pages.page_id)
此外,哪些表应该有索引,哪些索引应该被优化?
正如您从上述货币单位可以猜出的,我现在在英国,而且已经很晚了,所以现在我要睡觉了 - 我会在早上回复任何意见 - 即10小时。祝你好运。 – nurdglaw
感谢nurd,你是否改变了查询的结构或者它的逻辑。例如。它是以不同的方式做同样的事情吗?因为我无法让我的查询摆在首位。 –
爆炸 - 太慢,无法上床!我更改为在taggroupid上加入,而不是在某处添加tag_id: - |当查询“不起作用”时,你遇到了什么问题?它没有返回,还是返回“错误的东西”? – nurdglaw