mysqlはunionを使用してクエリコレクションの概要を実行します

シナリオ:毎日アクティビティがあるかどうかを確認する必要があり、フロントエンドは時間範囲を示します

コード:

public List<Integer> getTimeRangeCount(String startTIme, String endTime) throws ParseException {
        //计算时间差的天数:例如2020-01-01 00:00:00 到2020-01-03 02:00:00计算结果为[2020-01-01,2020-01-02]
        int daysBetween = DateUtil.getDaysBetween(startTIme, endTime);
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        List<String> query = Lists.newArrayList();
        query.add(sdf.format(sdf.parse(startTIme)));
        for (int i = 0; i < daysBetween; i++) {
            Calendar calendar = new GregorianCalendar();
            calendar.setTime(sdf.parse(startTIme));
            calendar.add(Calendar.DATE, 1);
            startTIme = sdf.format(calendar.getTime());
            query.add(startTIme);
        }
        List<Integer> timeRangeCount = activityMapper.getTimeRangeCount(query);
        return timeRangeCount;
    }

/**
     * 查询一个时间段中每天是否有活动
     */
    List<Integer> getTimeRangeCount(@Param("someDays") List<String> someDays);

 <select id="getTimeRangeCount" resultType="java.lang.Integer">
        <foreach collection="someDays" item="someDay" separator="union all">
            (select count(1) from `activity` where start_time like concat(#{someDay}, '%'))
        </foreach>
    </select>

 

おすすめ

転載: blog.csdn.net/qq_39809613/article/details/114986403
おすすめ