【发布时间】:2011-02-07 21:08:12
【问题描述】:
第一条背景信息:这是关于保存对象-对象关系及其在单个表中排序的cms,列是object_id,parent_id和排序顺序
第二块有几个连接的查询,我想按 2 个参数排序。其中之一是对象本身的排序,第二个是其父对象的排序顺序。
我现在的查询是:
SELECT obj_asset.*, object.headline AS title, oo.sort_order AS sort, op.sort_order FROM obj_asset
JOIN object ON obj_asset.object_id = object.object_id
JOIN object_object AS oo on obj_asset.object_id = oo.object_id
JOIN (SELECT sort_order from object_object WHERE object_id = (SELECT parent_id from object_object WHERE object_id = obj_asset.object_id )) AS op ON obj_asset.object_id = oo.object_id
WHERE obj_asset.profile_id = 140 AND obj_asset.rsvp_enabled = 1 AND object.is_published = 1 ORDER BY sort DESC;
而且它不起作用。不过这很好用:
SELECT obj_asset.*, object.headline AS title, oo.sort_order AS sort, op.sort_order FROM obj_asset
JOIN object ON obj_asset.object_id = object.object_id
JOIN object_object AS oo on obj_asset.object_id = oo.object_id
JOIN (SELECT sort_order from object_object WHERE object_id = (SELECT parent_id from object_object WHERE object_id = 11111 )) AS op ON obj_asset.object_id = oo.object_id
WHERE obj_asset.profile_id = 140 AND obj_asset.rsvp_enabled = 1 AND object.is_published = 1 ORDER BY sort DESC;
我得到的错误是:
1054 - “where 子句”中的未知列“obj_asset.object_id”
我怎样才能让它工作?
谢谢!
编辑:如果我能想出替代方法将父母排序到查询中,我可以解决这个问题。有没有这样的方法?
【问题讨论】:
-
您确定 obj_asset 表中有 object_id 列吗?
-
在这种情况下,错误消息是一个很好的线索。 (如果解释器尝试使用错误的 object_id 字段,您可能必须使用
tablename.fieldname命名样式。):-) -
@KomarSerjio - 是的,我是 - 正如你所看到的,它不是我使用相同列和表的唯一地方,如果我将其更改为实际 ID,它就可以工作。 @middaparka - 我明白为什么会出现错误 - 在内部选择的上下文中,没有 obj_asset.object_id 因为它还没有被选择......但是我怎样才能用一个查询来解决这个问题?