Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> LEFT JOIN i WHERE
spyro
post
Post #1





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 21.03.2008

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


Kod:
Kod
$sql = "SELECT u.user_id
               FROM " . USERS_TABLE . " u
               WHERE u.user_type IN (" . USER_NORMAL . ', ' . USER_FOUNDER . ")
               ORDER BY $order_by";


Natomiast jeżeli dodam:
Kod
$sql = "SELECT u.user_id, ud.user_id, d.pf_is_partner as is_partner, d.pf_is_partner_ver as is_partner_veryfied
               FROM " . USERS_TABLE . " u,
               ". PROFILE_FIELDS_DATA_TABLE ." d
               LEFT JOIN ". PROFILE_FIELDS_DATA_TABLE ." ud
                   ON (d.user_id = ud.user_id)
               WHERE u.user_type IN (" . USER_NORMAL . ', ' . USER_FOUNDER . ")
               ORDER BY $order_by";

Źle bierze pod uwagę ORDER BY... Co robię źle?
PS. Wersja MySQL: 4.0.16

Ten post edytował spyro 15.10.2008, 12:01:27
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
MajareQ
post
Post #2





Grupa: Zarejestrowani
Postów: 382
Pomógł: 22
Dołączył: 21.05.2007
Skąd: Elbląg

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


http://translate.pl/odp.php4?direction=1&word=ambiguous

według mnie błąd siedzi tutaj: ON (u.user_id = d.user_id)
Go to the top of the page
+Quote Post
phpion
post
Post #3





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




Cytat(MajareQ @ 15.10.2008, 14:07:30 ) *
według mnie błąd siedzi tutaj: ON (u.user_id = d.user_id)

Mylisz się.

@spyro:
Wydaje mi się, że kod, który podałeś nie powoduje opisanego przez Ciebie błędu. Problem z "ambiguous column" pojawia się w momencie kiedy chcesz wyświetlić wartości z danej kolumny w przypadku, gdy występuje ona pod taką samą nazwą w kilku tabelach. Przykładowo:
  1. <?php
  2. $sql = 'SELECT user_id
  3.                    FROM ' . USERS_TABLE . ' u
  4.                    LEFT JOIN '.PROFILE_FIELDS_DATA_TABLE.' d
  5.                    ON (u.user_id = d.user_id)';
  6. ?>

Spowoduje błąd, ponieważ nie wiadomo o które pole 'user_id' chodzi - czy oto z tabeli użytkowników, czy o to z tabeli profili (pomijam fakt, że są to te same wartości). Receptą na takie zjawisko będzie jawne określenie, o którą kolumnę chodzi czyli zamiast 'user_id' np. 'u.user_id':
  1. <?php
  2. $sql = 'SELECT u.user_id
  3.                    FROM ' . USERS_TABLE . ' u
  4.                    LEFT JOIN '.PROFILE_FIELDS_DATA_TABLE.' d
  5.                    ON (u.user_id = d.user_id)';
  6. ?>
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: 11.10.2025 - 09:49