我有一组消息,其中一些消息来自名为“ADMIN”的组。我希望所有来自“ADMINS”的消息放置在查询对象的顶部,但我无法在原始查询中对它们重新排序 - 我必须在已经拥有查询对象之后再执行它们。我有办法查看哪些行来自“ADMINS”,但我不确定从查询对象中提取它们并将它们置于顶部的最佳方式。将一行移到查询的开头
<!--- this is the query object of all the messages --->
<cfset messageData = application.message.getMessages(inboxID)>
<!--- this returns a list of which users inside the recordset are ADMINS --->
<cfset getAdmins = application.message.getAdmins(valueList(messageData.useridfk)) />
现在我想参加#getAdmins#返回的所有用户ID,删除是他们在#messageData#的消息,并把它们在#messageData#顶部,这样我可以输出结果。这是一个QoQ还是有更好的方法?
我不能真正把我的头围绕QQ,但我正在刺探它。有没有更好的方法,然后做三个不同的QoQ?
<!--- this gets all the rows from Admins --->
<cfquery name="getAdminAnswers" dbtype="query">
SELECT *
FROM messageData
WHERE useridfk in ('#getAdmins.id#')
ORDER BY UpvotesNum DESC, posted DESC
</cfquery>
<!--- this gets all the rows from non-RDs --->
<cfquery name="getNonAdminAnswers" dbtype="query">
SELECT *
FROM messageData
WHERE useridfk NOT IN ('#getAdmins.id#')
ORDER BY UpvotesNum DESC, posted DESC
</cfquery>
<!--- join the queries with a UNION in a QoQ --->
<cfquery dbtype="query" name="data">
SELECT * FROM getAdminAnswers
UNION
SELECT * FROM getNonAdminAnswers
</cfquery>
答:
明白了:像这样:
<!--- this combines two queries into one --->
<cfquery name="data" dbtype="query">
SELECT *, 1 sortCol
FROM messageData
WHERE useridfk in ('#variables.getAdmins.id#')
UNION
SELECT *, 2 sortCol
FROM messageData
WHERE useridfk NOT IN ('#variables.getAdmins.id#')
ORDER BY sortCol, UpvotesNum DESC, posted DESC
</cfquery>
你真的不应该把你的解决方案放在你的问题上,而是放在一个单独的答案中。 – 2014-09-29 18:18:58