Как мне избежать дубликатов в результате запроса MySQL?

#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'].' - ';
    }
}