2017-01-23 63 views
0

想象一下,我們有一個用戶列表,我們試圖將您與其中一個用戶相匹配。你有10件事情的清單,你必須選擇你喜歡的。按數組值排序WordPress用戶列表

說:巧克力,帆船,跑步,騎自行車,Netflix公司,等...

根據該複選框勾選,它存儲爲一個數組,或字符串,在數據庫中(我在靈活其一)。

因此,我現在需要通過誰勾選與您類似的最多複選框來排列用戶列表。

簡而言之,如果我選擇「巧克力,航行&跑步」,而某人剛剛擁有「巧克力」,那麼他們會比我選擇的3人完全相同。

在嘗試使用pre_user_query行動掛鉤破解WP_User_Query,我有以下行:

$query->query_orderby = 'ORDER BY FIND_IN_SET("chocolate", wp_usermeta.meta_value) > 0 ASC'; 

...但沒有運氣。

我有一個用戶meta_key調用babud_likes並且該數組存儲在該密鑰的meta_value中。

回答

1

也許你可以將數據存儲爲二進制字符串?例如,如果我們有巧克力,糖果,糖果,橄欖球這些類別,我們會將它們中的每一個表示爲一個字符串中已知位置的單個位。例如,對於人誰喜歡巧克力,糖果和足球,我們可以寫,使用結構(巧克力,糖果,糖果,足球):

1011 

或某人誰喜歡巧克力,糖果和足球,我們可以寫

1101 

假設我們寫了一個簡單的SQL查詢(SELECT id, likes FROM users WHERE id=1 OR id=2)。然後,我們可以獲得兩個值,並執行按位AND操作,該操作將比較字符串中的每個位,並在兩個位匹配時返回1。所以對於我們的兩個示例用戶,我們會這樣做;

$result = 1011 & 1101; 
// Outputs '1001' 

從我們可以推斷的結果,無論人們喜歡巧克力和足球由於有第一位置指示巧克力1,並在第4位,指示足球1。

就集成到Wordpress而言,我會考慮creating an all new table爲用戶 - 你會遇到問題,最終只用默認的WordPress用戶表。