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

时间:2017-06-19 07:15:57

标签: php mysql

如何确定表用户中的RESULTS字段,基于USER SCORE字段,其值最接近SCORE BRAND字段。

enter image description here

这是表品牌

    <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>

4 个答案:

答案 0 :(得分:3)

您可以在选择中使用子查询为每个选定的用户找到合适的品牌,如下所示:

int

答案 1 :(得分:0)

select * 
from table 
order by abs(value - $myvalue)
limit 1

答案 2 :(得分:0)

您应该有一些预定义的阈值来匹配(因此得分1与得分1000不匹配)。

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

答案 3 :(得分:0)

最后我得到了一些很好的解决方案:

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 - &gt;品牌名称

我刚刚加入了两个表并进行了一些算术运算以获得适当的行。

修改

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;

这是任何多重值的完整动态查询。它将为您提供用户的品牌关闭分数。

您可以找到LIVE DEMO HERE