حقل تحديث Sqlite إذا كان يحتوي على
سؤال
بالنظر إلى حقل قاعدة بيانات يسمى "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);