Проблема с DISTINCT или GROUP BY для нескольких столбцов в запросе SQL

Я использую 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

Но в обоих случаях населяется только Город, и это тоже без группировки

Куда я иду не так?

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>

РЕЗУЛЬТАТ
После города другие поля выбора не заполняются!

После города другие поля выбора не заполняются!

-2

Решение

Вы должны изменить весь свой код 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']]
}

Итак, теперь у вас есть массив с данными. Теперь в коде вам нужно перебрать этот массив.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]