如何确定表用户中的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>
答案 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