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 变量查询不起作用的主要内容,如果未能解决你的问题,请参考以下文章

as3空格键功能不起作用

更新查询在 mysql 工作台中不起作用

使用变量约束的 sqlQuery 不起作用。

Mysql 查询对我不起作用 Codeigniter Php

MySQL“NOT IN”查询不起作用

查询在 Mysql 数据库中不起作用