Autor Zpráva
jakubk0c
Profil
Dobrý den, potřeboval bych pomoct s jedním dotazem.
Mám tabulku

id \ name \ section_id \ image \ level
1 \ auto \ 0 \ ... \ 1
2 \ barva \ 0 \ ... \ 1
3 \ piti \ 0 \ ... \ 1
4 \ BMW \ 1 \ ... \ 2
5 \ FORD \ 1 \ ... \ 2
6 \ AUDI \ 1 \ ... \ 2
7 \ bílá \ 2 \ ... \ 2
8 \ černá \ 2 \ ... \ 2
9 \ pivo \ 3 \ ... \ 2

A potřeboval bych výstup

auto [
BMW (id, image),
FORD (id, image),
AUDI (id, image),
],
barva [
bílá (id, image),
černá (id, image),
]
piti [
pivo (id, image)
];
Keeehi
Profil
jakubk0c:
Bude to hluboké jen takto? Tedy dvě úrovně, nebo to potřebuješ obecně na jakoukoli hloubku?
jakubk0c
Profil
Keeehi:
Jsou tam jen 2 úrovně.
Keeehi
Profil
jakubk0c:
Viděl bych to nějak takto.
<?php
$data = [
    ["id" => 1, "name" => "auto", "section_id" => 0, "image" => "...", "level" => 1],
    ["id" => 2, "name" => "barva", "section_id" => 0, "image" => "...", "level" => 1],
    ["id" => 3, "name" => "piti", "section_id" => 0, "image" => "...", "level" => 1],
    ["id" => 4, "name" => "BMW", "section_id" => 1, "image" => "...", "level" => 2],
    ["id" => 5, "name" => "FORD", "section_id" => 1, "image" => "...", "level" => 2],
    ["id" => 6, "name" => "AUDI", "section_id" => 1, "image" => "...", "level" => 2],
    ["id" => 7, "name" => "bílá", "section_id" => 2, "image" => "...", "level" => 2],
    ["id" => 8, "name" => "černá", "section_id" => 2, "image" => "...", "level" => 2],
    ["id" => 9, "name" => "pivo", "section_id" => 3, "image" => "...", "level" => 2]
]; // data mockup

$items = [];
foreach($data as $row) {
    if ($row["section_id"] === 0) {
        $items[$row["id"]] = ["name" => $row["name"], "values" => []];
    } else {
        $items[$row["section_id"]]["values"][] = [$row["name"], $row["id"], $row["image"]];
    }
}

$result = [];
foreach($items as $item) {
    $result[$item["name"]] = $item["values"];
}

print_r($result);

Co je nutné, tak to je aby položky první úrovně šly před položkami úrovně druhé (v dotaze nezapomenout na ORDER BY section_id nebo ORDER BY level). Místo toho data mockupu budeš mít data z databáze, takže místo prvního foreach($data as $row) { budeš mít while ($row = $result->fetch_assoc()) { ale na funkcionalitě to nic nemění.
jakubk0c
Profil
Keeehi:
Super děkuji moc, musel jsem to trochu předělat, ale funguje to. Já čekal, že to pude nějakým jednoduchým příkazem ze SQL rovnou vytáhnout a že nebude potřeba řešit přes PHP.
Dobrá zkušenost

Díky moc

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0