它只给我一个记录,我不知道出了什么问题,如果我只是循环遍历整个查询,那么它就可以了
<cfquery name="messages_tb" datasource="appdb">
SELECT * FROM messages
WHERE receiver = <cfqueryparam value="1" cfsqltype="cf_sql_integer">
and rt = <cfqueryparam value="1" cfsqltype="cf_sql_tinyint">
group by sender
</cfquery>
<cfset list.messages_tb_sender = ValueList(messages_tb.sender)>
<cfquery name="messages_tb" datasource="appdb">
SELECT * FROM messages
WHERE sender IN ( <cfqueryparam value="#list.messages_tb_sender#" cfsqltype="cf_sql_integer" list="yes">)
group BY mid
</cfquery>
<cfoutput>
#messages_tb.mid#
</cfoutput>
这就是表格的外观
mid sender receiver message
======|=======|==========|=============
1 2 1 Hello
2 2 1 Hey
3 3 1 xyz
4 2 1 random text
我只想要3号和4号中段的数据
答案 0 :(得分:1)
如果您只需要3号和4号中间数据,则查询将像这样...
<cfquery name="messages_tb" datasource="appdb">
SELECT mid, sender, receiver, message FROM messages
WHERE receiver = <cfqueryparam value="1" cfsqltype="cf_sql_integer">
and mid in <cfqueryparam value="3,4" list="yes" cfsqltype="cf_sql_integer">
</cfquery>
如果需要从表中提取最后一个ID并按特定列进行分组。我根据表输出假定mid是唯一的,那么我们可能不需要group by mid
<cfquery name="messages_tb" datasource="appdb">
select mid, sender, receiver, message FROM messages
where mid in (
select top 1 mid from messages
and receiver = <cfqueryparam value="1" cfsqltype="cf_sql_integer">
order by mid desc
)
</cfquery>
仅供参考:从表格输出中可以看出,没有名为 rt
的列答案 1 :(得分:1)
(评论太长了...)
要回答您的问题,显示单个值的原因是因为cfoutput
缺少“查询”名称,正如Paul指出的那样。如果没有查询名称,则cfoutput缺省在第一行中显示第一个值。如果要在查询中显示所有行,则必须添加“ query”属性。
<cfoutput query="messages_tb">
#messages_tb.mid#
</cfoutput>
但是,您不需要两个单独的查询。一个简单的JOIN将在单个查询中返回相同的结果。
SELECT DISTINCT m.Mid
FROM messages m INNER JOIN
(
SELECT DISTINCT sender
FROM messages
WHERE receiver = <cfqueryparam value="1" cfsqltype="cf_sql_integer">
AND rt = <cfqueryparam value="1" cfsqltype="cf_sql_tinyint">
) s ON s.sender = m.sender
话虽如此,两个都不会仅返回记录MID = 3和4。所以请您详细说明一下?
A。 “ MID”列代表什么?
B。为什么查询应该只返回值3和4?
根据您的示例数据,第一个查询将返回:
sender
======|
2
3
由于所有示例记录均具有这些发送者值,因此您的第二个查询将返回所有4条记录:
mid sender
======|=======|
1 2
2 2
3 3
4 2
因此您的示例数据有误或当前查询中缺少某些内容。