Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]połączenie dwóch tabel
casperii
post
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
  1. select * from 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ę:

  1. SELECT * FROM `uzytkownicy` AS `u` WHERE `u`.`grupa` IN ( SELECT g.grupa FROM grupa g WHERE `u`.`grupa` = `g`.`grupa` )


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
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
SmokAnalog
post
Post #2





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:

  1. $categories = array_map(function ($category) {
  2. $category->products = [];
  3. }, array_combine(array_column($categories, 'id'), $categories));


I w końcu albo w array_map, albo w pętli (żeby oszczędzić pamięć) połącz poszczególne produkty z kategoriami:

  1. $categories[$product->category_id]->products[] = $product;


Sposobów jest mnóstwo. Wykonasz albo jedno, albo dwa zapytania. Skłaniałbym się nawet lekko ku dwóm.
Go to the top of the page
+Quote Post

Posty w temacie


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 Aktualny czas: 15.10.2025 - 13:26