الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

جملة Insert معقدة شويه بسبب شروط معينة عند التسجيل

بدأه asm-soft في 26 أغسطس 2008 · 3 رد · 1,055 مشاهدة · في قواعد بيانات MySQL
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله وبركاتة

إيه الأخبار يا شباب ؟

فى مشكلة عندى بجدول عاوز أعمل إدخال بيانات به بطريقة سريعة دون التأكد من وجود السجل و لكن هذا الجدول له طبيعة خاصة بمعنى أنه جدول يحتوى على عدد رهيب من السجلات و يزداد يوم بعد يوم بالألفات يعنى ممكن فى يوم واحد يتم إدخال فوق 50000 سجل :wacko: و لذلك لم أصنع به حقل مفتاح (PRIMARY Key) و لكن السجلات تعتمد على حقلين واحد منهم عبارة عن تاريخ و الثانى عبارة عن رقم

بمعنى أن ممكن أن يكون هناك 100 سجل بتاريخ واحد و لكن كل سجل منهم له رقم مختلف ولا يجب أن يتشاركم فى الرقم

ولكن

ممكن أن يكون هناك 100 سجل أخرين بتاريخ مختلف يحملان نفس أرقام 100 سجل السابقين و هنا لا يوجد مشكلة فى تكرار الرقم بين 100 سجل الأولى و 100 سجل الثانية لأن 100 سجل الأولى بتاريخ مختلف عن 100 سجل الثانية

و هذا هو طبيعة السجلات التى أعتمد عليها و هى بتجيلى كده و العيب فى البرامج إللى خارجة منها و قاعدة البيانات بتاعتها وأنا لازم أمشى معاها أساساً فقاعده البيانات هذة لا يهمها هل السجل موجود أم لا أما فى قاعدة البيانات عندى فيهمنى أمر التكرار

فهل يوجد طريقة يتم إدخال بها السجلات و تجاهل المكرر ولا يتم تسجيلة إذ تطابق الحقلين (التاريخ و الرقم) سوياً علماً بأن كلمة IGNORE يتم تطبيقها إذا كان هناك حقل PRIMARY Key أو INDEX أو UNIQUE و هنا لا يوجد أى من هذة الحقول :blush:

أنا مشعاوز أعمل إدخال و بعدين أمسح المكرر لأن طريقة مسح المكرر إللى لقتها فى نتيجة البحث على النت هى عبارة عن إنشاء جدول جديد و نقل البيانات إليه دون تكرار ثم مسح القديم و إعادة تسمية الجدول الجديد و طبعاً طريقة الإعتماد على مسح السجلات المكررة دى طريقة غبية جداً وخصوصاً لما يبقى عدد السجلات كبيييييييير جداً كما أننى لم أتوصل إلى طريقة أخرى للمسح لذلك أريد أن أمنع التكرار من البداية

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

كل واحد يأتى بما عنده ...... انتو سامعين :angry:

forum-signature-01.gif
#2

امم لو كنت فهمتك جيد.. عندى اقتراح

لم تسجلهم فى حقلين ؟

سجلهم فى حقل واحد يحتوى على نص يجمع التاريخ والرقم ومن هنا ال DBMS من نفسة سيمنع التكرار بعد ذلك هناك طريقين :-

1) لا مشكله عندك فى هذة الطريقة = لا توجد عمليات كثيرة على كل حقل منفرد

2) هناك عمليات يومية كثيرة على كل حقل منفرد ومن هنا ممكن تنفذ شىء بسيط

انشىء جدول اخر يحتوى على الحقلين ثم عليك بالتالى :-

ا ) تحاول اضافتة الى الجدول الاول ان تم اضافتة اضفة للثانى

ب) ان لم يتم اضافتة لا تضفة للثانى

#3

بالفعل فهمتى صح و بالفعل فكرت فى جمع التاريخ و الرقم ولكن الرقم سيصبح كبيييييير جداً و شويه Bigint هيقولى حرام عليك

وفكرت أجعلة Text و هيكون هو الحقل الوحيد من نوع Text و باقى الحقول إما رقم أو تاريخ ولكن فى هذة الحالة كل رقم يأخذ byte و لو حسبت كمية السجلات يبقى فى خلال عام واحد ويمكن أقل ستصبح قاعدة البيانات أكبر من قاعده المنتدى هنا بكثير :unsure:

أما بخصوص العمليات اليومية فهى كثيرة جداً ولكن كأستعلام فقط فالسجل الذى يتم تسجيلة لا يتم تعديلة أبداً وكما ذكرت الحقلين نعتبرهم Key و لكن لا أستطيع أن أجعلهم Key لأن مممكن أن يتكرر الرقم أو يتكرر التاريخ

المشكلة محلولة بسبب انى صممت وظيفة الإدخال فى Threading منفصل مما ادى لتصميم Progress لبيان الإدخال للعميل لكن العميلة بتأخذ وقت كبير و أريد طريقة أسرع للإدخال لأن كل إختبار للتأكد من وجود السجل تبطئ من العملية كلها :(

عموماً أنا اتصلت بالجهه المسؤلة علشان أستفسر عن الوضع هناك و سيأتى الخبر غداً إن شاء الله و بعدها نشوف الوضع

forum-signature-01.gif
#4

المشكلة تم حلها لأن جالى تأكيد بأن الرقم لا يتكرر أبداً لذلك سأحولة إلى UNIQUE

شكراً أخى ASDen على تعاونك معى

forum-signature-01.gif

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…