我正在創建一個調查,其中員工圖片隨機顯示,並且登錄用戶從下拉列表中選擇一個名稱。我的問題是每張圖片只能爲每個登錄用戶顯示一次。這裏是我當前的查詢,但我不知道這是否會工作不顯示圖片兩次
<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