Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL 5] Unknown column (..) in 'on clause'
Forum PHP.pl > Forum > Bazy danych > MySQL
eXtreme
Witajcie, mam pewien problem z mysqlem w wersji 5. Poprzenio używałem którejśtam 4.1, ale z przyczyn niezależnych ode mnie (:/) na localhoście znalazł się mysql 5.0.17. Po tej zmianie przestało działać zapytanie SQL, które poprzednio chodziło bez zająknięcia. Oto ono:

  1. SELECT u.*, ue.*, (...)
  2. FROM `users` u, `user_extra` ue
  3. LEFT JOIN `groups` g ON(g.`group_id` = u.`user_group_id`)
  4. LEFT JOIN `ranks` r ON(r.`rank_for_id` = u.`user_group_id` AND r.`rank_type` = "group")
  5. LEFT JOIN `ranks` rr ON(rr.`rank_for_id` = u.`user_id` AND rr.`rank_type` = "user")
  6. WHERE u.`user_isactive` = 1 AND u.`user_login` = '6928e84932543506563e596556384bb327b4dc98' AND ue.`ue_id` = u.`user_id` LIMIT 1


A zwracany błąd to:

Cytat
Native Error: Unknown column 'u.user_group_id' in 'on clause'


Tknięty jakimś przeczuciem rzuciłem się do phpmyadmina, ale okazało się, że to pole jest. Co jeszcze dziwniejsze, błąd ten zwracany jest jedynie dla ON - przy SELECT albo WHERE wszystko jest OK.

Próbowałem coś googlać, co i faktycznie znalazłem cosik podobnego:

http://www.symfony-project.com/forum/index.php/t/323/

Macie jakies pomysły co z tym fantem zrobić?

PS. Coś tutaj system kolorowania składni SQLa podzielił mi `users` u, `user_extra` ue do osobnej lini po `users` - wypadałoby to poprawić.
lemming
Ja używam vertrigo serv gdzie w najnowszej wersji jest mysql 5.0.17 i też mam błąd z ON :/ na mysql 4.x działało bez zarzutu. Może to jest bug w mysql a może zrobili to specjlanie, tak czy inaczej będe musiał wrócić do starszego mysql
eXtreme
Nie sądzę dlaczego niby mieliby to zrobić specjalnie. :/ Co im wadzi jakieś pole (jedno!) w ON. Bug i tyle.

[edyta]
No cóż.. nic na buga poradzić nie mogłem więc zainstalowałem sobie dwa mysqle - 4.1.16 i 5.0.18. Póki co to jedyne rozwiązanie. winksmiley.jpg
rachwal
Sorry za odgrzewanie ale moze sie komus przyda ...

Cytat(eXtreme @ 2.01.2006, 16:31:59 ) *
  1. SELECT u.*, ue.*, (...)
  2. FROM `users` u, `user_extra` ue
  3. LEFT JOIN `groups` g ON(g.`group_id` = u.`user_group_id`)
  4. LEFT JOIN `ranks` r ON(r.`rank_for_id` = u.`user_group_id` AND r.`rank_type` = "group")
  5. LEFT JOIN `ranks` rr ON(rr.`rank_for_id` = u.`user_id` AND rr.`rank_type` = "user")
  6. WHERE u.`user_isactive` = 1 AND u.`user_login` = '6928e84932543506563e596556384bb327b4dc98' AND ue.`ue_id` = u.`user_id` LIMIT 1


Takie zapytanie nie przejdzie w MySQL5, brakuje "()" :

  1. (...) FROM (`users` u, `user_extra` ue) (...)


Sprawa jest gdzies na stronach MySQL'a wyjasniona.
osiris
tez zetknalem sie z tym bledem przy przechodzeniu na mysql5
rozwiazanie jest banalne
zmien kolejnosc tabel w klauzli FROM tak zeby tabela z ktorej bierzesz klucz do zlaczenia dodatkowych tabel byla na koncu, czyli w Twoim przypadku:

  1. FROM `user_extra` ue, `users` u
eXtreme
Dawno już to rozwiązałem. I mam lepszą metodę. Wystarczy po prostu wszystkie tabele z FROM objąć w nawias:

  1. FROM (`tabela1` t1, `tabela2` t2 ...)
  2. LEFT JOIN...

I po kłopocie.
rachwal
@osiris : zamiana kolejnosci tabel nic tu nie pomoze jesli klucze "bierze" sie z obydwu tabel jednoczesnie.
@eXtreme : no to powtorzyles moja odpowiedz tongue.gif

No i oczywiscie to nie sa "metody" tylko zblizenie sie do standardow SQL'a, jak mowia chlopcy z MySQL'a.
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-2024 Invision Power Services, Inc.