因此該項目在PHP做一個簡單的CMS。您有帖子,類別和標籤。它將處理一個數據庫中數百萬個帖子,數百萬個標籤和類別。的MySQL需要幫助定義SQL刪除不需要的行
問題: 理想情況下,你希望能夠選擇30個職位必須是在5類和標籤1和2.你希望它在儘可能少的查詢儘可能做...
termRelations包含帖子ID和術語ID,termTypeId區分cat和tags表。
貓包含術語ID和分類信息(姓名,蛞蝓等)
標籤包含術語ID和標籤信息(姓名,蛞蝓等)
貓和標籤都是單獨的表,以便於加快生成一個類別列表/更單獨地定義它們。
SELECT DISTINCT *
FROM posts
LEFT JOIN termRelations ON (posts.id = termRelations.postId)
LEFT JOIN cats ON (termRelations.termId = cats.id AND termRelations.termTypeId = 1)
LEFT JOIN tags ON (termRelations.termId = tags.id AND termRelations.termTypeId = 0)
WHERE cats.id =5
OR tags.id =2
OR tags.id =1
LIMIT 0 , 30
在這種情況下,它爲一個帖子返回3行,前兩個標籤字段添加,最後一個帶有類別字段。
我並不需要這些信息的使用(當涉及到多個標籤或類別一行作爲看似不可能,也許不是?),我只需要抓住下這三個條件的職位。但是,如果我可以通過一個最適合的查詢獲得類別和標籤信息。
謝謝。這與我的大腦有關。如果我做錯了什麼,而且你知道更有效的方法,那麼我會很樂意重新構建數據庫。
我能看到的第一個錯誤是WHERE cats.id = 5 OR tags.id = 2 OR tags.id = 1 ...讓它在哪裏cats.id = 5 AND(tags.id = 2 OR標籤。 id = 1) – 2012-01-01 05:36:39
不幸的是我試過這個,結果沒有行,所以我切換到OR。 – Turtleface 2012-01-01 06:17:09
這意味着您的查詢是wrong..anyways..temme這個「術語」 ..沒有後有一個以上的長期多? – 2012-01-01 06:25:49