2012-02-20 80 views
0

我正在创建一个调查,其中员工图片随机显示,并且登录用户从下拉列表中选择一个名称。我的问题是每张图片只能为每个登录用户显示一次。这里是我当前的查询,但我不知道这是否会工作不显示图片两次

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

PS:我使用MySQL和ColdFusion

+1

这将确保每个人PicID在查询中只返回了一次 - 这可能看到更多周围的代码来看看如何使用,因为它是从此不太明显 – 2012-02-20 16:37:36

+0

您可以在该查询的末尾添加LIMIT 1 – davidjwest 2012-02-20 16:40:07

+0

“只显示一次”是什么意思?是问如何随机化结果或如何删除重复? – Leigh 2012-02-20 20:59:42

回答

2

有了您的原始查询,如果有对多张图片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 
+0

谢谢大家。我知道我有点含糊,但是我想出了它 – 2012-02-24 19:26:27

+0

@CrystalLeahy,如果这个答案奏效,请不要忘记接受它。 – 2012-07-27 12:15:59

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

+0

是的,我在代码后面有一个记录数。感谢大家提供这些有用的提示。非常感谢 – 2012-02-24 19:29:53