如何创建mysql函数

时间:2018-05-27 07:56:49

标签: mysql sql function mysql-function

我有以下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 个答案:

答案 0 :(得分:0)

这不是一个功能的好用例。

在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
)

You can see this in action here.

答案 1 :(得分:0)

您实际上可以简单地使用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,则应该使用参数化查询。