如何创建mysql函数

a0zr77ik  于 2021-06-23  发布在  Mysql
关注(0)|答案(2)|浏览(366)

我有以下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函数来缩短我的查询,
我不知道如何将第二个查询 Package 到sql函数中,并将两个变量($uid和$pid)传递给函数,以使这个查询更简短、更易懂。
任何帮助都会很好,提前谢谢

66bbxpm5

66bbxpm51#

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

o7jaxewo

o7jaxewo2#

对于函数来说,这不是一个好的用例。
在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
)

你可以在这里看到这一点。

相关问题