使用DISTINCT查询数据库时无法获取sbvip字段及去重问题求助
解决SQL查询中DISTINCT无法获取sbvip字段的问题
你遇到的错误根源很明确:当前SQL语句只查询了merchant_name字段,结果集里根本没有sbvip,所以PHP代码中访问$myrow['sbvip']才会报Undefined index。
DISTINCT的作用是对查询返回的所有列的组合去重,不是只针对单个列。要同时获取不重复的merchant_name和对应的sbvip,分两种场景处理:
场景1:同一个merchant_name对应的sbvip值唯一
直接把sbvip加入SELECT列表,DISTINCT会对两个字段的组合去重:
SELECT DISTINCT merchant_name, sbvip FROM merchants2
场景2:同一个merchant_name对应多个不同的sbvip值
这种情况需要明确你要保留哪个sbvip值,比如取最大值、最小值,或者按规则取第一个出现的,这时用GROUP BY配合聚合函数:
- 取每个merchant_name对应的最大sbvip:
SELECT merchant_name, MAX(sbvip) AS sbvip FROM merchants2 GROUP BY merchant_name
- 取每个merchant_name对应的最小sbvip:
SELECT merchant_name, MIN(sbvip) AS sbvip FROM merchants2 GROUP BY merchant_name
- 按id排序后取每个merchant_name的第一行sbvip(假设表有id字段):
SELECT merchant_name, sbvip FROM ( SELECT merchant_name, sbvip, ROW_NUMBER() OVER (PARTITION BY merchant_name ORDER BY id) AS rn FROM merchants2 ) t WHERE rn = 1
修改后的PHP代码示例(以场景1为例)
function setvip_sportsbook_model(){ //connect to the server $conn= mysqli_connect("localhost","root","","people"); //check the connection if(mysqli_connect_errno($conn)){ echo "Error"; return []; } //prepare the sql $sql= "SELECT DISTINCT merchant_name, sbvip FROM merchants2"; //execute query $result= mysqli_query($conn,$sql); $record = array(); //process result while($myrow = mysqli_fetch_array($result)){ $info['merchant_name'] = $myrow['merchant_name']; $info['sbvip'] = $myrow['sbvip']; $record[] = $info; } mysqli_close($conn); return $record; }
内容的提问来源于stack exchange,提问作者Joy
相关产品推荐
相关产品推荐

