Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL 5] Unknown column (..) in 'on clause', Po przejściu z mysql 4 na 5
eXtreme
post 2.01.2006, 15:31:59
Post #1





Grupa: Zarejestrowani
Postów: 56
Pomógł: 0
Dołączył: 14.06.2002

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


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ć.

Ten post edytował eXtreme 2.01.2006, 15:51:15
Go to the top of the page
+Quote Post
lemming
post 3.01.2006, 08:16:43
Post #2





Grupa: Zarejestrowani
Postów: 79
Pomógł: 0
Dołączył: --
Skąd: Gdańsk

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


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
Go to the top of the page
+Quote Post
eXtreme
post 3.01.2006, 15:00:48
Post #3





Grupa: Zarejestrowani
Postów: 56
Pomógł: 0
Dołączył: 14.06.2002

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


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

Ten post edytował eXtreme 4.01.2006, 20:23:48
Go to the top of the page
+Quote Post
rachwal
post 19.07.2007, 09:25:46
Post #4





Grupa: Zarejestrowani
Postów: 71
Pomógł: 0
Dołączył: 29.08.2002
Skąd: Wrocław

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


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.


--------------------
pozd.
Go to the top of the page
+Quote Post
osiris
post 19.07.2007, 14:05:41
Post #5





Grupa: Zarejestrowani
Postów: 121
Pomógł: 15
Dołączył: 19.07.2007

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


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
Go to the top of the page
+Quote Post
eXtreme
post 19.07.2007, 15:25:29
Post #6





Grupa: Zarejestrowani
Postów: 56
Pomógł: 0
Dołączył: 14.06.2002

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


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.
Go to the top of the page
+Quote Post
rachwal
post 23.07.2007, 08:45:35
Post #7





Grupa: Zarejestrowani
Postów: 71
Pomógł: 0
Dołączył: 29.08.2002
Skąd: Wrocław

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


@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.

Ten post edytował rachwal 23.07.2007, 08:46:54


--------------------
pozd.
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: 20.07.2025 - 10:35