忍受我,這需要大量的前期信息來解釋我正在嘗試做什麼。我儘可能地將其儘可能通用化,以使事情更清晰。在一個查詢中,我希望能夠列出與另一個表中鏈接的標籤相匹配的頁面列表,並且這些標籤是分組的。我希望使用該項目的文本表示,而不是它的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