DOP FETCH_GROUP

Resumo : neste tutorial, você aprenderá como usar o PDO::FETCH_GROUPmodo para agrupar as linhas selecionadas pela primeira coluna.

Introdução ao modo PDO::FETCH_GROUP

O PDO::FETCH_GROUPpermite agrupar linhas do conjunto de resultados em um array aninhado , onde os índices serão os valores exclusivos da coluna e os valores serão arrays das colunas restantes.

Por exemplo, se você tiver uma consulta como esta:

SELECT role, username, email
FROM users;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

O PDO::FETCH_GROUPmodo retornará a seguinte saída:

[
    'admin' => [
        0 => [
            'username' => 'admin',
            'email' => '[email protected]'
        ],
        1 => [
            'username' => 'bob',
            'email' => '[email protected]'
        ]
    ]
    'contributor' => [
        0 => [
            'username' => 'alex',
            'email' => '[email protected]'
        ],
        1 => [
            'username' => 'alice',
            'email' => '[email protected]'
        ]
    ]
]Linguagem de código:  PHP  ( php )

Isso PDO::FETCH_GROUPé útil caso você queira agrupar linhas por valores exclusivos da primeira coluna no conjunto de resultados. Por exemplo, você pode usar PDO::FETCH_GROUPpara selecionar dados para gerar agrupamentos de opções dentro de um elemento selecionado.

O exemplo PDO::FETCH_GROUP

O exemplo a seguir seleciona os livros e editoras da tabela bookse publishers. O PDO::FETCH_GROUPgrupo agrupa os livros pelos nomes das editoras:

<?php

$pdo = require 'connect.php';

$sql = 'SELECT name, book_id, title
        FROM publishers p
        INNER JOIN books b ON b.publisher_id = p.publisher_id';

$statement = $pdo->query($sql);

$publishers = $statement->fetchAll(PDO::FETCH_GROUP | PDO::FETCH_ASSOC);
?>

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Books</title>
</head>
<body>
    <label for="book">Select a book:</label>
    <select name="book" id="book">
        <?php foreach ($publishers as $publisher => $books) : ?>
        <optgroup label="<?php echo $publisher ?>">
            <?php foreach ($books as $book) : ?>
            <option value="<?php echo $book['book_id'] ?>"><?php echo $book['title'] ?></option>
            <?php endforeach ?>
        </optgroup>
        <?php endforeach ?>
    </select>
</body>
</html>Linguagem de código:  PHP  ( php )

Como funciona.

Primeiro, conecte-se ao banco de dados usando o connect.phpscript. O script retorna uma instância do objeto PDO:

$pdo = require 'connect.php';Linguagem de código:  PHP  ( php )

Em seguida, construa uma instrução SQL para selecionar o nome do editor na publisherstabela e o ID e título do livro na bookstabela:

$sql = 'SELECT name, book_id, title
        FROM publishers p
        INNER JOIN books b ON b.publisher_id = p.publisher_id';Linguagem de código:  PHP  ( php )

Observe que a consulta usa INNER JOINcláusula para combinar dados de duas tabelas. Se você não está familiarizado com INNER JOIN, pode conferir o INNER JOINtutorial.

Em seguida, execute a instrução SQL usando o método query() do objeto PDO:

$statement = $pdo->query($sql);Linguagem de código:  PHP  ( php )

Depois disso, busque as linhas do conjunto de resultados usando os modos PDO::FETCH_GROUPe PDO::FETCH_ASSOC:

$publishers = $statement->fetchAll(PDO::FETCH_GROUP | PDO::FETCH_ASSOC);Linguagem de código:  PHP  ( php )

Por fim, crie um agrupamento de opções para um elemento selecionado usando um loop foreach aninhado. O loop foreach externo cria o elemento optgroup. E o loop interno cria os elementos de opção.

<label for="book">Select a book:</label>
<select name="book" id="book">
    <?php foreach ($publishers as $publisher => $books) : ?>
    <optgroup label="<?php echo $publisher ?>">
        <?php foreach ($books as $book) : ?>
        <option value="<?php echo $book['book_id'] ?>"><?php echo $book['title'] ?></option>
        <?php endforeach ?>
 </optgroup>
<?php endforeach ?>Linguagem de código:  PHP  ( php )

Resumo

  • Use PDO::FETCH_GROUPpara agrupar linhas de um conjunto de resultados pela primeira coluna selecionada.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *