سؤال

ببساطة: لدي جدول مع عمودين: واحد هو اسم المستخدم والآخر هو لقب. لدي جدول آخر حيث لدي عمودين: واحد هو اسم المستخدم والآخر هو countnicknames.

أريد أن يحتوي CountNickNames على عدد الأسماء المستعارة التي يتمتع بها كل مستخدم (وكلما قمت بإدخال لقب جديد إلى Table1 ، سيتم تحديث القيمة بموجب Table2.CountNickNames تلقائيًا.

هل يمكنك تدوين كيفية إنشاء الجدول الثاني للرجوع إلى الجدول الأول؟

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

المحلول

لماذا لا تحسب فقط عندما تحتاج إلى القيمة؟

نصائح أخرى

أريد أن يحتوي CountNickNames على عدد الأسماء المستعارة التي يتمتع بها كل مستخدم (وكلما قمت بإدخال لقب جديد إلى Table1 ، سيتم تحديث القيمة بموجب Table2.CountNickNames تلقائيًا.

هذا هو ما ستفعله وجهة النظر بشكل فعال.

CREATE OR REPLACE VIEW user_nickname_count AS
    SELECT t.username,
           COUNT(*) 'countNicknames'
      FROM TABLE t
  GROUP BY t.username

منظر تبدو مثل الجدول ، لذلك أنت تنضم إليها إذا لزم الأمر. والنفقات العامة الوحيدة هي أنه بفعالية مجرد استعلام محدد يتم تشغيله - يتم حساب القيم عند الطلب ، بدلاً من الاضطرار إلى إعداد المشغلات.

للمزيد من معلومات عن المشاهدات ، راجع الوثائق.

حسنًا ، اقتراح @lasse أفضل ، ولكن ... هناك اثنين آخرين خيارات أخرى ...

  1. هل لدى MySQL مشغلات؟ إذا كان الأمر كذلك ، فستضيف إدراجًا أو تحديثًا أو حذف المشغل على الجدول الأول الذي يتم تحديثه (أو يقوم بإدراج أو حذف على ذلك) .

    إنشاء Trigger Nicknamecounttrig على nicknameCounttable لإدراج ، تحديث ، حذف كتحديث nct set countnicknames = (حدد العد () من FirstTable حيث الاسم = nct.name) من NicknameCounttable NCT حيث الاسم في (حدد اسمًا متميزًا من الاتحاد المحدد ، حدد اسمًا متميزًا من المحذوف)------------------ -------------------------- إدراج Nicknamecounttable (الاسم ، countnicknames) حدد الاسم ، العد () من Firsttable ft حيث لا يوجد (حدد * من nicknamecounttable حيث الاسم = ft.name)----- هذا اختياري -------------------- --- حذف nicknamecounttable حيث countnicknames = 0

  2. هل لدى MySQL وجهات نظر فهرسة (أو بعض ما يعادلها)؟ على ما يبدو لا - لذلك لا تهتم بهذا الخيار ....

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