首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >mysql语句中的局部变量

mysql语句中的局部变量
EN

Stack Overflow用户
提问于 2021-01-20 05:15:02
回答 1查看 34关注 0票数 0

我正在尝试弄清楚是否可以在mysql语句中使用本地变量。

我有一个类似这样的语句(不相关的字段、连接和条件已被过滤):

代码语言:javascript
运行
复制
SELECT
  m.id,
  IF (!m.subscribers_only OR m.user_id = ? OR !ISNULL(mu.media_id) OR !ISNULL(us.user_id), 1, 0) AS has_access
FROM media m
LEFT JOIN media_user mu ON mu.user_id = ? AND m.id = mu.media_id
LEFT JOIN user_subscriptions us ON us.user_id = ? AND m.user_id = us.user_subscriber_to_id

所有3个变量都是同一个变量,因此可以在语句中设置一个局部变量,只需进行1次绑定,而不必绑定参数3次。

我曾经考虑过先使用SET @current_user = 1,然后再使用@current_user,但由于我使用的是PDO,因此不可能在一个查询中运行两个语句,并且我担心与负载均衡器结合使用时的交互效果。

编辑以显示我如何打印@paramter_test:

代码语言:javascript
运行
复制
SELECT
  m.id,
  @parameter_test,
  IF (!m.subscribers_only OR m.user_id = @parameter_test OR !ISNULL(mu.media_id) OR !ISNULL(us.user_id), 1, 0) AS has_access
  FROM media m
JOIN (SELECT @parameter_test:= 1) a
LEFT JOIN media_user mu ON mu.user_id = @parameter_test AND m.id = mu.media_id
LEFT JOIN user_subscriptions us ON us.user_id = @parameter_test AND m.user_id = us.user_subscriber_to_id
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-01-20 05:20:16

尝试如下所示:

代码语言:javascript
运行
复制
SELECT
m.id,
IF (!m.subscribers_only OR m.user_id = @parameter_test OR !ISNULL(mu.media_id) OR 
!ISNULL(us.user_id), 1, 0) AS has_access
FROM media m
JOIN (SELECT @parameter_test:= 1) a
LEFT JOIN media_user mu ON mu.user_id = @parameter_test AND m.id = mu.media_id
LEFT JOIN user_subscriptions us ON us.user_id = @parameter_test AND m.user_id = 
us.user_subscriber_to_id

只要在sql语句使用前声明了变量,就可以在sql语句中创建变量。

在这种情况下,您不会使用占位符?因为它们被参数替换了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65799632

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档