SQL 查询中多个列的 DISTINCT 或 GROUP BY 问题

Issue with DISTINCT or GROUP BY on multiple Columns in SQL query

我正在使用 PHP 和 MYSQL 从数据库中填充一些下拉列表。

但是,对于为什么以下查询只填充第一列(城市),我一直束手无策 - 而且也没有分组,从需要分组的一堆列中指定

SELECT City, NativeTown, Language, State 
FROM candidates 
WHERE ApprovalCode!='' AND Gender='$gtype' 
GROUP BY City, NativeTown, Language, State 
ORDER BY City,NativeTown,State,Language ASC

我也试过了

SELECT DISTINCT City, NativeTown, Language, State 
FROM candidates 
WHERE ApprovalCode!='' AND Gender='$gtype' 
ORDER BY City,NativeTown,State,Language ASC

但是,在两者中,只有 City 被填充,并且没有分组

我哪里错了?

PS:

数据库

实际代码

$getC=$maindb->query("SELECT City, NativeTown, Language, State FROM candidates 
WHERE ApprovalCode!='' AND Gender='$gtype' 
GROUP BY City, NativeTown, Language, State 
ORDER BY City,NativeTown,State,Language ASC") or die("LIST ERROR :".$maindb->error);


    City<br>
        <!-- <input type="text" name="city" id="city" Placeholder="City" <?php //if(isset($filtvals['city'])){echo "Value ='$filtvals[city]'";}?>>-->

        <select name="city" id="city">
                <option value="Choose">Choose</option>
                <?php while($getClist=$getC->fetch_assoc()){?>
                <option value="<?php  echo $getClist['City'];?>" <?php if(isset($filtvals['city']) && $filtvals['city']==$getClist['City']){echo "Selected='Selected'";}?>><?php  echo $getClist['City'];?></option>
                <?php } $e=error_get_last(); print_r($e);?>
        </select>
    </div>

    <div>State<br>
        <select name="State" id="State">
                <option value="Choose">Choose</option>
        <?php while($getClist=$getC->fetch_assoc()){?>
                    <option value="<?php  echo $getClist['State'];?>" <?php if(isset($filtvals['State']) && $filtvals['State']==$getClist['State']){echo "Selected='Selected'";}?>><?php  echo $getClist['State'];?></option>
            <?php }$e=error_get_last(); print_r($e); ?>
        </select>
    </div>

    <div>Native<br>
        <select name="NativeTown" id="native">
                <option value="Choose">Choose</option>

        <?php while($getClist=$getC->fetch_assoc()){?>
                <option value="<?php  echo $getClist['NativeTown'];?>" <?php if(isset($filtvals['NativeTown']) && $filtvals['NativeTown']==$getClist['NativeTown']){echo "Selected='Selected'";}?>><?php  echo $getClist['NativeTown'];?></option>
            <?php } ?>
        </select>
    </div>


    <div>Language<br>
        <!--<input type="text" name="native" id="native" Placeholder="Native Town" <?php //if(isset($filtvals['native'])){echo "Value ='$filtvals[native]'";}?>>-->
        <select name="Language" id="Language">
                <option value="Choose">Choose</option>

        <?php while($getClist=$getC->fetch_assoc()){?>
                <option value="<?php  echo $getClist['Language'];?>" <?php if(isset($filtvals['Language']) && $filtvals['Language']==$getClist['Language']){echo "Selected='Selected'";}?>><?php  echo $getClist['Language'];?></option>
            <?php } ?>
        </select>
    </div>

结果 在 City 之后,其他 Select 个框不会被填充!

您应该更改所有 PHP 代码。您正在尝试为每一列获取一次查询结果,这是不可能的。你必须做这样的事情:

$getC=$maindb->query("SELECT City, NativeTown, Language, State FROM candidates 
WHERE ApprovalCode!='' AND Gender='$gtype' 
ORDER BY City,NativeTown,State,Language ASC") or die("LIST ERROR :".$maindb->error);
data=[];
while($getClist=$getC->fetch_assoc()){
    data[]=[$getClist['City'].$getClist['State'],$getClist['NativeTown']]
}

现在你有了一个包含数据的数组。现在在代码中您需要迭代该数组。