2012-02-20 115 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