如何创建mysql函数

问题描述 投票:0回答:2

我有以下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)来使函数更简短,更易理解。

任何帮助都会很棒,提前谢谢

mysql sql function mysql-function
2个回答
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.


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,你应该使用参数化查询。

© www.soinside.com 2019 - 2024. All rights reserved.