我正在尝试弄清楚是否可以在mysql语句中使用本地变量。
我有一个类似这样的语句(不相关的字段、连接和条件已被过滤):
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:
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
发布于 2021-01-20 05:20:16
尝试如下所示:
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语句中创建变量。
在这种情况下,您不会使用占位符?因为它们被参数替换了。
https://stackoverflow.com/questions/65799632
复制相似问题