استخدام ال OR في SQL قد يبدو بسيطًا من حيث الكتابة، لكنه قد يؤدي إلى نتائج غير متوقعة إذا لم يُستخدم بشكل دقيق.
مثال: لنفترض أنك تريد جلب المستخدمين الذين لديهم الحقل premium مفعّل (true) أو أن الحقل غير موجود (أي NULL)، ثم ترتيب النتائج حسب تاريخ الإنشاء من الأحدث إلى الأقدم.
قد تكتب ال query بهذا الشكل:
SELECT * FROM users
WHERE premium = 1 OR premium IS NULL
ORDER BY created_at DESC;
الخطورة هنا:
إذا نسيت وضع القوسين بالشكل الصحيح في حالة وجود شروط إضافية، فربما تحصل على نتائج خاطئة.
مثلًا، ال query التالية خاطئة:
SELECT * FROM users
WHERE premium = 1 OR premium IS NULL AND active = 1;
هنا قاعدة الأولويات في SQL ستنفذ premium IS NULL AND active = 1 أولًا، ثم تطبق OR premium = 1، مما قد يخلّ بالنتائج المتوقعة.
ال query الصحيح مع OR:
SELECT * FROM users
WHERE (premium = 1 OR premium IS NULL) AND active = 1
ORDER BY created_at DESC;
بهذا الشكل نضمن أن الشرطين المرتبطين بـ premium يتم تقييمهما معًا، ثم يُطبّق شرط active بعد ذلك.
#SQL #SoftwareDevelopment
مثال: لنفترض أنك تريد جلب المستخدمين الذين لديهم الحقل premium مفعّل (true) أو أن الحقل غير موجود (أي NULL)، ثم ترتيب النتائج حسب تاريخ الإنشاء من الأحدث إلى الأقدم.
قد تكتب ال query بهذا الشكل:
SELECT * FROM users
WHERE premium = 1 OR premium IS NULL
ORDER BY created_at DESC;
الخطورة هنا:
إذا نسيت وضع القوسين بالشكل الصحيح في حالة وجود شروط إضافية، فربما تحصل على نتائج خاطئة.
مثلًا، ال query التالية خاطئة:
SELECT * FROM users
WHERE premium = 1 OR premium IS NULL AND active = 1;
هنا قاعدة الأولويات في SQL ستنفذ premium IS NULL AND active = 1 أولًا، ثم تطبق OR premium = 1، مما قد يخلّ بالنتائج المتوقعة.
ال query الصحيح مع OR:
SELECT * FROM users
WHERE (premium = 1 OR premium IS NULL) AND active = 1
ORDER BY created_at DESC;
بهذا الشكل نضمن أن الشرطين المرتبطين بـ premium يتم تقييمهما معًا، ثم يُطبّق شرط active بعد ذلك.
#SQL #SoftwareDevelopment
❤5
الـ Eager Loading في أي ORM (Object-Relational Mapping) هو أسلوب لتحسين الأداء عند جلب البيانات المرتبطة (relations) من قواعد البيانات. يُستخدم لتقليل عدد ال queries التي تُنفذ، ويمنع مشكلة الـ N+1 queries.
غالبًا ما يُستخدم Eager Loading لاسترجاع بيانات من جدول رئيسي مع العلاقات المرتبطة به، والتي قد تكون مثلاً من خلال جداول Pivots في العلاقات من نوع many-to-many.
مثال:
بدلًا من تنفيذ query مثل:
يمكنك في Laravel استخدام Eager Loading بهذه الطريقة:
وإذا كنت تريد فقط جلب الـ Posts التي لها Categories تحقق شرطًا معينًا، يمكنك استخدام whereHas Clause:
- الـwith() تستخدم في Laravel للـ Eager Loading.
- الـwhereHas() تستخدم ل filter النتائج بناءً على شروط داخل العلاقة.
- الفكرة ليست اختصار Query معقدة فقط، بل تحسين الأداء وتجنب التكرار غير الضروري في الاستعلامات.. وجعلها readable
#Laravel #PHP #EagerLoading #SQL #ORM
غالبًا ما يُستخدم Eager Loading لاسترجاع بيانات من جدول رئيسي مع العلاقات المرتبطة به، والتي قد تكون مثلاً من خلال جداول Pivots في العلاقات من نوع many-to-many.
مثال:
بدلًا من تنفيذ query مثل:
FROM posts
INNER JOIN category_post ON posts.id = category_post.post_id
INNER JOIN categories ON categories.id = category_post.category_id
WHERE posts.status = 'published';
يمكنك في Laravel استخدام Eager Loading بهذه الطريقة:
Post::with('categories')->where('status', 'published')->get();
وإذا كنت تريد فقط جلب الـ Posts التي لها Categories تحقق شرطًا معينًا، يمكنك استخدام whereHas Clause:
$query->where('name', 'like', '%PHP%');
})->with('categories')->get();
- الـwith() تستخدم في Laravel للـ Eager Loading.
- الـwhereHas() تستخدم ل filter النتائج بناءً على شروط داخل العلاقة.
- الفكرة ليست اختصار Query معقدة فقط، بل تحسين الأداء وتجنب التكرار غير الضروري في الاستعلامات.. وجعلها readable
#Laravel #PHP #EagerLoading #SQL #ORM
ال sql fundamentals ضرورية، لكتابة QUERIES صحيحة و Optimized لكن لدي مؤاخدة بسيطة على كثير من الناس التي تقول ان كتابة CRUD مع ال ORM سهلة جدا..، كتابة ال crud operations ليست سهلة في المشاريع المعقدة.. التي تحتاج inputs validations كثيرة، و updates ضخمة، و requests كثيرة،.. الامر ليس بالسهولة التي يتم تصويرها.
خصوصا لو اردت كتابة كود نقي، و يتبع مبادئ ال solid و ال dry.. انذاك تصبح عملية كتابة الكود صعيبة في البداية، لكن التعامل معه و تعديله مستقبلا يصير سهل.
و الله اعلى و اعلم.
#Laravel #ORM #SQL
خصوصا لو اردت كتابة كود نقي، و يتبع مبادئ ال solid و ال dry.. انذاك تصبح عملية كتابة الكود صعيبة في البداية، لكن التعامل معه و تعديله مستقبلا يصير سهل.
و الله اعلى و اعلم.
#Laravel #ORM #SQL
❤1