mysql条件和多个关系表中的命令

时间:2012-07-10 14:20:27

标签: mysql entity-relationship

我有这样的架构,我想知道是否可以在新闻列表的标题列中添加WHEREORDER BY

例如,其中category.id = x和cartable.status = 3且user.id = 4 ...

news
-------------------------------------------------------
id*     title

category
-------------------------------------------------------
id*     title

cartable
-------------------------------------------------------
id          user_id         status*

news_category
-------------------------------------------------------
news_id     category_id

news_cartable
-------------------------------------------------------
news_id     cartable_id

user
-------------------------------------------------------
id*     name
抱歉,更新了。问题是这样的:每个新闻都有很多类别也有很多可用的..每个可购买的都有用户。那么我怎样才能按字段排序或调整

select * from news_category
left join news on (news_category.news_id = news.id)
left join category on (news_category.category_id = category.id)
--- cartable and user ???

2 个答案:

答案 0 :(得分:0)

是的,它像所有表关联一样,因此任何这些值都可能在您的where子句或顺序中使用。如果您有一个确切的所需输出,请包含它以及您尝试过的任何查询,并且有人可以提供帮助。

答案 1 :(得分:0)

要回答您的直接问题,是的,您可以。只要表格彼此存在某种关系,您就可以使用WHEREORDER BY来条件化您的查询。

例如,如果您需要将usernews(或某些彼此不直接相关的表)相关联,则需要您声明链中的每个表将usernews(即:news_cartablecartable)以及WHEREON语句相关联的关系链接彼此(例如:WHERE cartable_id = cartable.id AND user_id = user.id)。因此,如果您要查询链接到特定news条目的用户,您的代码可能如下所示:

SELECT user.id FROM user, cartable, news_cartable, news
WHERE news.id = news_id AND cartable_id = cartable.id AND user_id = user.id
AND news.id = {some news ID}

如果你想改为LEFT JOIN表,你可以在第二行中取条件并将它们写成ON语句,如:

FROM news
LEFT JOIN news_cartable ON news.id = news_id
LEFT JOIN cartable ON cartable_id = cartable.id
LEFT JOIN user ON user_id = user.id

如果那也不是你想要的,请说明你特别想做的事情,我会看到我能做些什么。

编辑:ORDER BY没有条件化,可以与您SELECT的任何列一起使用。当然,需要注意的是,您必须先在查询中SELECT编辑它。