سؤال

بالنظر إلى حقل قاعدة بيانات يسمى "widget_ids"، يحتوي على بيانات مثل "67/797/124/" أو "45/"، حيث تكون الأرقام مفصولة بشرطة مائلة عن widget_ids...كيف يمكنك إصدار بيان تحديث باستخدام SQL يقول:"إذا كانت widget_ids الخاصة بالصف ذي المعرف X تحتوي على النص "somenumber/"، فلا تفعل شيئًا، وإلا قم بإلحاق "somenumber/" بقيمته الحالية"

هل يمكنك فعل شيء كهذا باستخدام SQL، أو بشكل أكثر تحديدًا، sqlite؟هل هذا شيء من الأفضل القيام به في البرنامج لسبب ما أم أن هناك دعمًا لـ "if-then" مثل بناء الجملة في SQL؟

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

المحلول

التحديثات تشبه نوعًا ما if-thens نفسها، وهناك أيضًا دعم if-then من نوع ما في معظم تطبيقات SQL.الحل البسيط قد يكون:

update <tablename>
  set widget_id = widget_id + "somenumber/"
  where row_id = X
    and widget_id not like "%/somenumber/%"
    and widget_id not like "somenumber/%";

نصائح أخرى

أولاً، تخلص من القائمة المفصولة بالرموز.استخدم جدولًا آخر، بمعرف عنصر واجهة مستخدم واحد لكل صف.

CREATE TABLE ThingieWidgets (
  thingie_id INT REFERENCES Thingies,
  widget_id INT REFERENCES Widgets,
  PRIMARY KEY(thingie_id, widget_id)
);

املأ الجدول بالقيم من القائمة المفصولة بشرطة مائلة:

INSERT INTO ThingieWidgets (thingie_id, widget_id)
  VALUES (1234, 67), (1234, 797), (1234, 124);

يمكنك الآن اختبار ما إذا كان Thingie 1234 يشير إلى القطعة 45:

SELECT * FROM ThingieWidgets
WHERE thingie_id = 1234 AND widget_id = 45;

يمكنك محاولة الإدراج والاسترداد في حالة وجود خطأ مكرر في المفتاح:

INSERT INTO ThingieWidgets (thingie_id, widget_id)
  VALUES (1234, 45);
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top