2009-08-27 15 views
1

這是一個奇怪的問題,所以我的標題就像奇怪。MySql&PHP:如何找到哪個行在CSV列表的首位有一個項目?

這是一個投票應用程序,所以我有一張名爲選票的表,它有兩個重要字段:用戶名和選票。字段選票是一個VARCHAR,但它基本上將25個ID(1-200的數字)列表存儲爲CSV。例如,它可能是:

22,12,1,3,4,5,6,7,... 

而另一個可能

3,4,12,1,4,5,... 

等。

因此,給定一個id(比方說12),我想找到哪個行(或用戶名)有在該領導點的id。所以在我們上面的例子中,它將是第一個用戶,因爲他在第二個位置有12個,而第二個用戶在第三個位置。有可能多人可能擁有12個領先位置(例如,如果用戶#3和#4在#1中有)並且有可能沒有人可能排名第12。

我還需要做相反的處理(誰在最糟糕的地方),但我想如果我能找出一個問題,其餘的很容易。

我想使用最少數量的查詢和語句來做到這一點,但對於我來說,我看不出如何。

我想到的最簡單的解決方案是遍歷表中的所有用戶,並跟蹤誰在領先地點有一個id。這對我來說現在可以正常工作,但用戶數量可能呈指數增長。

其他想法我是做這樣的查詢:

select `username` from `ballots` where `ballot` like '12,%' 

,如果返回的結果,我做了,因爲位置1的領先位置。但是,如果返回0結果我會怎麼做:

select `username` from `ballots` where `ballot` like '*,12,%' 

其中*是通配符,將一個號碼,一個號碼。(不像%)相匹配。但我不知道這是否可以實現。

無論如何,有沒有人有任何建議如何最好地做到這一點?

感謝

回答

2

我不知道我正確,你想做什麼理解 - 讓誰在通過其在該領域的地位下令「選票」字段指定次數的用戶的列表?

如果是這樣,你應該能夠使用MySQL FIND_IN_SET()功能:

SELECT username, FIND_IN_SET(12, ballot) as position 
    FROM ballots 
WHERE FIND_IN_SET(12, ballot) > 0 
ORDER BY position 

這將返回有你的電話號碼的所有行(如12)某處投票通過位置來分類可以申請LIMIT減少返回的行數。

+0

哇,完美的工作。謝謝! 我應該學習MySQL的功能.. – encee 2009-08-27 04:03:12

相關問題