我有以下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)传递给函数,以使这个查询更简短、更易懂。任何帮助都会很好,提前谢谢
66bbxpm51#
实际上,你可以简单地使用 exists . mysql将布尔值视为数字,因此:
exists
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 在中,应该使用参数化查询。
likedata
join
likedata(post_id, user_id)
$UID
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 )
你可以在这里看到这一点。
2条答案
按热度按时间66bbxpm51#
实际上,你可以简单地使用
exists
. mysql将布尔值视为数字,因此:这似乎最接近你的初衷。
@duskwuff的回答也是一种典型的方法。有一点不同,因为在
likedata
将导致使用join
.对于任何一种形式,都需要一个索引
likedata(post_id, user_id)
. 如果你路过$UID
在中,应该使用参数化查询。o7jaxewo2#
对于函数来说,这不是一个好的用例。
在sql中更流畅的表达方式是使用左外连接,例如:
你可以在这里看到这一点。