A volte, quando si crea una query con l’esplora dati, si trovano codici nei risultati anziché i loro equivalenti testuali. Il campo ha spesso una chiave nell’albero dell’esplora dati, ma questi tendono a non essere così utili quando si tratta dei risultati (a meno che tu non sia riuscito a memorizzarli tutti
)
Ci sono un paio di cose che puoi usare per renderli più facili da leggere e molto più condivisibili con altri.
Prima di tutto…
VALUES
La prima query è stata creata per recuperare tutte le notifiche che un utente aveva ricevuto per un particolare argomento, ma, anziché restituire solo il codice notification_type, VALUES viene utilizzato per creare una tabella temporanea e mappare ciascuno ai loro corrispettivi molto più leggibili dall’uomo:
-- Definisci i parametri per user_id e topic_id
-- [params]
-- user_id :user_id
-- topic_id :topic_id
-- Crea una Common Table Expression (CTE) chiamata ntypes
-- Questa CTE mappa i nomi dei tipi di notifica ai loro ID corrispondenti
WITH ntypes(notification_type, notification_type_id) AS (
VALUES
-- Definisci coppie di tipi di notifica e i loro ID corrispondenti
('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)
)
-- Interroga la tabella delle notifiche (alias n), unendola con la CTE ntypes in base al tipo di notifica
SELECT user_id, ntypes.notification_type, read, topic_id, created_at
FROM notifications n
JOIN ntypes
ON n.notification_type = ntypes.notification_type_id
-- Filtra le notifiche per includere solo quelle appartenenti a un utente specifico e a un argomento specifico
WHERE user_id = :user_id
AND topic_id = :topic_id
-- Ordina le notifiche risultanti in ordine decrescente in base al timestamp created_at
ORDER BY created_at DESC
L’uso di VALUES è utile quando l’elenco è lungo, poiché può rendere la query più facile da leggere. Consente inoltre di collegare la nuova tabella temporanea che crea a un’altra, il che può essere molto utile. La tabella temporanea può anche contribuire a migliorare l’efficienza rispetto a una serie di istruzioni CASE.
Il che porta al secondo…
CASE
In alternativa, se l’elenco è molto più piccolo, puoi anche usare CASE per un effetto simile. Eccone uno per post_type:
-- [params]
-- topic_id :topic_id
SELECT p.id AS post_id,
-- Inizia l'istruzione CASE per mappare i codici numerici di post_type a descrizioni testuali
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
Queste query di esempio potrebbero non essere molto utili da sole, ma servono più a dimostrare i principi. Speriamo che aiutino, ma se hai domande, chiedi qui sotto. ![]()

