A veces, al crear una consulta con el explorador de datos, encontrarás códigos en los resultados en lugar de sus equivalentes textuales. El campo a menudo tiene una clave en el árbol del explorador de datos, pero estas no tienden a ser tan útiles cuando se trata de los resultados (a menos que hayas logrado memorizarlas todas
)
Hay un par de cosas que puedes usar para hacerlos más agradables a la vista y mucho más compartibles con otros.
Primero…
VALUES
Esta primera consulta se creó para extraer todas las notificaciones que un usuario había recibido para un tema en particular, pero, en lugar de mostrar solo el código notification_type, se usa VALUES para crear una tabla temporal y mapear cada uno a sus contrapartes mucho más legibles para humanos:
-- Define los parámetros para user_id y topic_id
-- [params]
-- user_id :user_id
-- topic_id :topic_id
-- Crea una Expresión Común de Tabla (CTE) llamada ntypes
-- Esta CTE mapea los nombres de los tipos de notificación a sus IDs correspondientes
WITH ntypes(notification_type, notification_type_id) AS (
VALUES
-- Define pares de tipos de notificación y sus IDs correspondientes
('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)
)
-- Consulta la tabla de notificaciones (alias n), uniéndola con la CTE ntypes basándose en el notification_type
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 las notificaciones para incluir solo aquellas que pertenecen a un usuario y tema específicos
WHERE user_id = :user_id
AND topic_id = :topic_id
-- Ordena las notificaciones resultantes en orden descendente por la marca de tiempo created_at
ORDER BY created_at DESC
Usar VALUES es útil cuando la lista es larga, ya que puede hacer que la consulta sea más fácil de leer. También te permite vincular la nueva tabla temporal que crea a otra, lo que puede ser muy útil. La tabla temporal también puede ayudar a mejorar la eficiencia en comparación con una serie de sentencias CASE.
Lo que nos lleva a la segunda…
CASE
Alternativamente, si la lista es mucho más pequeña, también puedes usar CASE para un efecto similar. Aquí tienes uno para post_type:
-- [params]
-- topic_id :topic_id
SELECT p.id AS post_id,
-- Comienza la sentencia CASE para mapear los códigos numéricos de post_type a descripciones de cadena
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
Estas consultas de ejemplo pueden no ser de mucha utilidad por sí solas, sino que son más para demostrar los principios. Esperamos que ayuden, pero si tienes alguna pregunta, por favor, hazla a continuación. ![]()

