Mit VALUES oder CASE Ihre Ergebnisse lesbarer machen

Manchmal, wenn Sie eine Abfrage mit dem Daten-Explorer erstellen, finden Sie Codes in den Ergebnissen anstelle ihrer textuellen Entsprechungen. Das Feld hat oft einen Schlüssel im Daten-Explorer-Baum, aber diese sind in den Ergebnissen nicht so nützlich (es sei denn, Sie haben sie sich alle gemerkt :slight_smile:).

Es gibt ein paar Dinge, die Sie verwenden können, um diese leichter lesbar und viel besser mit anderen teilbar zu machen.

Zuerst…

VALUES

Die erste Abfrage wurde erstellt, um alle Benachrichtigungen abzurufen, die ein Benutzer für ein bestimmtes Thema erhalten hatte. Anstatt jedoch nur den Code notification_type auszugeben, wird VALUES verwendet, um eine temporäre Tabelle zu erstellen und jeden Code seinen viel besser lesbaren Entsprechungen zuzuordnen:

-- Definieren Sie Parameter für user_id und topic_id
-- [params]
-- user_id :user_id
-- topic_id :topic_id

-- Erstellen Sie eine Common Table Expression (CTE) namens ntypes
-- Diese CTE ordnet Benachrichtigungstypnamen ihren entsprechenden IDs zu
WITH ntypes(notification_type, notification_type_id) AS (
  VALUES
    -- Definieren Sie Paare von Benachrichtigungstypen und ihren entsprechenden IDs
    ('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)
)
-- Fragen Sie die Benachrichtigungstabelle (Alias n) ab und verknüpfen Sie sie mit der ntypes CTE basierend auf dem Benachrichtigungstyp
SELECT user_id, ntypes.notification_type, read, topic_id, created_at
FROM notifications n
JOIN ntypes
ON n.notification_type = ntypes.notification_type_id
-- Filtern Sie die Benachrichtigungen, um nur diejenigen einzuschließen, die zu einem bestimmten Benutzer und einem bestimmten Thema gehören
WHERE user_id = :user_id
AND topic_id = :topic_id
-- Sortieren Sie die resultierenden Benachrichtigungen absteigend nach dem Zeitstempel created_at
ORDER BY created_at DESC

Die Verwendung von VALUES ist nützlich, wenn die Liste lang ist, da sie die Abfrage leichter lesbar machen kann. Sie ermöglicht es Ihnen auch, die neue temporäre Tabelle, die sie erstellt, mit einer anderen zu verknüpfen, was sehr praktisch sein kann. Die temporäre Tabelle kann auch dazu beitragen, die Effizienz im Vergleich zu einer Reihe von CASE-Anweisungen zu verbessern.

Was uns zum zweiten führt…

CASE

Alternativ können Sie, wenn die Liste viel kleiner ist, auch CASE für einen ähnlichen Effekt verwenden. Hier ist eine für post_type:

-- [params]
-- topic_id :topic_id

SELECT p.id AS post_id,
 -- Beginnen Sie die CASE-Anweisung, um numerische Codes für post_type in Zeichenfolgenbeschreibungen umzuwandeln
        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

Diese Beispielabfragen sind möglicherweise für sich genommen nicht sehr nützlich, sondern sollen eher die Prinzipien demonstrieren. Hoffentlich helfen sie, aber wenn Sie Fragen haben, stellen Sie diese bitte unten. :slight_smile:

13 „Gefällt mir“