-1

我有这样的架构,我想知道是否有可能在新闻列表中拥有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

抱歉,更新了。问题是这样的:每个新闻都有很多类别也有很多cartable ..每个cartable 都有用户。那么我如何按该字段排序或条件

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 ???
4

2 回答 2

0

Yes, it loooks like all the tables relate, so any of those values could potentially be used in your where clause or in an order by. If you have an exact desired output, include it and whatever query you have tried and someone can help.

于 2012-07-10T14:26:15.977 回答
0

要回答您的直接问题,是的,您可以。只要表之间存在某种关系,您就可以使用WHEREORDER BY对查询进行条件化。

例如,如果您需要关联usernews(或一些不立即相互关联的表),这将要求您声明链接usernews(即:news_cartablecartable)的关系链中的每个表,以及asWHEREON陈述将它们彼此联系起来(例如:)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首先在查询中对其进行编辑。

于 2012-07-10T14:50:02.937 回答