Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> LEFT JOIN i WHERE
spyro
post 15.10.2008, 11:31:26
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
MajareQ
post 15.10.2008, 11:39:32
Post #2





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

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


Kod pierwszy działa prawidłowo?

a może zastosowałbyś OR? ;p
Go to the top of the page
+Quote Post
phpion
post 15.10.2008, 11:44:15
Post #3





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




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.
Go to the top of the page
+Quote Post
spyro
post 15.10.2008, 12:39:16
Post #4





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

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


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?
Go to the top of the page
+Quote Post
MajareQ
post 15.10.2008, 13:07:30
Post #5





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
czachor
post 15.10.2008, 13:17:57
Post #6





Grupa: Zarejestrowani
Postów: 897
Pomógł: 40
Dołączył: 16.12.2003
Skąd: Warszawa

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


Hm, a nie przejdzie zamiast 'ON (u.user_id = d.user_id)':
'USING (user_id)'?


--------------------
how many SEO experts does it take to change a light bulb,lightbulb,light,bulb,lamp,lighting,switch,sex,xxx
5-Reasons-why-you-should-NEVER-fix-a-computer-for-free
Go to the top of the page
+Quote Post
phpion
post 15.10.2008, 13:20:48
Post #7





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

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 Wersja Lo-Fi Aktualny czas: 13.06.2025 - 09:34