Как создать функцию 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
)

Вы можете увидеть это в действии здесь.

Другие вопросы по тегам