Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL][PHP] Wypisanie tabeli z połączeniem jeden do wielu
Aui06
post
Post #1





Grupa: Zarejestrowani
Postów: 44
Pomógł: 0
Dołączył: 27.03.2014

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


Witam

Czy ktoś z was wie jak połączyć ze sobą 2 tabele o powiązaniach jeden do wielu. Czyli 1 rekord z pierwszej tabeli jest powiązany z kilkoma z drugiej.

W pierwszej tabeli jest kilkaset wyników. Każdy musi zostać wyświetlony wraz d dodatkowymi polami.

Pola nie mogą się powtarzać a dodatkowe wartości mają zostać dopisane na końcu. Jeśli w drugiej tabeli były 3 wyniki do wypisania pierwszej dodaje 3 rekordy na końcu.

Druga tabela zawiera klucz obcy na podstawie którego można połączyć.

Próbowałam zrobić to w ten sposób

  1. $sqlla = sed_sql_query("SELECT pp_IdTowarS, tw_Id, GROUP_CONCAT(pp_Wartosc) as razem FROM tw__Towar w LEFT OUTER JOIN planer2_plus_tw_pola p on w.tw_Id=p.pp_IdTowarS
  2. WHERE w.tw_idGrupa IN (".sed_sql_prep($khfiltr).") GROUP BY pp_IdTowarS");
  3. while ($row7 = sed_sql_fetcharray($sqlla)) {
  4. $p[$row7['tw_Id']] = $row7['razem'];
  5. }
  6. foreach ($p as $key => $value) {
  7. $kategorias[$key] = implode(", ", $value);
  8. }


W efekcie tego otrzymałam stringa (aaa, 2, 1, , bbbbb, ccc). A potrzebuje zmienne na których mogła bym pracować.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Sephirus
post
Post #2





Grupa: Zarejestrowani
Postów: 1 527
Pomógł: 438
Dołączył: 28.06.2011
Skąd: Warszawa

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


Praktycznie nie zmusisz MySQL'a aby wypluł Ci zmienną liczbę pól dla jednego rekordu tak by to w pełni Ci pasowało. Tak czy owak trzeba to przetwarzać w PHP do wyjściowej tablicy. Jeśli potrzebujesz działać na tych danych jeszcze w zapytaniach MySQL to prosto mówiąc nie da się tego zrobić o ile nie znasz liczby tych pól (nie jest ona stała).

Innymi słowy mysql wypluwa Ci jakąś pośrednią strukturę, którą musisz przerobić do takiej formy jakiej potrzebujesz.

Opcje w PHP są dwie:

1. Użyć tego co wyżej (o ile to możliwe) czyli GROUP_CONCAT i przetwarzaniu tego.


2. Pobrać zduplikowane rekordy dla każdej wartości dodatkowego pola. Robisz zwykłego joina i sortujesz po ID głównego rekordu. Joinujesz z tą dodatkową wartością. Uzyskujesz w ten sposób tablicę:

id pole dodatkowe
1 coś a
1 coś b
1 coś c
2 nic a
2 nic c
....

Taką strukturę łatwo procesować w PHP - iterujesz po każdym rekordzie i tworzysz odpowiednią tablicę sprawdzając przy tym do którego rekordu to przypisać.

Wynikowa tablica po takich zabiegach będzie wyglądać tak jak chciałaś - ale już po stronie PHP.


Co potrzebujesz zrobić z tymi dodatkowymi danymi? Może da się to uzyskać od innej strony?
Go to the top of the page
+Quote Post

Posty w temacie


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

 



RSS Aktualny czas: 28.12.2025 - 13:03