MySQL 5 множественный синтаксис JOIN не работает в MySQL 4 - PullRequest
1 голос
/ 21 марта 2010

текущий запрос SQL отлично работает локально на MAMP 1.8.4 под управлением MySQL 5.1.37.

  SELECT 
    EL.log_actions, EL.log_date, EL.log_value, EL.log_type,    
    EA.admins_name, 
    EU.users_name, EU.users_matric
  FROM events_log EL
  JOIN events_users EU
    USING (users_id)          
  JOIN events_admins EA
    USING (admins_id)
  ORDER BY EL.log_id DESC
  LIMIT 0, 10

Однако, когда я перевожу этот запрос на рабочий сервер, на котором работает стандарт MySQL 4.1.22, произошла следующая ошибка (независимо от того, есть ли в записи данные).

A Database Error Occurred

Error Number: 1054

Unknown column 'sceclub_exclaim2007.EU.admins_id' in 'on clause'

SELECT EL.log_actions, EL.log_date, EL.log_value, EL.log_type, 
EA.admins_name, EU.users_name, EU.users_matric 
FROM events_log EL 
JOIN events_users EU USING (users_id) 
JOIN events_admins EA USING (admins_id) 
ORDER BY EL.log_id 
DESC LIMIT 0, 20

Это основано на CodeIgniter 1.7.2, и при производстве, и при разработке используется один и тот же набор базы данных.

Таблицы базы данных

events_users: users_id users_name users_credits 
  users_matric users_redeem

events_admins: admins_id admins_email admins_name 
  admins_pass admins_date admins_modified admins_last_login 

events_attendance: attendance_id users_id events_id

events_events: events_id events_name events_venue events_time 
  events_desc events_pass 

events_log:log_id admins_id log_actions log_date log_value 
  users_id log_type

Я новичок в MySQL, поэтому я не знаю о какой-либо разнице в версиях или о том, что может быть причиной, спасибо заранее!

Попробовал поиск в Google для MySQL4, но безрезультатно. Также пытался использовать

  SELECT 
    EL.log_actions, EL.log_date, EL.log_value, EL.log_type,    
    EA.admins_name, 
    EU.users_name, EU.users_matric
  FROM events_log EL
  JOIN events_users EU
    where EL.users_id = EU.users_id
  JOIN events_admins EA
    USING EL.admins_id = EA.admins_id
  ORDER BY EL.log_id DESC
  LIMIT 0, 10

Но тогда я получил ошибку как в производстве, так и в разработке.

Произошла ошибка базы данных

Номер ошибки: 1064

У вас ошибка в синтаксисе SQL; проверьте руководство, которое соответствует ваша версия сервера MySQL для правильный синтаксис для использования рядом с 'JOIN events_admins EA USING EL.admins_id = EA.admins_id ORDER BY 'в строке 8

ВЫБРАТЬ EL.log_actions, EL.log_date, EL.log_value, EL.log_type, EA.admins_name, EU.users_name, EU.users_matric FROM events_log EL ПРИСОЕДИНИТЬСЯ к events_users EU, где EL.users_id = EU.users_id ПРИСОЕДИНИТЬСЯ к events_admins EA ИСПОЛЬЗОВАТЬ EL.admins_id = EA.admins_id ЗАКАЗ ПО EL.log_id DESC LIMIT 0, 20

Если вы можете указать мне некоторые ресурсы, где я могу прочитать больше о синтаксисе MySQL 4 для достижения того же эффекта, что и я с синтаксисом MySQL 5, пожалуйста, сообщите мне.

Еще раз спасибо!

Ответы [ 2 ]

2 голосов
/ 21 марта 2010
 SELECT 
    EL.log_actions, EL.log_date, EL.log_value, EL.log_type,    
    EA.admins_name, 
    EU.users_name, EU.users_matric
  FROM events_log AS EL
  JOIN events_users AS EU
    ON EL.users_id = EU.users_id
  JOIN events_admins EA
    ON EL.admins_id = EA.admins_id
  ORDER BY EL.log_id DESC
  LIMIT 0, 10
1 голос
/ 21 марта 2010

Второй запрос, который вы пробовали, должен иметь ключевое слово ON, а не USING или where:

SELECT 
  EL.log_actions, EL.log_date, EL.log_value, EL.log_type,    
  EA.admins_name, 
  EU.users_name, EU.users_matric
FROM events_log EL
JOIN events_users EU
  ON EL.users_id = EU.users_id
JOIN events_admins EA
  ON EL.admins_id = EA.admins_id
ORDER BY EL.log_id DESC
LIMIT 0, 10

Посмотрите синтаксис для JOIN , если вы все еще не уверены, использовать ли WHERE, ON или USING.

...