gpt4 book ai didi

mysql - 'where clause' 中的未知列。嵌套子查询提高 'ORDER BY'的性能

转载 作者:行者123 更新时间:2023-11-29 23:28:28 25 4
gpt4 key购买 nike

我的关系有点奇怪,但一定是这样:

SELECT COUNT(DISTINCT `t`.`id`) 
FROM `radcliente` `t`
LEFT OUTER JOIN `radcliente_endereco_instalacao` `endereco_instalacao`
ON (`endereco_instalacao`.`cliente_id`=`t`.`id`)
LEFT OUTER JOIN `radcliente_telefone` `telefones`
ON (`telefones`.`cliente_id`=`t`.`id`)
LEFT OUTER JOIN `radcliente_email` `emails`
ON (`emails`.`cliente_id`=`t`.`id`)
LEFT OUTER JOIN `radmetodo_cobranca` `metodo_cobranca`
ON (`metodo_cobranca`.`cliente_id`=`t`.`id`) AND (metodo_cobranca.arquivo = 'nao')
LEFT OUTER JOIN `radacct` `ultimo_acct`
ON (`ultimo_acct`.`username`=`t`.`login`)
AND (ultimo_acct.radacctid = (
SELECT `radacctid` FROM
(SELECT radacctid
FROM `radacct` `fUzDDUDv`
WHERE username = t.login
) AS `fUzDDUDv` ORDER BY `radacctid` DESC LIMIT 1
)
)
WHERE (ultimo_acct.framedipaddress = '177.23.209.194')

“where 子句”中存在未知列“t.login”。

更新:

是的,这可以解决问题。我创建了这个子查询,为什么我使用 Yii 框架,并且 has_one 关系没有限制,即,如果一个“客户”拥有数百万个“acct”,框架会查找所有“acct”,只取一个,这给出了一些 GB 的流量并且非常慢。为了解决这个问题,我使用子查询仅查找最新的 id 来获取“cliente”和最后一个“acct”,并使其在 Active Record 中工作,直到那时一切都很好,但搜索很慢 estremamente 寻找一条记录花了 40秒,然后我发现问题出在'ORDER BY'上(radacctid是一个索引,表是innodb),因此我解决了子查询之外的'ORDER BY',然后解决了,子查询列的问题正如我上面所解释的,表“cliente”(t.login)就像那里一样。

我也尝试过按另一个字段排序,例如“acctstarttime”,但速度仍然很慢,只有当我这样做时才解决:

SELECT `radacctid` FROM
(SELECT radacctid
FROM `radacct` `fUzDDUDv`
WHERE username = t.login
) AS `fUzDDUDv` ORDER BY `radacctid` DESC LIMIT 1

更新:

但是INNER JOIN的问题是,如果'acct'没有结果,则不会返回'cliente'。

更新

问题不在于 t.login 的位置,但它不被识别为存在于子查询中,如果订单不慢,我无法将其“输出” .

更新

阅读我的评论?情况就是这样。它确实只在生产服务器上一直进行插入和更新。

最佳答案

我希望这能以某种方式帮助您:

SELECT 
COUNT(DISTINCT `t`.`id`)
FROM
`radcliente` `t`
LEFT OUTER JOIN `radcliente_endereco_instalacao` `endereco_instalacao`
ON (`endereco_instalacao`.`cliente_id`=`t`.`id`)
LEFT OUTER JOIN `radcliente_telefone` `telefones`
ON (`telefones`.`cliente_id`=`t`.`id`)
LEFT OUTER JOIN `radcliente_email` `emails`
ON (`emails`.`cliente_id`=`t`.`id`)
LEFT OUTER JOIN `radmetodo_cobranca` `metodo_cobranca`
ON (`metodo_cobranca`.`cliente_id`=`t`.`id`)
AND (metodo_cobranca.arquivo = 'nao')
INNER JOIN
(
SELECT `ultimo_acct_INNER`.*
FROM
`radacct` AS `ultimo_acct_INNER`
INNER JOIN
(
SELECT `fUzDDUDv`.`username` AS `maxID_username`, MAX(`radacctid`) AS `maxID_radacctid`
FROM `radacct` `fUzDDUDv`
GROUP BY `fUzDDUDv`.`username`
) AS `radacct_MAX_ID`
ON `ultimo_acct_INNER`.`username`= `radacct_MAX_ID`.`maxID_username`
AND `ultimo_acct_INNER`.`radacctid` = `radacct_MAX_ID`.`maxID_radacctid`
) AS `ultimo_acct`
ON (`ultimo_acct`.`username`=`t`.`login`)
WHERE
(ultimo_acct.framedipaddress = '177.23.209.194')

我替换了部分:

(...)
LEFT OUTER JOIN `radacct` `ultimo_acct`
ON (`ultimo_acct`.`username`=`t`.`login`)
AND (ultimo_acct.radacctid = (
SELECT `radacctid` FROM
(SELECT radacctid
FROM `radacct` `fUzDDUDv`
WHERE username = t.login
) AS `fUzDDUDv` ORDER BY `radacctid` DESC LIMIT 1
)
)
(...)

这个:

    (...)
INNER JOIN
(
SELECT `ultimo_acct_INNER`.*
FROM
`radacct` AS `ultimo_acct_INNER`
INNER JOIN
(
SELECT `fUzDDUDv`.`username` AS `maxID_username`, MAX(`radacctid`) AS `maxID_radacctid`
FROM `radacct` `fUzDDUDv`
GROUP BY `fUzDDUDv`.`username`
) AS `radacct_MAX_ID`
ON `ultimo_acct_INNER`.`username`= `radacct_MAX_ID`.`maxID_username`
AND `ultimo_acct_INNER`.`radacctid` = `radacct_MAX_ID`.`maxID_radacctid`
) AS `ultimo_acct`
ON (`ultimo_acct`.`username`=`t`.`login`)
(...)

关于mysql - 'where clause' 中的未知列。嵌套子查询提高 'ORDER BY'的性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26765729/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com