因此该项目在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