• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

question-closed Tablica wyświetla tylko ostatni rekord tabeli

VPS Starter Arubacloud
0 głosów
272 wizyt
pytanie zadane 30 sierpnia 2017 w PHP przez sc4rface Dyskutant (7,710 p.)
zamknięte 31 sierpnia 2017 przez sc4rface

Hi! Mam problem - utworzyłem zapytanie mySQL zwracające kolejno id kategorii, id produktu, wskaźnik aktywności. Dane te utworzyły tablicę, którą sformatowałem do postaci

  • Kategoria ID
    •   Produkt ID => Wskaźnik aktywności              

Wszystko jest okej, gdyby nie fakt - że mój skrypt wyświetla tylko ostatnie wyniki z danej kategorii. Dokładniej - każda kategoria ma przypisane N produkt ID. Dajmy na to, że w tabeli mySQL wygląda to tak, przykładowo:

Kategoria: 123

  • Produkt ID 12
  • Produkt ID 23
  • Produkt ID 45

Mój skrypt wyświetla w tablicy tylko ostatni rekord, w tym przypadku Produkt ID 45, a powinien wyświetlić trzy przypisane do odpowiedniej kategorii. Co jest nie tak? O czym zapomniałem?

function getProducts() {
            
            global $connect;

            $sql = "ZAPYTANIE PDO DO BAZY";

            $stmt = $connect->prepare($sql);
            $stmt->execute();

            $products = $stmt->fetchAll();

            $result = array();

            foreach ($products as $detail) {

                $pid = $detail['product_id'];
                $key = array($pid);

                $status = $detail['active'];
                $value = array($status);

                $pdetails = array_combine($key, $value);

                $cid = $detail['category_id'];

                $result[$cid] = $pdetails;

            }
            
            echo '<pre>';
            print_r($result);
            echo '</pre>';  
        }

 

komentarz zamknięcia: Problem rozwiązany, padła najlepsza odpowiedź
1
komentarz 30 sierpnia 2017 przez CzikaCarry Szeryf (75,340 p.)
  • Pokaż zapytanie
  • Powiedz co wypluwa "var_dump($products);"

 

komentarz 30 sierpnia 2017 przez sc4rface Dyskutant (7,710 p.)
edycja 31 sierpnia 2017 przez sc4rface
@EDIT
komentarz 30 sierpnia 2017 przez CzikaCarry Szeryf (75,340 p.)
  • Masz limit 2 więc zwróci max 2 rekordy.
  • Nie ma indeksu categoryID, a jest kategoriaID.
komentarz 30 sierpnia 2017 przez sc4rface Dyskutant (7,710 p.)
Wiem - teraz ustawiłem LIMIT 2, bo gdybym wrzucił tutaj całą listę produktów, obawiam się, że by się nie zmieściła.

A co do indeksu categoryid - podmieniałem nazwy tabel w bazie przed wrzuceniem tutaj. Trochę ryzykownym faktem jest podawanie faktycznej struktury. Tak czy inaczej, załóżmy, że zapytanie jest okej (bo zwraca, to co mnie interesuje), chodzi mi raczej o fakt tego, że wyświetla to w sposób nie taki, jak trzeba.

2 odpowiedzi

0 głosów
odpowiedź 30 sierpnia 2017 przez jeremus Maniak (59,720 p.)
wybrane 31 sierpnia 2017 przez sc4rface
 
Najlepsza
po prostu w pętli foreach

podstawiasz do tablicy  $result[$cid] = $pdetails  produkt

nadpisujesz tę wartość i w efekcie masz tylko ostatnią

w zależności co chcesz to albo $result zrób dwuwymiarową tablicą albo rób concatanację $pdetails
komentarz 31 sierpnia 2017 przez sc4rface Dyskutant (7,710 p.)
edycja 31 sierpnia 2017 przez sc4rface
Użycie konkatencji w tym przypadku jest niepoprawne, albo robię to w zły sposób.

$pdetails jest tablicą, a konkatencja o ile się nie mylę działa na stringach. No chyba, że jest jakieś obejście tego problemu?

@EDIT

Pomysł z tablicą dwuwymiarową jednak, okazał się strzałem w dziesiątkę - dzięki pięknie.
0 głosów
odpowiedź 31 sierpnia 2017 przez maly Nałogowiec (37,190 p.)

Nie jestem pewien czy o to chodzi ale...

$result[ $detail['category_id'] ][ $detail['product_id'] ] = $detail['active'];

lub

$result[ $detail['category_id'] ][] = [ $detail['product_id'] => $detail['active'] ];

 

Podobne pytania

0 głosów
2 odpowiedzi 175 wizyt
pytanie zadane 29 września 2015 w PHP przez runway Użytkownik (640 p.)
0 głosów
2 odpowiedzi 151 wizyt
pytanie zadane 16 maja 2019 w Java przez Paweł123 Nałogowiec (33,500 p.)
0 głosów
1 odpowiedź 283 wizyt
pytanie zadane 9 lutego 2017 w PHP przez Muhin Gaduła (4,120 p.)

92,453 zapytań

141,262 odpowiedzi

319,088 komentarzy

61,854 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...