Как создать функцию MySQL
У меня есть следующий запрос SQL
SELECT id,
title,
total_likes,
IFNULL(SELECT 1 FROM 'likedata' WHERE user_id=$UID AND post_id=posts.id)0) AS is_liked
FROM 'posts'
Я хочу создать функцию MySQL, чтобы сделать мой запрос немного короче,
я не знаю, как обернуть второй запрос в функцию sql и передать 2 переменные ($UID и $PID) в функцию, чтобы сделать этот запрос короче и более понятным.
любая помощь будет отличной, заранее спасибо
2 ответа
Вы можете просто использовать exists
, MySQL рассматривает логические значения как числа, поэтому:
SELECT p.id, p.title, p.total_likes,
( EXISTS (SELECT 1 FROM likedata ld WHERE ld.post_id = p.id AND ld.user_id = $UID)
) as is_liked
FROM posts p;
Это кажется самым близким к вашему первоначальному замыслу.
Ответ @duskwuff также является типичным способом решения этой проблемы. Существует небольшое отличие, потому что дубликаты в likedata
приведет к дублированию строк в наборе результатов, используя join
,
Для любой формы вы хотите индекс на likedata(post_id, user_id)
, И если вы проходите $UID
в, вы должны использовать параметризованные запросы.
Это не хороший вариант использования функции.
Более свободный способ выразить это в SQL - использовать левое внешнее соединение, например:
SELECT posts.id, posts.title, posts.total_likes,
(likedata.id IS NOT NULL) AS is_liked
FROM posts
LEFT JOIN likedata ON (
posts.id = likedata.post_id AND likedata.user_id = $UID
)