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']]
}
现在你有了一个包含数据的数组。现在在代码中您需要迭代该数组。
我正在使用 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']]
}
现在你有了一个包含数据的数组。现在在代码中您需要迭代该数组。