![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 681 Pomógł: 28 Dołączył: 14.08.2014 Ostrzeżenie: (0%) ![]() ![]() |
Panowie mam pytanie odnośnie pobierania informacji z dwóch tabel , jak to wykonać optymalnie ?
tabela: grupa: id, grupa 1 klienci 2 sprzedawcy 3 inni tabela uzytkownicy id, user, grupa 1 czesiek, klienci 2 franek , klienci 3 staszek, sprzedawcy 4 zygmunt, klienci teraz chce wyświetlić wszystko z tabelki grupa
powyższe zapytanie wyświetli mi klienci sprzedawca a Ja chciałbym osiągnąć taki schemat: klienci: czesiek, franek, zygmunt sprzedawcy: staszek ktoś podpowie ? Oczywiście tych grup może być bardzo dużo , chodzi mi raczej o zrozumienie tego. Nie wiem , czy w dobrą stronę idę:
teraz wyświetla mi to co ma powiązania w dwóch tabelach i nie mam tak jak by nagłówka grupy. klienci: czesiek, franek, zygmunt sprzedawcy: staszek inni: kolor pogrubiony czarny - to pokazuje kolor czerwony - tego nie pokazuje a chce by też pokazywało nawet jeśli nie ma relacji kolor fioletowy - tego też nie pokazuje gdyż w tabeli klienci nie ma powiązania , a chce by też wyświetlało. Ewentualnie jak to zrobić w php ? Ten post edytował casperii 5.06.2018, 01:01:26 |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 286 Pomógł: 46 Dołączył: 10.01.2016 Ostrzeżenie: (0%) ![]() ![]() |
MariaDB [casperii]> select * from users;
+----+---------+---------+ | id | user | col2 | +----+---------+---------+ | 1 | czesiek | clients | | 2 | franek | clients | | 3 | staszek | seller | | 4 | staszek | clients | +----+---------+---------+
+---------+---------+-------+ | clients | seller | other | +---------+---------+-------+ | czesiek | NULL | NULL | | franek | NULL | NULL | | NULL | staszek | NULL | | staszek | NULL | NULL | +---------+---------+-------+ |
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 1 707 Pomógł: 266 Dołączył: 3.07.2012 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
Źle się za to zabierasz. Powiedz dokładnie co chcesz zrobić. Dlaczego nie wystarczy Ci zwyczajny JOIN z użytkownikami posortowanymi według grupy? Ewentualnie możesz pomyśleć o użyciu GROUP_CONCAT.
|
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 681 Pomógł: 28 Dołączył: 14.08.2014 Ostrzeżenie: (0%) ![]() ![]() |
@SmokAnalog efekt który chce osiągnąć ma być na zasadzie kategorii i wyświetlonej liście produktów
czyli zakładamy , że mamy dwie tabele: tabelka kategorie id, kategoria, nazwałączenia 1. Komputery , KMP-1 2. RTV , RTV-2 3. Motoryzacja, MOT-3 tabelka produkty id, nazwa, nazwałączenia, cośtam coś 1. Romet, MOT-3, okazja 2. Laptop, KMP-1, promocja 3. Telewizor, RTV-2, wyprzedaż 4. DVD, RTV-2, okazja Chce mieć listę na wzór Komputery (1): -Laptop okazja Motoryzacja (1): -Romet, okazja RTV (2): -Telewizor, wyprzedaż -DVD, okazja i teraz tak sobie przemyślałem, że to jednak trzeba by było zrobić na zasadzie PHP. Masz pomysł ? Ten post edytował casperii 5.06.2018, 18:59:03 |
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 1 707 Pomógł: 266 Dołączył: 3.07.2012 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
Tak myślałem. Ludzie często mylą format wyświetlania z formatem danych.
Pobierz te rekordy normalnie odpowiednio posortowane i w PHP sobie pogrupuj według danej kolumny (polecam array_reduce). Albo po prostu iteruj te wyniki sprawdzając co krok czy grupa się zmieniła. Jak się zmieniła, to wyświetl nagłówek. Pseudokod:
Ten post edytował SmokAnalog 5.06.2018, 19:53:11 |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 681 Pomógł: 28 Dołączył: 14.08.2014 Ostrzeżenie: (0%) ![]() ![]() |
@SmokAnalog dzięki za podpowiedź, a czy mógłbyś mi rozpisać schemat?
na pewno select * kategorie order by kategoria ASC i co dalej foreach i w nim odwołanie do każdej kategorii dla drugiej tabelki ? |
|
|
![]()
Post
#7
|
|
![]() Grupa: Zarejestrowani Postów: 1 707 Pomógł: 266 Dołączył: 3.07.2012 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
Zwykły LEFT JOIN.
Albo może zrób sobie po prostu dwa osobne zapytania? Zbierz kategorie do tablicy, potem zrób tak:
I w końcu albo w array_map, albo w pętli (żeby oszczędzić pamięć) połącz poszczególne produkty z kategoriami:
Sposobów jest mnóstwo. Wykonasz albo jedno, albo dwa zapytania. Skłaniałbym się nawet lekko ku dwóm. |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 681 Pomógł: 28 Dołączył: 14.08.2014 Ostrzeżenie: (0%) ![]() ![]() |
@SmokAnalog czyli że tak? :
Ten post edytował casperii 6.06.2018, 12:28:39 |
|
|
![]()
Post
#9
|
|
![]() Grupa: Zarejestrowani Postów: 1 707 Pomógł: 266 Dołączył: 3.07.2012 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
Kategorie sobie pobierz z $sql->fetchAll(PDO::FETCH_OBJ). Zakładam, że te dane nie idą w jakieś grube tysiące, bo jeśli idą, to warto rozważyć fetch wiersz po wierszu.
|
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 681 Pomógł: 28 Dołączył: 14.08.2014 Ostrzeżenie: (0%) ![]() ![]() |
Wolałbym wybiegać w przyszłość i zakładać , że może być kategorii 10000
![]() |
|
|
![]()
Post
#11
|
|
![]() Grupa: Zarejestrowani Postów: 1 707 Pomógł: 266 Dołączył: 3.07.2012 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
Będziesz miał stronę, która będzie pokazywała 10000 kategorii naraz?
|
|
|
![]()
Post
#12
|
|
Grupa: Zarejestrowani Postów: 681 Pomógł: 28 Dołączył: 14.08.2014 Ostrzeżenie: (0%) ![]() ![]() |
No może 10000 kategorii to gruba przesada
![]() |
|
|
![]()
Post
#13
|
|
![]() Grupa: Zarejestrowani Postów: 1 707 Pomógł: 266 Dołączył: 3.07.2012 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
Ja bym to raczej wrzucił do tablicy zamiast fetchować, bo wygodniej się będzie na tym pracowało. Rozumiesz ideę? Chcemy zrobić tablicę kategorii, gdzie każda kategoria ma właściwość products, będącą tablicą jej produktów. Wtedy w widoku możesz elegancko iterować te kategorie i produkty każdej z nich.
|
|
|
![]()
Post
#14
|
|
Grupa: Zarejestrowani Postów: 681 Pomógł: 28 Dołączył: 14.08.2014 Ostrzeżenie: (0%) ![]() ![]() |
@SmokAnalog czyli, że w ten sposób?:
i że powyższe teraz wrzucić w to?:
Ten post edytował casperii 6.06.2018, 13:49:07 |
|
|
![]()
Post
#15
|
|
![]() Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Tutaj
http://nospor.pl/grupowanie-wynikow.html masz pokazane na dokladnie takim samym przykladzie co u ciebie: kategorie -> produkty -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]() ![]() |
![]() |
Aktualny czas: 20.08.2025 - 21:50 |