我有这样的架构,我想知道是否可以在新闻列表的标题列中添加WHERE
和ORDER 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 ???
答案 0 :(得分:0)
是的,它像所有表关联一样,因此任何这些值都可能在您的where子句或顺序中使用。如果您有一个确切的所需输出,请包含它以及您尝试过的任何查询,并且有人可以提供帮助。
答案 1 :(得分:0)
要回答您的直接问题,是的,您可以。只要表格彼此存在某种关系,您就可以使用WHERE
和ORDER BY
来条件化您的查询。
例如,如果您需要将user
与news
(或某些彼此不直接相关的表)相关联,则需要您声明链中的每个表将user
与news
(即:news_cartable
和cartable
)以及WHERE
或ON
语句相关联的关系链接彼此(例如: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
编辑它。