gpt4 book ai didi

php - PHP中MySQL用户定义的@variable为空

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

我在执行以下查询时遇到问题。当我在 mysql 工作台中运行它时,用户定义的变量 @cid 被正确填充,但是当我在 PHP 中运行它时,变量为空。我使用 mysqli_query 机制。

它的查询很复杂,但正如我已经说过的 - 在 mysql WB 中工作正常,但在 PHP 中不行。在 PHP 中,计数被正确返回,因此看起来除了在 @cid 变量中存储值之外,整个查询都有效。

查询:

SELECT count(*),@cid FROM users WHERE yfid IN 
(SELECT viewer_id
FROM views WHERE campaign_id
IN (@cid:=(SELECT * FROM(SELECT campaign_id FROM views
where campaign_id>'$firstCampaignId' AND campaign_id
IN (SELECT id FROM campaigns WHERE owner_yfid
IN (SELECT id FROM uc_users WHERE email='$email'))
group by campaign_id having count(*) > 1
ORDER BY count(*) DESC LIMIT 1) AS tmp)))
AND gender = 1 AND age < 35

编辑:我发现在 MySQL 工作台中,当我第一次运行查询时,@cid 也是 NULL。当我第二次执行它时,它正确返回。那么分配逻辑可能存在一些问题吗?这是在执行查询后分配的,并且可以在第二次运行时访问吗?

最佳答案

尝试使用

select count(*), @cid:=V.campaign_id from
( select yfid from users
where gender = 1 AND age < 35
) as U
inner join
( select viewer_id, campaign_id FROM views
where campaign_id > '$firstCampaignId'
) as V on U.yfid = V.viewer_id
inner join
campaigns as C on V.campaign_id = C.id
inner join
( select id from uc_users where email='$email' ) as UCU on C.owner_yfid = UCU.id
group by V.campaign_id
having count(*) > 1
order by count(*) desc limit 1

我更喜欢在子查询中放置 where 子句来减少实际连接的行数,尽管我没有找到任何关于 MySQL 是否已经对此进行优化的信息。

看来 MySQL 确实优化了 join 语句,但没有优化 in 子句。

关于php - PHP中MySQL用户定义的@variable为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43330719/

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