mysql - 如何创建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)传递给函数以使该查询更短且更易于理解。
任何帮助都会很棒,在此先感谢
解决方案
您实际上可以简单地使用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
,你应该使用参数化查询。
推荐阅读
- apache-beam - 如何在 apache Beam 中进一步调试这个丢弃的记录?
- javascript - 'setName' 未在功能组件中定义
- python - 不要在表格中保存信息
- reactjs - React Hook Form 将控制器(值)重置为默认值
- haskell - 如何处理haskell中字符串中的“”
- codeblocks - 在代码块中检测到 C++ 多个定义
- snapcraft - 找不到命令二进制文件 - snapcraft.yaml
- reactjs - 使用 React 路由器设置 React 应用程序以导航组件和 URL 重写以导航 IIS 中的子应用程序
- c# - Neo4jClient 无法反序列化为您提供的对象结构,(参数“内容”),System.ArgumentNullException(参数“输入”)
- reactjs - AppSync 客户端不返回数据