我正在创建一个调查,其中员工图片随机显示,并且登录用户从下拉列表中选择一个名称。我的问题是每张图片只能为每个登录用户显示一次。这里是我当前的查询,但我不知道这是否会工作不显示图片两次
<cfquery name="questions" datasource="STecMySQL">
SELECT DISTINCT PicID
FROM answers
</cfquery>
PS:我使用MySQL和ColdFusion
我正在创建一个调查,其中员工图片随机显示,并且登录用户从下拉列表中选择一个名称。我的问题是每张图片只能为每个登录用户显示一次。这里是我当前的查询,但我不知道这是否会工作不显示图片两次
<cfquery name="questions" datasource="STecMySQL">
SELECT DISTINCT PicID
FROM answers
</cfquery>
PS:我使用MySQL和ColdFusion
有了您的原始查询,如果有对多张图片ID用户,你会得到一个用户的重复。
例如,对于以下查询:
SELECT DISTINCT PicID
FROM answers
你会得到重复PicIDs给定下列数据用户名1:
PicID UserID
----------------
1 1
3 1
4 2
你真的需要申请DISTINCT
用户ID ,而不是图片ID。既然你不能做到这一点与您SELECT
,另一种方法是使用GROUP BY
,假设你也有一个用户ID字段:
SELECT PicID
FROM answers
GROUP BY UserID
这组结果为每个用户,所以你只用一个结束每个用户返回的图片ID。
但是,对于具有多个图片的用户,PicID的值将是任意的。所以,如果你想成为明确的,仅返回最新PicID为每一个用户,你可以使用MAX()
这样的:
SELECT MAX(PicID)
FROM answers
GROUP BY UserID
谢谢大家。我知道我有点含糊,但是我想出了它 – 2012-02-24 19:26:27
@CrystalLeahy,如果这个答案奏效,请不要忘记接受它。 – 2012-07-27 12:15:59
假设你有1用户1的图像(而不是用许多图像1个用户)和您试图只在每个用户登录时显示一次该用户/图像,您可以将PicID查询结果保存到用户会话并删除已显示的每行。所以,你可以做这样的事情:
<!--- [ Setup our intial query --->
<cfquery name="questions" datasource="STecMySQL">
SELECT DISTINCT PicID
FROM answers
</cfquery>
<!--- [ Save query to session ] --->
<cfparam name="session.questions" default="questions">
<!--- [ Display Random Image ] ---->
<cfset displayRow=randRange(0, session.questions.recordCount)>
<cfdump var="#session.questions.columnName[displayRow]#">
<!---[ Remove current row - RemoveRows(intRowIndex, intRowCount) ] --->
<cfset _r = session.questions.RemoveRows(displayRow, 1)>
是的,我在代码后面有一个记录数。感谢大家提供这些有用的提示。非常感谢 – 2012-02-24 19:29:53
这将确保每个人PicID在查询中只返回了一次 - 这可能看到更多周围的代码来看看如何使用,因为它是从此不太明显 – 2012-02-20 16:37:36
您可以在该查询的末尾添加LIMIT 1 – davidjwest 2012-02-20 16:40:07
“只显示一次”是什么意思?是问如何随机化结果或如何删除重复? – Leigh 2012-02-20 20:59:42