في بعض الأحيان عند إنشاء استعلام باستخدام مستكشف البيانات، ستجد رموزًا تُستخدم في النتائج بدلاً من ما يعادلها النصي. غالبًا ما يحتوي الحقل على مفتاح في شجرة مستكشف البيانات، ولكن هذه لا تميل إلى أن تكون مفيدة جدًا عندما يتعلق الأمر بالنتائج (ما لم تكن قد تمكنت من حفظها جميعًا في الذاكرة
).
هناك بعض الأشياء التي يمكنك استخدامها لجعل هذه النتائج أسهل في القراءة، وأكثر قابلية للمشاركة على نطاق واسع مع الآخرين.
أولاً…
VALUES
تم إنشاء الاستعلام الأول هذا لسحب جميع الإشعارات التي تلقاها مستخدم لموضوع معين، ولكن بدلاً من إخراج رمز notification_type فقط، يتم استخدام VALUES لإنشاء جدول مؤقت وربط كل منها بنظيراتها الأكثر قابلية للقراءة البشرية:
-- تحديد معلمات user_id و topic_id
-- [params]
-- user_id :user_id
-- topic_id :topic_id
-- إنشاء تعبير جدول مشترك (CTE) يسمى ntypes
-- يقوم هذا CTE بربط أسماء أنواع الإشعارات بمعرفاتها المقابلة
WITH ntypes(notification_type, notification_type_id) AS (
VALUES
-- تعريف أزواج أنواع الإشعارات ومعرفاتها المقابلة
('mentioned', 1),
('replied',2),
('quoted',3),
('edited', 4),
('liked', 5),
('private_message', 6),
('invited_to_private_message', 7),
('invitee_accepted', 8),
('posted', 9),
('moved_post', 10),
('linked', 11),
('granted_badge', 12),
('invited_to_topic', 13),
('custom', 14),
('group_mentioned', 15),
('group_message_summary', 16),
('watching_first_post', 17),
('topic_reminder', 18),
('liked_consolidated', 19),
('post_approved', 20),
('code_review_commit_approved', 21),
('membership_request_accepted', 22),
('membership_request_consolidated', 23),
('bookmark_reminder', 24),
('reaction', 25),
('votes_released', 26),
('event_reminder', 27),
('event_invitation', 28),
('chat_mention', 29),
('chat_message', 30),
('chat_invitation', 31),
('chat_group_mention', 32),
('chat_quoted', 33),
('assigned', 34),
('question_answer_user_commented', 35),
('watching_category_or_tag', 36),
('new_features', 37),
('admin_problems', 38),
('following', 800),
('following_created_topic', 801),
('following_replied', 802),
('circles_activity', 900)
)
-- الاستعلام عن جدول الإشعارات (الاسم المستعار n)، وربطه بـ CTE ntypes بناءً على نوع الإشعار
SELECT user_id, ntypes.notification_type, read, topic_id, created_at
FROM notifications n
JOIN ntypes
ON n.notification_type = ntypes.notification_type_id
-- تصفية الإشعارات لتضمين فقط تلك التي تنتمي إلى مستخدم معين وموضوع معين
WHERE user_id = :user_id
AND topic_id = :topic_id
-- ترتيب الإشعارات الناتجة بترتيب تنازلي حسب الطابع الزمني created_at
ORDER BY created_at DESC
يعد استخدام VALUES مفيدًا عندما تكون القائمة طويلة لأنه يمكن أن يجعل الاستعلام أسهل في القراءة. كما أنه يسمح لك بربط الجدول المؤقت الجديد الذي ينشئه بجدول آخر، وهو ما يمكن أن يكون مفيدًا جدًا. يمكن أن يساعد الجدول المؤقت أيضًا في تحسين الكفاءة مقارنة بسلسلة من عبارات CASE.
مما يقودنا إلى الثاني…
CASE
بدلاً من ذلك، إذا كانت القائمة أصغر بكثير، يمكنك أيضًا استخدام CASE لتأثير مماثل. إليك مثال لـ post_type:
-- [params]
-- topic_id :topic_id
SELECT p.id AS post_id,
-- بدء عبارة CASE لربط رموز post_type الرقمية بأوصاف نصية
CASE
WHEN post_type = 1 THEN 'regular'
WHEN post_type = 2 THEN 'moderator_action'
WHEN post_type = 3 THEN 'small_action'
WHEN post_type = 4 THEN 'whisper'
END
FROM posts p
WHERE p.topic_id = :topic_id
ORDER BY created_at DESC
قد لا تكون هذه الاستعلامات النموذجية مفيدة بحد ذاتها، ولكنها تهدف بشكل أكبر إلى توضيح المبادئ. نأمل أن تساعد، ولكن إذا كانت لديك أي أسئلة، فيرجى طرحها أدناه. ![]()

