我使用mysql已经有一段时间了,但从来没有做过任何复杂的事情。我正在做一个新的项目,需要在正确的方向上推动一点。比方说,我想要一张放猫的桌子。假设我想存储猫的名字和猫喜欢的食物。然后假设我想查询所有喜欢鱼、牛奶和老鼠的猫。我不想让“猫”表中的“鱼”、“奶”、“鼠”行可以是yes、no、1或0。我想我想要的是有一个单独的'foods‘表,然后使用join语句。但我不知道从哪里开始找,也不知道要找什么。考虑这一点的另一种方式是,如果你有一个博客,并希望帖子有类别。如何存储哪些帖子属于哪些类别,以及如何按类别查询帖子?
我意识到这可能是一个非常基本的问题,如果能有一个教程的链接来解释实现这一点所需的结构/命令,我会很高兴!非常感谢!
发布于 2010-12-19 13:49:02
你想得很对。您需要两张桌子,一张“猫”桌和一张“食物”桌。您的食品表将具有某种主键,您的Cats表将作为外键引用该主键。您可以执行如下查询:
SELECT * FROM cats WHERE food_id = 5为了理解JOIN在SQL中是如何工作的,我将查看here。
发布于 2010-12-19 13:49:22
我只能提供rails的例子。
在rails中
我有一个完美的世界,每个帖子都有一个类别
您将看到SQL如下所示
Posts.find_all_by_category_id(Category.find_by_topic("sports").id)
# May generate
SELECT ALL from `post`.* WHERE `category_id` = `7`
class Category < ActiveRecord::Base
has_many => :posts
end
class Post < ActiveRecord::Base
belong_to => :categories
end在现实世界中,这是一个多对多的关系
class Category < ActiveRecord::Base
has_and_belongs_to_many => :posts
end
class Post < ActiveRecord::Base
has_and_belongs_to_many => :categories
endrails会在你背后为你做多对多的连接表
然后你可以去Category.find_by_topic(" sports ").posts来恢复所有带有体育类别的帖子。
我不知道我头顶上生成的详细的mySQL是如何做多对多关系的。
https://stackoverflow.com/questions/4481781
复制相似问题