Коротка відповідь
juniorSELECT c.* FROM comments c JOIN users u ON c.user_id = u.id WHERE u.id = 42 ORDER BY c.created_at DESC LIMIT 3;
Повне пояснення
Що це і навіщо
Запит повертає останні три коментарі конкретного користувача. Це корисно для відображення активності в профілі або у списку новин.
Ключові принципи
- JOIN по зовнішньому ключу
user_id→id. - WHERE фільтрує користувача.
- ORDER BY created_at DESC сортує за датою створення у спадному порядку.
- LIMIT 3 обмежує результат трьома рядками.
Як це працює
- Система виконує
JOIN, створюючи тимчасову таблицю з усіма коментарями користувача. WHEREвідфільтровує рядки, залишаючи лише ті, деu.id = 42.- Сортування за
created_at DESCгарантує, що найновіші коментарі будуть першими. LIMIT 3обмежує кількість рядків, що повертаються.
Практика й реалізація
- PostgreSQL / MySQL: той самий синтаксис.
- Якщо потрібен SQLite, треба замінити
created_atна поле типуDATETIME. - У Prisma це виглядатиме так:
const recent = await prisma.comment.findMany({
where: { userId: 42 },
orderBy: [{ createdAt: 'desc' }],
take: 3,
});
Тестування
test('returns 3 latest comments', async () => {
const res = await db.query(`SELECT ...`);
expect(res.length).toBe(3);
});
Оптимізація запитів
- Індексуйте
comments(user_id, created_at)для швидкого пошуку і сортування. - Використовуйте
EXPLAINдля перевірки плану виконання.
Безпека
- Підтримуйте параметризовані запити, щоб уникнути SQL‑ін’єкцій.
- Переконайтеся, що користувач має право бачити коментарі.
Альтернативи
- Якщо потрібен пагінація, замініть
LIMIT 3наOFFSET. - Для MongoDB аналогічний запит:
{ userId: 42 }з.sort({ createdAt: -1 }).limit(3).