MySQL:使用 AS 变量查询不起作用
Posted
技术标签:
【中文标题】MySQL:使用 AS 变量查询不起作用【英文标题】:MySQL: Query with AS variable not working 【发布时间】:2018-12-17 09:29:49 【问题描述】:我做了一个查询,使用它创建了一个变量 accountId,为什么我不能在我的子查询中重用 accountId?
这是我的代码:
SELECT userId AS accountId,
(SELECT recommended FROM ads_connections WHERE byUserId = accountId AND throughUserId = accountId AND adId = :recommendedAdId) AS recommended,
--
(SELECT requestStatus FROM ads_recommends_requests WHERE
userId = :currentUserId AND
requestFromUserId = accountId AND
advertisementId = :statusAdId) AS requestStatus,
(SELECT COUNT(id) FROM ads_recommends_requests
WHERE
requestFromUserId = accountId AND
advertisementId = :countAdId AND
requestStatus = '1'
) AS recommendedTimes
--
FROM user_contacts
WHERE userId IN " . $myCircleString . "
AND phoneNumber = :phoneNumber
AND (SELECT fictive FROM users WHERE id = userId) = 0
";
输出示例:
"data": [
"userId": 0,
"accountId": 2,
"fictive": false,
"name": "Mickael",
"phoneNumber": "0584688888",
"review": "0",
"liked": false,
"recommended": 0,
"requestStatus": 0,
"recommendedTimes": 0
谢谢
【问题讨论】:
不能使用别名代替 accounID 使用 userID 那我该怎么做呢? 我猜所有这些子查询都可以替换为连接您想将示例数据和预期输出作为文本添加到问题中吗? 请看我的更新 【参考方案1】:检查这个-
SELECT userId AS accountId,
(SELECT recommended FROM ads_connections WHERE byUserId = userId AND throughUserId = userId AND adId = :recommendedAdId) AS recommended,
--
(SELECT requestStatus FROM ads_recommends_requests WHERE
userId = :currentUserId AND
requestFromUserId = userId AND
advertisementId = :statusAdId) AS requestStatus,
(SELECT COUNT(id) FROM ads_recommends_requests
WHERE
requestFromUserId = userId AND
advertisementId = :countAdId AND
requestStatus = '1'
) AS recommendedTimes
--
FROM user_contacts
WHERE userId IN " . $myCircleString . "
AND phoneNumber = :phoneNumber
AND (SELECT fictive FROM users WHERE id = userId) = 0
";
【讨论】:
不行,可能是因为lrequestFromUserId = userId 顶行是userId =: currentUserId 有冲突,所以服务器混乱? 没有服务器不会混淆,因为 :currentUserId 是你的 inout 而 userID 来自表列【参考方案2】:回答回复
以这种方式创建变量:
SELECT @acctId := userId AS accountId
并使用它:
(SELECT requestStatus FROM ads_recommends_requests WHERE
userId = :currentUserId AND
requestFromUserId = @acctId AND
advertisementId = :statusAdId) AS requestStatus
【讨论】:
以上是关于MySQL:使用 AS 变量查询不起作用的主要内容,如果未能解决你的问题,请参考以下文章