#php #mysql
#php #mysql
Вопрос:
У меня есть PHP-скрипт, извлекающий строки из запроса MySQL, однако некоторые serum
отображаются несколько раз. Я скорее хочу, чтобы каждый из них serum
отображался только один раз.
<?php
$typeno = 0;
$categories = [];
$gettestcat = mysqli_query($con,"SELECT * from types where testid = '$id'");
while($gtc = mysqli_fetch_array($gettestcat)){
$testid = $gtc['testtypeid'];
$gettesttypename = mysqli_query($con,"SELECT * from tests where id = '$testid'");
$gtyn = mysqli_fetch_array($gettesttypename);
if (!in_array($gtyn['sample_type'], $categories)) {
$categories [] = $gtyn['sample_type'];
}
}
$countcat = count($categories);
$gettesttypes = mysqli_query($con,"SELECT * from types where testid = '$id'");
while($gtt = mysqli_fetch_array($gettesttypes)){
$testid = $gtt['testtypeid'];
$gettesttypenames = mysqli_query($con,"SELECT * from tests where id = '$testid'");
$gtyns = mysqli_fetch_array($gettesttypenames);
if ($gtyns['sample_type'] == 'Serum') {
echo $gi['name'].' - '.$gtyns['test_name'].' - ';
}
}
?>
<?php ?>
<?php
?>
Мне нужно получить его таким, как показано на изображении, с именем, показанным только один раз.
Комментарии:
1. Почему вы выполняете одни и те же запросы несколько раз вместо повторного использования результатов?
2. Это выглядит действительно странно. Я не исследовал глубже, однако, это, несомненно, можно было бы сделать с помощью довольно простого объединения и / или group by (или даже только простого выбора).
3. Предупреждение: Вы широко открыты для SQL-инъекций и действительно должны использовать параметризованные подготовленные инструкции вместо ручного построения ваших запросов. Они предоставляются PDO или MySQLi . Никогда не доверяйте никаким входным данным, особенно тем, которые поступают со стороны клиента. Даже когда ваши запросы выполняются только доверенными пользователями, вы все еще рискуете повредить свои данные .
Ответ №1:
если вы используете mysql, используйте DISTINCT
ключевое слово для уникальных результатов
Ответ №2:
Вы можете сохранить имена, которые вы выводите, в массиве. Затем вы проверяете, существует ли имя в массиве или нет, прежде чем повторять его.
// Initialize the array
$names = [];
while($gtt = mysqli_fetch_array($gettesttypes)){
$testid = $gtt['testtypeid'];
$gettesttypenames = mysqli_query($con,"SELECT * from tests where id = '$testid'");
$gtyns = mysqli_fetch_array($gettesttypenames);
if ($gtyns['sample_type'] == 'Serum') {
if (!array_key_exists($gi['name'], $names)) {
// The name doesn't exist in the array, echo it:
echo $gi['name'] . '-';
// Put the name into the array so it won't be echoed again
$names[$gi['name']] = true;
}
echo $gtyns['test_name'].' - ';
}
}