Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Wiązanie wierszy z dwóch tabel
ketna
post
Post #1





Grupa: Zarejestrowani
Postów: 29
Pomógł: 0
Dołączył: 28.03.2005

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


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

Ten post edytował ketna 4.12.2006, 17:26:49
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 2)
zicher
post
Post #2





Grupa: Zarejestrowani
Postów: 35
Pomógł: 0
Dołączył: 28.09.2005

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


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
Go to the top of the page
+Quote Post
ketna
post
Post #3





Grupa: Zarejestrowani
Postów: 29
Pomógł: 0
Dołączył: 28.03.2005

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


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.

Ten post edytował ketna 4.12.2006, 18:55:56
Go to the top of the page
+Quote Post

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: 20.08.2025 - 04:28