• 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
291 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 195 wizyt
pytanie zadane 29 września 2015 w PHP przez runway Użytkownik (640 p.)
0 głosów
2 odpowiedzi 206 wizyt
pytanie zadane 16 maja 2019 w Java przez Paweł123 Nałogowiec (33,500 p.)
0 głosów
1 odpowiedź 427 wizyt
pytanie zadane 9 lutego 2017 w PHP przez Muhin Gaduła (4,120 p.)

92,980 zapytań

141,943 odpowiedzi

321,189 komentarzy

62,307 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.

Wprowadzenie do ITsec, tom 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...