Удалить дубликаты, извлеченные из цикла while - PullRequest
0 голосов
/ 15 марта 2012

Я надеюсь удалить повторяющиеся записи из массива, который я вызываю, из хранимой процедуры с циклом while.

// Prepare stored procedure call
   $sth = $dbh->prepare('CALL sp_get_recipes()'); 

   // Call the stored procedure
    $res = $sth->execute();

    if ($res){                  
        while( $row = $sth->fetchObject() ){
            echo $row->Recipe;  // I would like to echo this row just once.
            echo '<ul class="recipe-body"><li>'.$row->Ingredient."&nbsp;".$row->Quantity."&nbsp;".$row->UoM.'</li></ul>';
            }
        // Close connection
            $dbh = null;
        }else{
        $arr = $sth->errorInfo();
        echo "Execution failed with MYSQL: " . $arr[0] . "\n";
        die();
        }

Насколько я понимаю, мой echo $ row-> Recipe;должен существовать как-то сам по себе.Я смотрю в array_unique, чтобы повторить значение только один раз, но я не могу понять это точно.Если бы кто-то мог указать мне правильное направление, это было бы замечательно.

ОБНОВЛЕНИЕ Спасибо за все ответы, я исправил хранимую процедуру для возврата уникальных строк.

Ответы [ 2 ]

0 голосов
/ 15 марта 2012

Если вы не можете изменить структуру базы данных, что я бы порекомендовал, вы можете сначала сохранить информацию, полученную из запроса к базе данных, в объекты (например, некоторый тип объектов Recipe с массивом объектов Ingredient), а затем построить фактический результат .

Если вы можете изменить структуру базы данных или способ запроса (если последний уже дает вам то, что я собираюсь рекомендовать), вы можете иметь таблицу (если база данных является реляционной) для рецептов с каким-то идентификатором и еще одна таблица ингредиентов рецептов, где в каждой строке ингредиентов хранится идентификатор рецепта, которому он принадлежит.

0 голосов
/ 15 марта 2012

Создайте временный массив раньше времени и сохраните в нем все рецепты, которые были отражены. Перед эхо-проверкой проверьте временный массив для текущего рецепта (если он содержит, не отображайте его, а затем сохраните его во временном массиве).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...