没有显示两次图片

时间:2012-02-20 16:35:04

标签: mysql coldfusion

我正在创建一个调查,其中员工图片随机显示,登录用户从下拉列表中选择一个名称。我的问题是让每张图片只为每个登录用户显示一次。这是我当前的查询,但我不确定这是否有效

<cfquery name="questions" datasource="STecMySQL">
     SELECT DISTINCT PicID
     FROM answers
 </cfquery>

PS:我正在使用mySql和ColdFusion

2 个答案:

答案 0 :(得分:2)

使用原始查询,如果用户有多个图片ID,您将获得用户的重复项。

例如,对于以下查询:

SELECT DISTINCT PicID
FROM answers

根据以下数据,您将获得UserID 1的重复PicID:

PicID   UserID
----------------
1       1
3       1
4       2

您确实需要将DISTINCT应用于用户ID,而不是图片ID。由于您无法使用SELECT执行此操作,因此可以选择使用GROUP BY,假设您还有一个UserID字段:

SELECT PicID
FROM answers
GROUP BY UserID

这会对每个用户的结果进行分组,因此您最终只能为每个用户返回一个图片ID。

但是,对于具有多个图片的用户,PicID的值将是任意的。因此,如果您想要明确并且只返回每个用户的最新PicID,您可以使用MAX(),如下所示:

SELECT MAX(PicID)
FROM answers
GROUP BY UserID

答案 1 :(得分:0)

假设您有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)>

<!--- [ 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)>