gpt4 book ai didi

sql - ZF 子查询问题

转载 作者:行者123 更新时间:2023-12-04 16:46:49 27 4
gpt4 key购买 nike

我有一个以 user_id 作为主键的用户表和一个以 user_date_id 作为主键的 user_dates 表,user_id 链接到用户表以及 start_date 和 end_date 字段。

我正在尝试运行查询以获取用户列表并按最早日期对他们进行排序,但仅使用尚未过去的日期。因此,我试图运行一个子查询来获取这个日期,然后用它来对用户进行排序。

到目前为止,我有以下链接表但我不确定如何在 ZF 中添加子查询?

$oSelect = $this->getDbConnection()
->select()
->from(array('u' => 'users'), '*')
->joinInner(array('d' => 'user_dates')
, 'u.user_id = d.user_id', array('start_date', 'end_date'))

子查询将是这样的:

SELECT start_date FROM user_dates d
WHERE d.user_id=u.user_id && start_date > NOW()
ORDER BY start_date ASC LIMIT 0,1

谢谢

所以我可以执行以下操作:

$oSelect = $this->getDbConnection()
->select()
->from(array('u' => 'users'), '*')
->joinInner(array('d' => 'user_dates')
, 'u.user_id = d.user_id', array('start_date' =>
new Zend_Db_Expr('SELECT start_date FROM user_dates d WHERE d.user_id=u.user_id && start_date > NOW() ORDER BY start_date ASC LIMIT 0,1'), 'end_date;'))

我无法回显 $oSelect,因为我没有在这台机器上安装 ZF,但我希望实现的查询如下:

SELECT u . * , (

SELECT start_date
FROM dates d
WHERE d.user_id = u.user_id && end_date > NOW( )
ORDER BY start_date ASC
LIMIT 0 , 1
) AS date
FROM `users` u
INNER JOIN dates d ON u.user_id = d.user_id
WHERE end_date > NOW()
GROUP BY u.user_id
ORDER BY date ASC
LIMIT 0 , 30

你是对的,忽略上面的,查询应该是:

SELECT u. * , (

SELECT start_date
FROM dates d
WHERE d.user_id = u.user_id && end_date > NOW( )
ORDER BY start_date ASC
LIMIT 0 , 1
) AS date
FROM `users` u
GROUP BY u.user_id
HAVING date
ORDER BY date ASC
LIMIT 0 , 30

最佳答案

我不认为子查询与 Zend_Db_Select 一起工作,尽管我不是 100% 确定。 docs说参数必须是:

array|string|Zend_Db_Expr $name

您可以尝试为您的子查询创建一个 Zend_Db_Expr。

关于sql - ZF 子查询问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6238828/

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