You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 23:33:22