سؤال

يعمل استعلام 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-Standard ، حدث الخطأ التالي (سواء كانت هناك بيانات في الإدخال).

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 ، لذلك لست على دراية بأي فرق في الإصدارات أو ما الذي يمكن أن يكون سببًا ممكنًا ، شكرًا لك مقدمًا!

حاولت googling ل 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 الخاص بك للحصول على بناء الجملة الأيمن لاستخدامه بالقرب من "events_admins ea باستخدام el.admins_id = ea.admins_id Order by 'at line 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 el events_users eu حيث el.ed = eu.users_id evens_admins events. ea.admins_id order بواسطة EL.LOG_ID DESC LIMIT 0 ، 20

إذا تمكنت من توجيهي إلى بعض الموارد حيث يمكنني قراءة المزيد على بناء الجملة MySQL 4 لتحقيق نفس التأثير كما فعلت مع بناء الجملة MySQL 5 ، يرجى إعلامي.

شكرًا لك مرة أخرى!

هل كانت مفيدة؟

المحلول

 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

نصائح أخرى

يجب أن يكون الاستعلام الثاني الذي جربته 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

ألق نظرة على بناء الجملة انضم إذا كنت لا تزال غير متأكد من استخدام WHERE, ON أو USING.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top