4 回答
TA贡献1804条经验 获得超2个赞
你可以试试下面的 SQL 脚本。
$this->db->select('*');
$this->db->from('payment p');
$this->db->join('users u','p.userid=u.id');
$this->db->where('p.user',"3");
$this->db->order_by("p.bookingId", "DESC");
$this->db->limit(2);
TA贡献2037条经验 获得超6个赞
我从你在评论中的回复中得到了你的观点。这是更新的 SQL 语句,它将产生您想要的结果
SELECT p.bookingId,
(SELECT MAX(x.bookingId) FROM payment x WHERE x.userid = p.userid)
AS lastBookingId,
p.userid, u.name
FROM payment p
LEFT JOIN users u ON p.userid = u.id
WHERE p.userid = 3;
使用内部 SQL 语句来避免由于使用聚合函数 (max) 导致结果仅显示一行而隐式添加的“分组依据”。
这是测试的输出:
TA贡献1803条经验 获得超3个赞
drop table if exists t;
create table t
(id int,bookingid int, userid int);
insert into t values
(1 , 142 , 3),
(2 , 146 , 2),
(3 , 148 , 3),
(4 , 154 , 5);
select t.userid,t.bookingid,s.maxbid
from t
join
(select userid, max(bookingid) maxbid ,count(*) cnt
from t
group by userid having cnt > 1
) s
on s.userid = t.userid
where t.userid = 3
order by t.bookingid;
子查询找到最大值并测试外部查询然后加入的预订 ID 的数量。
+--------+-----------+--------+
| userid | bookingid | maxbid |
+--------+-----------+--------+
| 3 | 142 | 148 |
| 3 | 148 | 148 |
+--------+-----------+--------+
2 rows in set (0.00 sec)
- 4 回答
- 0 关注
- 176 浏览
添加回答
举报