SQL объединяет 2 таблицы и просматривает результаты - PullRequest
0 голосов
/ 27 апреля 2019

У меня есть этот sql-запрос, чтобы получить данные из 2 таблиц и объединить их на основе соответствующего идентификатора.

SELECT   *
FROM     bar_items 
   LEFT JOIN bar_cats ON
         bar_cats.cat_id = bar_items.categories
ORDER BY bar_items.categories,
         bar_items.item_name ASC

Что дает мне этот результат

enter image description here

Сейчас я пытаюсь отобразить их в категориях с названием категории в качестве заголовка для каждой категории.

У меня есть этот код с помощью старого сообщения о переполнении стека: здесь

    $data = array(); 
foreach($results_lists as $row){
        $data[$row['cat_name']][$row['item_name']]['item_name'] = $row['item_name'];
        $data[$row['cat_name']][$row['item_price']]['item_price'] = $row['item_price'];
        $data[$row['cat_name']][$row['item_image']]['item_image'] = $row['item_image'];
    } foreach($data as $category => $events){

        echo $category.'<br>';

        foreach($events as $event){
            echo '    <> '.$event['item_name'].'<br>';
            echo '        <> '.$event['item_price'].'<br>';
            echo '        <> '.$event['item_image'].'<br>';
        }

но он ведет себя не так, как мне нужно, и отображается так: (обратите внимание на пустые строки <> и далее по списку не отображаются некоторые цены, даже если они возвращаются в запросе )

Beer and Bitter
<> John Smiths
<> 
<> 
<> 
<> 2.50
<> 
<> 
<> 
<> 1556315986_john-smiths.jpg
<> Sam Smiths
<> 
<> 
<> 
<> 2.15
<> 
<> 
<> 
<> 1556316430_Samuel_Smith_Brewery_logo.png
<> Stones
<> 
<> 
<> 
<> 
<> 1556316361_stones.jpg
<> Tetleys
<> 
<> 
<> 
<> 
<> 1556315794_tetleys.jpg
Lager
<> Bud Light
<> 
<> 
<> 
<> 2.50
<> 
<> 
<> 
<> 1556316641_bud-light.png
<> Carling
<> 
<> 
<> 
<> 
<> 1556316497_carling-white-011.png
<> Fosters
<> 
<> 
<> 
<> 
<> 1556316197_fosters.png
Cider
<> Strongbow
<> 
<> 
<> 
<> 2.50
<> 
<> 
<> 
<> 1556316131_Strongbow-Logo-1.png

EDIT: Когда я печатаю массив, я получаю это:

Array
(
    [Beer and Bitter] => Array
        (
            [John Smiths] => Array
                (
                    [item_name] => John Smiths
                )

            [2.50] => Array
                (
                    [item_price] => 2.50
                )

            [1556315986_john-smiths.jpg] => Array
                (
                    [item_image] => 1556315986_john-smiths.jpg
                )

            [Sam Smiths] => Array
                (
                    [item_name] => Sam Smiths
                )

            [2.15] => Array
                (
                    [item_price] => 2.15
                )

            [1556316430_Samuel_Smith_Brewery_logo.png] => Array
                (
                    [item_image] => 1556316430_Samuel_Smith_Brewery_logo.png
                )

            [Stones] => Array
                (
                    [item_name] => Stones
                )

            [1556316361_stones.jpg] => Array
                (
                    [item_image] => 1556316361_stones.jpg
                )

            [Tetleys] => Array
                (
                    [item_name] => Tetleys
                )

            [1556315794_tetleys.jpg] => Array
                (
                    [item_image] => 1556315794_tetleys.jpg
                )

        )

    [Lager] => Array
        (
            [Bud Light] => Array
                (
                    [item_name] => Bud Light
                )

            [2.50] => Array
                (
                    [item_price] => 2.50
                )

            [1556316641_bud-light.png] => Array
                (
                    [item_image] => 1556316641_bud-light.png
                )

            [Carling] => Array
                (
                    [item_name] => Carling
                )

            [1556316497_carling-white-011.png] => Array
                (
                    [item_image] => 1556316497_carling-white-011.png
                )

            [Fosters] => Array
                (
                    [item_name] => Fosters
                )

            [1556316197_fosters.png] => Array
                (
                    [item_image] => 1556316197_fosters.png
                )

        )

    [Cider] => Array
        (
            [Strongbow] => Array
                (
                    [item_name] => Strongbow
                )

            [2.50] => Array
                (
                    [item_price] => 2.50
                )

            [1556316131_Strongbow-Logo-1.png] => Array
                (
                    [item_image] => 1556316131_Strongbow-Logo-1.png
                )

        )

)

Где я иду не так?

Спасибо.

1 Ответ

1 голос
/ 27 апреля 2019

Я думаю, вы делаете жизнь более сложной, чем она должна быть. Простой проход через набор результатов должен быть в состоянии произвести вывод, на который вы надеетесь.

$last_cat = null;

foreach($results_lists as $row){
    if ( $last_cat != $row['cat_name'] ) {
        echo $row['cat_name'] . '<br>';
        $last_cat = $row['cat_name'];
    }
    echo '    <> '.$row['item_name'].'<br>';
    echo '        <> '.$row['item_price'].'<br>';
    echo '        <> '.$row['item_image'].'<br>';
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...