怎样用sql语句查询最近团购列表信息。

mysql,团购表 team_found

开团ID商品ID团开始时间团结束时间商品名称
212021-3-23 11:00:002021-3-23 11:30:00
322021-3-23 12:00:002021-3-23 12:30:00
442021-3-23 14:00:002021-3-23 14:30:00
562021-3-23 16:00:002021-3-23 16:30:00
672021-3-23 16:00:002021-3-23 16:30:00
1172021-3-23 16:00:002021-3-23 16:30:00
1242021-3-23 19:00:002021-3-23 19:30:00
1352021-3-23 20:00:002021-3-23 20:30:00
1432021-3-23 21:00:002021-3-23 21:30:00
1582021-3-24 11:00:002021-3-24 11:30:00
1682021-3-24 11:00:002021-3-24 11:30:00

怎样查询出,整点的,未开始拼团的,或者正在拼团的数据。

比如:现在是2021-3-23 10:21:30,查询后,显示出来的是,开团ID=2,猪,这一条数据。

开团ID商品ID团开始时间团结束时间商品名称
212021-3-23 11:00:002021-3-23 11:30:00

猪是距离当前时间最近的,还未开始的,一条数据,所以显示出来,其他不显示了。

如果现在是 2021-3-23 12:05:05 ,那么查出来是, 开团ID=3,狗,这一条数据。

开团ID商品ID团开始时间团结束时间商品名称
322021-3-23 12:00:002021-3-23 12:30:00

为什么不是id=4的猫,而是id=3的狗,因为狗的拼团结束时间还未到,还没结束。所以显示狗

如果现在是 2021-3-23 21:31:00 ,那么查出来是.

开团ID商品ID团开始时间团结束时间商品名称
1582021-3-24 11:00:002021-3-24 11:30:00
1682021-3-24 11:00:002021-3-24 11:30:00

23号的牛已过结束时间,所以显示24号,id=15,16的 兔。

这种sql能直接查出来吗?没啥思路,感觉sql不能直接查出这种混合结果。总是显示,未开始,或者正在进行的。

数据库结构,是不是还少了点什么。

大概总意思就是一句话,如果正在进行的团购表,没有数据,那么就显示距离当前时间最近的未开始的。

阅读 1.8k
1 个回答

我理解的你的意思如下

  1. 如果有团购正在进行, 查询出来
  2. 如果没有团购正在进行, 查询时间最近, 即将要开始的团购, 而不是所有未开始的所有团购

team_found 表数据
image.png

测试: 正在进行的团购
image.png

测试: 即将到来的团购
image.png

SELECT
    t4.*,
    now() '当前时间'
FROM
(

SELECT
    substring_index( substring_index( a.team_id_list, ',', b.help_topic_id + 1 ), ',',- 1 ) team_id 
FROM
    (
    
SELECT
    team_id_list
FROM
    (
        SELECT
            team_id_list
        FROM
            (
                SELECT
                    GROUP_CONCAT( team_id ) team_id_list 
                FROM
                    team_found 
                WHERE
                    team_start_time <= NOW() AND team_end_time > NOW() 
                    
                UNION ALL

                SELECT
                    team_id_list 
                FROM
                (
                    SELECT
                        GROUP_CONCAT( team_id ) team_id_list 
                    FROM
                        team_found 
                    WHERE
                        team_start_time > NOW() 
                    GROUP BY
                        team_start_time,
                        team_end_time 
                        LIMIT 1
                ) t0
    
            ) t1
            
            WHERE
                t1.team_id_list IS NOT NULL 
            LIMIT 1
    )t2
    ) a
    JOIN mysql.help_topic b ON b.help_topic_id < ( length( a.team_id_list ) - length( REPLACE ( a.team_id_list, ',', '' )) + 1 )
    
    ) t3
    left JOIN team_found t4 ON t3.team_id = t4.team_id
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题