سؤال

هذه المشكلة تحيرني:

BEGIN;
INSERT INTO sub_users(user_id, email) 
SELECT user_id FROM users WHERE email='someemail@email.com', '$email';
COMMIT;

عادةً، لدي كشوفات متعددة في تلك المعاملات، لكنني قمت بإزالتها للتوضيح.

أحصل على هذا الخطأ:

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your
MySQL server version for the right syntax to use near ' 'test@email.com'' at line 1

أنا أستخدم إصدار MySQL 5.1.36

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

المحلول

مشكلتان في كلامك:

  1. أنت لا تحدد بريدًا إلكترونيًا لإدراجه (المعرف فقط)
  2. أنت تستخدم '=' بدلاً من في بند.

يجب أن يكون شيء مثل:

INSERT INTO sub_users(user_id, email)
 SELECT user_id, email FROM users
  WHERE email IN ('someemail@email.com', 'test@email.com');

بدلاً من.

تحديث (بناء على التعليق)

INSERT INTO sub_users(user_id, email)
 SELECT user_id, 'test@email.com' FROM users
  WHERE email = 'someemail@email.com';

نصائح أخرى

لديك خطأين على الأقل يمكنني رؤيتهما:

  1. أنت تحاول إدراج عمودين من البيانات (user_id و email) ولكن تحديد عمود واحد فقط (user_id) من النصف الثاني من INSERT INTO ... SELECT.يجب عليك تحديد نفس عدد الأعمدة التي تحاول إدراجها، وترتيب الأمور.
  2. لديك خطأ في بناء الجملة في المسند الخاص بك SELECT.أعتقد أنك تريد استخدام:

    WHERE email IN ('email1@foo.com', 'email2@bar.com')

أو ما يعادلها:

WHERE email = 'email1@foo.com'
   OR email = 'email2@bar.com'
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top