ما هو بناء الجملة للحذف متعدد المائدة على قاعدة بيانات MySQL باستخدام العقيدة؟

StackOverflow https://stackoverflow.com/questions/2247905

سؤال

استخدام عقيدة, ، أحاول حذف السجلات في جدول واحد يعتمد على البيانات التي تم جمعها من جداول متعددة.

"الشركات" هي جدول جمعية ربط "الشركات" إلى "مجموعات". أريد حذف جميع السجلات في هذا الجدول مرتبط بشركة محددة، مع وجود تقييد أن سجلات "الشركات" فقط المرتبطة بمجموعة "العامة" سيتم حذفها.

إذا كنت أكتب هذا في SQL نقي، فسوف تبدو مثل هذا:

DELETE companies_groups
FROM companies_groups, groups
WHERE companies_groups.companyID = 7
AND companies_groups.groupID = groups.id
AND groups.groupType = 'public'

ما هو ما يعادل في العقيدة؟ لقد كنت تكافح وتجريب لمدة ساعة أو نحو ذلك.

في الوقت الحالي، لدي هذا:

$query = Doctrine_Query::create()
  ->delete('Company_group cg')
  ->from('Company_group cg, Group g')
  ->where( "cg.companyID = ? AND g.groupType = 'public' AND g.id = cg.groupID ", array( $companyID ) );

(نماذج عقيدتي هي "company_group" لجدول "الشركات" و "مجموعة" جدول "المجموعات")

التي تنتج هذا SQL:

DELETE FROM companies_groups, groups WHERE (companyid = ? AND grouptype = 'public' AND id = groupid)

يمكنك أن ترى أن SQL الذي تم إنشاؤه مفقود "الشركات" بين الحذف ومن ثم يتم إسقاط التصفيات (المعنى "المعرف" غامضا).

اسمحوا لي أن أعرف إذا كان هناك أي معلومات إضافية يمكنني تقديمها ستكون مفيدة.

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

المحلول

حلها. بدلا من محاولة بناء انضمام نفسي، استخدمت عملية استقامة استعلامية ولم أحاول إجبار العقيدة على إنشاء SQL بطريقة محددة.

لأي شخص آخر يحتاج إلى فعل شيء من هذا القبيل، وهنا هو ما انتهى بالعمل:

$query = Doctrine_Query::create()
  ->delete('Company_group')
  ->where( "companyID = ?", array( $companyID ) )
  ->addWhere( "groupID IN (SELECT g.id FROM Group g WHERE g.groupType = 'public')" );

هتافات.

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