Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wiązanie wierszy z dwóch tabel
Forum PHP.pl > Forum > Przedszkole
ketna
Witam,

w tabeli A mam unikalne id dla każdego wiersza
tabela B jest powiązana z tabelą A za pomoca tego samego id,
z tą różnicą, że więcej niż jeden wiersz może być przypisany do wiersza
z tabeli A (czyli w tabeli B może być kilka wierszy z tym samym numerem
id_A).

Problem polega na tym, że ilość wyników to suma wszystkich wierszy z tabeli B
Jeśli zastosuję GROUP BY uzyskuję oczekiwaną ilość wyników, ale wtedy nie dostaję
wszystkich wierszy z tabeli B powiązanych z tabelą A.

tabela_A
id_A value_A
1 a
2 b
3 c

tabela_B
id_A value_B
1 d
1 e
2 f
2 g
3 h
3 i
3 j

Mój kod:
  1. <?php
  2. $sql = "SELECT tabela_A.id, tabela_A.value_A, tabela_B.value_B
  3. FROM tabela_A, tabela_B
  4. WHERE tabela_A.id=tabela_A.id_A
  5. ORDER BY tabela_A.id";
  6.  
  7. $result=mysql_query($sql) or die(mysql_error());  
  8.  
  9. while ($row = mysql_fetch_array($result)){
  10.  
  11. $wynik.=$row[0].'-'.$row[1].'-'.$row[2].'<br>';
  12.  
  13. }
  14.  
  15. print $wynik;
  16. ?>


Pożądany wynik:

1-a-d, e
2-b-f, g
3-c-h, i, j

Obecny wynik:

1-a-d
1-a-e
2-b-f
2-b-g
3-c-h
3-c-i
3-c-j

Bardzo proszę o pomoc.
Pozdrawiam
zicher
Witam

Nie wiem czy dokladnie rozumiem o co Ci chodzi

Masz dwie tabele:
tabela_A z id_A z trzema wierszami i
tabela_B z 7 wierszami

Pierwsze pytanie dlaczego tabela B nie ma wladnego klucza. korzystajac z Twojego oznaczania powinno sie tam znajdowac id_B, a dopiero kolejne id_A

Jak rozumiem masz relacje jeden-do-wielu miedzy tymi tabelami.

Aby polaczyc dwie tabele musisz w zapytaniu wykazac wszystkie polaczenia czyli:

  1. <?php
  2. $sql = "SELECT tabela_A.id, tabela_A.value_A, tabela_B.value_B FROM tabela_A, tabel
    a_B WHERE tabela_A.id_A=tabela_B.id_A ORDER BY tabela_A.id"
    ;
  3. ?>


oczywiscie informatycy maja jakies skroty do tych zapytan musisz to sobie sam poszukac

Nastepnie mozesz ale nie musisz przed selectem stworzyc zmienna $wynik na zasadzie

  1. <?php
  2. $wynik = 0;
  3. ?>


Zapewne jakos nazwales wiersze tabeli B. Zatem najlatwiej zrobic wynik dla kazdego wiersza osobno.

  1. <?php
  2. $wynika = 0;
  3. ?>

  1. <?php
  2. $wynikb = 0;
  3. ?>

  1. <?php
  2. $wynikc = 0;
  3. ?>

.
.
.
etc.

  1. <?php
  2. $wynika = $wynika + row[nazwawiersza] - row[nazwawiersza] - row[nazwawiersza]<br>';
  3. $wynikb = $wynikb + row[nazwawiersza] - row[nazwawiersza] - row[nazwawiersza]<br>';
  4. ?>

etc.

I nastepnie echo lub print owych wynikow. Pewnie mozna to zrobic za pomoca funkcji, ale poki co to na razie wybiega poza zakres mojej wiedzy

Z powazaniem
zicher
ketna
Mam wrażenie, że to nie za bardzo na temat.

Ujmę to inaczej - jeden produkt może mieć przypisanych kilka atrybutów.
Z pętli dostaję wszystkie produkty, ale potrzebuję wewnątrz tej pętli dodać drugą pętlę,
żeby wyciągnąć atrybuty danego produktu (chyba, że można to osiągnąć inaczej).

a więc przykładowe wyniki wyglądałyby tak:

237 produkt_abc atrybut1 atrybut2
239 produkt_xyz atrybut1 atrybut2 atrybut3
240 produkt_xxl atrybut1

i teraz pytanie jak to zrobić.

P.S. oczywiście, że tabela_B ma swoje unikalne id, ale nie było ono potrzebne w tym przykładzie.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.