Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MySQL]Złączenia LEFT JOIN
Forum PHP.pl > Forum > Przedszkole
andrzejlechniak
Hej. Piszę jeszcze w sprawie skryptu ze sklepem. Mam taki kod:
  1. $sql = 'SELECT o.orderdet_ordernum oorderdet_ordernum, o.orderdet_qty oorderdet_qty, o.orderdet_prodnum oorderdet_prodnum, c.customers_custnum ccustomers_custnum, c.customers_firstname ccustomers_firstname, c.customers_lastname ccustomers_lastname, c.customers_email ccustomers_email, p.products_name pproducts_name, p.products_prodnum pproducts_prodnum, p.products_price pproducts_price FROM customers c, products p '.
  2. 'LEFT JOIN orderdet o ON o.orderdet_prodnum = c.customers_custnum '.
  3. 'LEFT JOIN orderdet o ON o.orderdet_prodnum = p.products_prodnum '.
  4. 'ORDER BY p.products_prodnum ASC';
  5. $result = mysql_query($sql) or die(mysql_error());


Chodzi o to, że wyskakuje mi błąd: Not unique table/alias: 'o'.
I chcę dołączyć trzecią tabelę 'customers' do dwóch istniejących - mianowicie to 'orderdet' i do 'products'. Aby wyniki przedstawiały się mniej - więcej tak:
Id zamówienia (tab. Orderdet) - kupujący (tab. customers) - produkt (tab. products)
Dwie już połączyłem, ale męczę się z tym aby dołączyć trzecią
Czy ktoś wie, co tu jest nie tak?

Jeśli wiecie jak, pomóżcie, pozdrawiam
lord2105
  1. FROM customers c, products p '.


a gdzie kolejna tabela z aliasem o?
Mephistofeles
  1. SELECT o.orderdet_ordernum oorderdet_ordernum, o.orderdet_qty oorderdet_qty, o.orderdet_prodnum oorderdet_prodnum, c.customers_custnum ccustomers_custnum, c.customers_firstname ccustomers_firstname, c.customers_lastname ccustomers_lastname, c.customers_email ccustomers_email, p.products_name pproducts_name, p.products_prodnum pproducts_prodnum, p.products_price pproducts_price FROM customers c, products p
  2. LEFT JOIN orderdet o ON o.orderdet_prodnum = c.customers_custnum
  3. LEFT JOIN orderdet o ON o.orderdet_prodnum = p.products_prodnum
  4. ORDER BY p.products_prodnum ASC

Masz 2 razy joina z orderdet. Zamiast tego użyj AND/OR przy ON, albo zmień aliasy.
andrzejlechniak
Chyba coś namotałem, tzn. rozumiem, że ma być raczej tak:

  1. LEFT JOIN orderdet o ON o.orderdet_prodnum = c.customers_custnum AND orderdet o ON o.orderdet_prodnum = c.customers_custnum

Czy jak?

A alias o? tabela orderdet jest zapisana jako 'o'. O co chodzi?
Mephistofeles
Nie jestem pewien, co chcesz osiągnąć, ale raczej tak:
  1. LEFT JOIN orderdet o ON o.orderdet_prodnum = c.customers_custnum OR o.orderdet_prodnum = p.products_prodnum
andrzejlechniak
Zmieniłem tamto, napisałem coś takiego:

  1. $sql = 'SELECT o.orderdet_ordernum oorderdet_ordernum, o.orderdet_prodnum oorderdet_prodnum, c.customers_custnum ccustomers_custnum, p.products_prodnum pproducts_prodnum '.
  2. 'FROM orderdet o, customers c, products p '.
  3. 'WHERE c.customers_custnum = o.orderdet_ordernum AND o.orderdet_prodnum = p.products_prodnum';
  4. $result = mysql_query($sql) or die(mysql_error());


i problem w tym, że pokazuje mi 3 wyniki, a klientów w bazie mam dwóch, o co chodzi?
CuteOne
Dwóch klientów a trzy wyniki.. eee atak klonów ?

widać nadal masz coś nie tak z zapytaniem... zawsze możesz użyć DISTINCT
andrzejlechniak
OK, na razie użyłem DISTINCT, ale pytanie, czy ono nie ogranicza wyświetlania danych, np. że wyświetli się nie więcej niż 'n' wyników (oczywiście nie ma klauzuli LIMIT)? Wciąż jednak jest coś nie tak
CuteOne
DISTINCT nie pozwala na dublowanie wyników - jeżeli nadal jest coś nie tak to powiedz co dokładnie..
andrzejlechniak
Dziękuje wszystkim za pomoc, problem załatwiłem. Działa... smile.gif
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.