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%)
-----


Nie do końca o to mi chodziło ale zagłębiając się w temat:

Ogólnie rozumiem, że masz chciałabyś coś na zasadzie:

id pole d1 d2 d3 .... dn
1 coś a b c .... z

Nie ma super sposobu na coś takiego. Zastosowałaś group_concat i słusznie. Uzyskasz tak jak pisałaś string z wartościami po ",":

id pole dodatkowe
1 coś a,b,c,....,z


Jeśli w tych dodatkowych wartościach nie występuję znak "," to wystarczy tak jak jest - jeśli występuje musisz znaleźć odpowiedni separator dla GROUP_CONCAT:

  1. GROUP_CONCAT(nazwa_pola SEPARATOR "znak")


Teraz pobrawszy takie dane masz w PHP taką tabelę:

Kod
array(
    'id' => 1,
    'pole' => 'coś',
    'dodatkowe' => 'a,b,c'
);


jeśli masz dalej pracować na takich danych w PHP posłuż się funkcją explode. Dla każdego z wierszy wyników ekploduj te dodatkowe dane do tabeli php:

  1. $count = count($wyniki);
  2. for($i = 0; $i < $count; $i++) {
  3. $wyniki[$i]['dodatkowe'] = explode(',',$wyniki[$i]['dodatkowe']);
  4. }


W ten sposób uzyskasz tablicę:

  1. 'id' => 1,
  2. 'pole' => 'coś',
  3. 'dodatkowe' => array(
  4. 'a',
  5. 'b',
  6. 'c'
  7. )
  8. );


Nie wiem czy o to chodziło - dużo byś nie musiała zmieniać.
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: 27.12.2025 - 04:22