2014-01-10 39 views
0

我正在做一個網站與用戶系統 ,並希望以匹配他們的個人資料的用戶具有像20場用戶之間比較相似PHP

我想,用戶可以當他們得到一個匹配的其他用戶是50%,這是20相同

我已經有了這10場以上:

$query = "SELECT * FROM users WHERE username='test'"; 
    $result = mysqli_query($db_conx, $query); 
    $array = mysqli_fetch_row($result); 

    $query2 = "SELECT * FROM users WHERE username='test2'"; 
    $result2 = mysqli_query($db_conx, $query2); 
    $array2 = mysqli_fetch_row($result2); 

    $similar = array_intersect($array, $array2); 
    $p2_perc = count($similar)/count($array2); 

    echo round($p2_perc * 100) . "% equal"; 

我想,該用戶將自動獲得特定用戶顯示的,但我可以修復

有人嗎?

在此先感謝 非常感謝!

真正的問題是這樣的

$query2 = "SELECT * FROM users LIMIT 1"; 
if ($query2 similarity > 50%) 
echo "$user2"; 
+1

問題在哪裏? – thpl

+0

什麼工作/不工作?這似乎可以工作..但它很難看到它失敗 – Sam

+0

上面的代碼與顯示兩個用戶的相似性的百分比,但我想使query2 $ query2 =「選擇*從用戶」;所以它只會選擇多於50%類似的用戶 – Darren

回答

1

您可以組合成一個查詢這樣的:

SELECT 
    user1.username, 
    user2.username, 
    (
     (user1.row1=user2.row1) + 
     (user1.row2=user2.row2) + 
     ... 
    )/20 AS score 
FROM 
    users AS user1, 
    users AS user2 
WHERE 
    user1.username <> user2.username 
HAVING 
    score > 0.5 

這將返回兩個用戶名和他們的得分只有它的分數大於0.5 ,

解釋:將兩列進行比較(每個user1.rowX=user2.rowX)。如果它們相同,則爲1,否則爲0。 0和1之和除以問題的數量(20),這就是得分(它是對平均值的簡單計算)。

但是,如果你檢查了很多用戶,這可能會變得很慢。如果您想僅針對給定用戶(例如,當前登錄的用戶)顯示匹配項,請使用:

SELECT 
    user1.username, 
    user2.username, 
    (
     (user1.row1=user2.row1) + 
     (user1.row2=user2.row2) + 
     ... 
    )/20 AS score 
FROM 
    users AS user1, 
    users AS user2 
WHERE 
    user1.username <> user2.username AND 
    user1.username = 'CURRENTLY_LOGGED_IN_USER' 
HAVING 
    score > 0.5 
+0

你好,我認爲這將工作你能幫我做點什麼嗎?我想比較用戶測試和derping與行equal1,equal2,equal3&equal4我很昏昏欲睡所以如果你可以幫助我呢?以及如果我想將CURRENTLY_LOGGED_IN_USER與所有用戶(*)進行比較,並獲得50%或更多匹配的用戶,感謝 – Darren

+0

我的第一個查詢會檢查每個用戶與其他用戶。第二個針對所有其他人檢查CURRENTLY_LOGGED_IN_USER,並返回評分大於0.5(50%)的用戶。所以第二個查詢回答你的第二個問題。如果您只想檢查兩個用戶,請將其添加到WHERE子句中。 – Reeno

+0

所以它看起來像這樣?或者這是不正確的?不幹活 $查詢=「SELECT test.username, baro.username, ( (test.option1 = baro.option1)+ (test.gender = baro.gender)+ \t(test.state = baro.state) )/ 3 AS得分 FROM 用戶AS試驗, 用戶AS氣壓 WHERE test.username <> baro.username AND test.username = '$ log_username' HAVING 評分> 0.5" ; $ result = mysqli_query($ db_conx,$ query); $ array = mysqli_fetch_row($ result); echo $ array; – Darren