Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: LEFT JOIN i WHERE
Forum PHP.pl > Forum > Bazy danych > MySQL
spyro
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
MajareQ
Kod pierwszy działa prawidłowo?

a może zastosowałbyś OR? ;p
phpion
Brakuje Ci połączenia między aliasami 'u' oraz 'd' w wyniku czego otrzymujesz iloczyn kartezjański (każdy z każdym). Musisz dodać jeszcze (strzelam) u.user_id=d.user_id w warunku.
spyro
Sporo poprzerabiałem i wygląda to tak:
Kod
                $sql = 'SELECT u.*, d.pf_is_partner as is_partner, d.pf_is_partner_ver as is_partner_veryfied
                    FROM ' . USERS_TABLE . ' u
                    LEFT JOIN '.PROFILE_FIELDS_DATA_TABLE.' d
                    ON (u.user_id = d.user_id)';

I wyskakuje mi błąd: Column: 'user_id' in where clause is ambiguous [1052]
blinksmiley.gif questionmark.gif?
MajareQ
http://translate.pl/odp.php4?direction=1&word=ambiguous

według mnie błąd siedzi tutaj: ON (u.user_id = d.user_id)
czachor
Hm, a nie przejdzie zamiast 'ON (u.user_id = d.user_id)':
'USING (user_id)'?
phpion
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. ?>
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.