Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL][PHP]Odczyt z bazy powstarzających się rekordów
kubax33
post 16.11.2016, 14:41:40
Post #1





Grupa: Zarejestrowani
Postów: 157
Pomógł: 1
Dołączył: 27.01.2010

Ostrzeżenie: (0%)
-----


Mam tabelę

NAZWA | ID_PRODUKTU | SZTUK
spodnie 1 | 1000 | 21
spodnie 2 | 1000 | 11
czapka | 2000 | 6
bluzka | 5000 | 6
spodnie 3 | 1000 | 55

I teraz chciałbym wyciągnąć wszystkie dane z powtarzającego się rekordu ID_PRODUKTU 1000 czyli wynik powiedzmy echo otrzymany ma być taki:

PRODUKT: 1000 NAZWA: spodnie 1, spodnie 2, spodnie 3 SZTUK: 87

Czyli chcę mieć podane wszystkie nazwy i zliczoną ilość sztuk przy czym jak widać ma być to jeden wynik z pobranymi wszystkimi nazwami i zliczoną ilością sztuk bo wychodzi mi jak na razie jedno pod drugim i nie ma co z tym zrobić.

Czy jest w ogóle opcja wyfiltrowania tego? ewentualnie nakierujcie mnie co tutaj może dobrze to obsłużyć.
Go to the top of the page
+Quote Post
kapslokk
post 16.11.2016, 14:59:50
Post #2





Grupa: Zarejestrowani
Postów: 965
Pomógł: 285
Dołączył: 19.06.2015
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Masz dwie możliwości.

1. Układanie sobie danych już po pobraniu poszczegolnych wierszy w pętli. Czyli pobierasz tak jak mowisz jedno pod drugim i robisz np pętle:
$rows = [];
  1. while($row = ... ) {
  2. $rows[$row['ID_PRODUKTU']]['nazwy'][] = $row['NAZWA'];
  3. $rows[$row['ID_PRODUKTU']]['sztuki'] += $row['SZTUK'];
  4. }

Później wystarczy polaczyc nazwy przecinkiem i jestes w stanie wyswietlic to co potrzebujesz

2. W zapytaniu użyjesz sum() do policzenia sztuk, group_concat() do polaczenia nazw przecinkiem, i group by ID_PRODUKTU.
Go to the top of the page
+Quote Post
kubax33
post 16.11.2016, 15:16:34
Post #3





Grupa: Zarejestrowani
Postów: 157
Pomógł: 1
Dołączył: 27.01.2010

Ostrzeżenie: (0%)
-----


Ciężko mi zrozumieć... Wyświetlam dane w pętli:

  1.  
  2. <?php
  3. $sql = mysql_query("SELECT * FROM tabela");
  4.  
  5. while($info = mysql_fetch_array($sql))
  6. {
  7. echo 'PRODUKT: '.$info['ID_PRODUKTU'].' NAZWA: '.$info['NAZWA'].' SZTUK: '.$info['SZTUK'].'';
  8.  
  9. }
  10. ?>
  11.  


No i wiadomo z tabeli, którą podałem wyświetli mi wszystkie rekordy jedno pod drugim, ale nie rozumiem, jak użyć twojej metody.
Go to the top of the page
+Quote Post
kapslokk
post 16.11.2016, 15:39:20
Post #4





Grupa: Zarejestrowani
Postów: 965
Pomógł: 285
Dołączył: 19.06.2015
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Więc nie wyświetlaj danych w tej pętli. W tej pętli stwórz sobie tablicę o strukturze, która umożliwi Ci wyświetlenie danych w takiej formie w jakiej potrzebujesz. Wyświetlisz sobie później.
Go to the top of the page
+Quote Post
borabora
post 16.11.2016, 22:53:43
Post #5





Grupa: Zarejestrowani
Postów: 116
Pomógł: 33
Dołączył: 8.09.2014

Ostrzeżenie: (0%)
-----


  1. SELECT id_produktu, group_concat(DISTINCT nazwa separator ', ') AS nazwy, sum(sztuk) AS ile FROM tabela GROUP BY id_produktu


Ten post edytował borabora 16.11.2016, 22:57:05
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 5.07.2025 - 19:39