簡體   English   中英

如何在PHP中找到最接近的值

[英]How to find the closest value in PHP

如何確定表用戶中的RESULTS字段,基於USER SCORE字段,其值最接近SCORE BRAND字段。

在此輸入圖像描述

這是表品牌

    <table>
<tr>
<th>BRAND NAME</th>
<th>SCORE BRAND</th>
</tr>";
$sql = mysql_query("SELECT * FROM brand");
while($m=mysql_fetch_array($sql)){ 
echo "<tr> 
<td>$m[brand_name]</td>
<td>$m[score]</td><tr>";
}
</table>

這是表用戶

    <table>
<tr>
<th>USER NAME</th>
<th>SCORE USER</th>
<th>RESULT</th>
</tr>";
$sql2 = mysql_query("SELECT * FROM users");
while($u=mysql_fetch_array($sql2)){ 
echo "<tr> 
<td>$u[username]</td>
<td>$u[score]</td>
<td> ??? </td>
<tr>";
}
</table>

您可以在選擇中使用子查詢為每個選定的用戶找到合適的品牌,如下所示:

SELECT u.*, (
    SELECT b.id
    FROM brand AS b
    ORDER BY ABS(b.score - u.score) ASC, b.score DESC -- selects brands ordered by their difference from user's score
    LIMIT 1 -- get just the first brand (with score closest to user's)
)
FROM user AS u
select * 
from table 
order by abs(value - $myvalue)
limit 1

您應該有一些預定義的閾值來匹配(因此得分1與得分1000不匹配)。

SELECT .. WHERE score_brand >= score_user - :epsilon AND score_brand <= score_user + :epsilon

最后,我得到了一些漂亮的解

SELECT u.*, b.nama_lengkap as result 
FROM `users` AS u 
JOIN `brands` AS b 
WHERE (b.score - u.score) > 0 
AND (b.score - u.score) < 10 
ORDER BY u.id;

b.nama_lengkap - >品牌名稱

我剛剛加入了兩個表並進行了一些算術運算以獲得適當的行。

編輯

SELECT v.id, v.username, v.score, b.nama_lengkap AS result
FROM (SELECT users.id, users.score, users.username, min(brands.score) nextSc
      FROM users
      LEFT JOIN brands
        ON users.score <= brands.score
     GROUP BY users.id, users.score) AS v
LEFT JOIN brands b
  ON v.nextSc = b.score
ORDER BY v.id, v.score;

這是任何多重值的完整動態查詢。 它將為您提供用戶的品牌關閉分數。

你可以在這里找到現場演示

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM