• mysql操作遇到的坑(第二版)


    1、通过条件查询出上一条与下一条

    sql说明:本表关联本表,然后通过其中一个表,查询出对应的条件,再用另外一个表求出上一条与下一条的数据,求出来的数据是多条的

    SELECT

     ua.id,

     ua.wx_pages,

     ua.wx_pages_source,

     uaa.id as uaa_id,

     uaa.wx_pages,

     uaa.wx_pages_source

    FROM

     ds_user_action AS ua

    JOIN ds_user_action AS uaa ON ua.user_id = uaa.user_id // 用会员ID作为关联条件,两张表出来的数据是不同的,其中一张表,专门根据条件用来查询,另外一个没有加条件的表,则用来求上一条与一条数据,切记,不要用主键ID

    WHERE

     uaa.wx_pages LIKE '%shopping/checkout%'

    AND uaa.wx_pages_source LIKE '%goods/goods%'

    AND uaa.user_id = 179135

    AND ua.id = (

      SELECT

       max(id)

      FROM

       ds_user_action as uaaa

      WHERE

       uaaa.id < uaa.id

      AND uaaa.user_id = 179135

     )

    2、CASE WHEN 判断条件 THEN 值 ELSE 被动值 END 的结果,判断条件排序

    (1)ELSE用NULL,count(NULL) == 0 , count(0) == 1

    SELECT

      ld.*, ldt.order_state,

      ldt.uid,

      count(

      CASE

      WHEN (ldt.order_state = 1) && (ldt.uid = 179135) THEN

      1

      ELSE

      NULL

      END

    ) AS onum

    FROM

    ds_lucky_draw AS ld

    LEFT JOIN ds_lucky_deposit AS ldt ON ld.ld_id = ldt.lid

    WHERE

    ld.`status` = 1

    AND ld.lottery_time >= 1564109614

    GROUP BY

    ld.ld_id

    ORDER BY

    onum DESC,

    ld.lottery_time DESC

    (2)这个直接就用的case判断

    SELECT

      ld.*, ldt.order_state,

      g.goods_name,

      ldt.uid,

      CASE

      WHEN (ldt.order_state = 1) && (ldt.uid = '.$user_id.') THEN

      1

      WHEN ld.start_time <= 1564625127 && ld.lottery_time > 1564625127 THEN

      2

      WHEN ld.start_time >= 1564625127 THEN

      3

      ELSE

      0

    END onum

    FROM

    ds_lucky_draw AS ld

    LEFT JOIN ds_lucky_deposit AS ldt ON ld.ld_id = ldt.lid

    LEFT JOIN ds_goods AS g ON ld.goods_id = g.goods_id

    WHERE

    ld.`status` = 1

    AND ld.lottery_time >= 1564625127

    GROUP BY

    ld.ld_id

    ORDER BY

    onum DESC,

    ld.sort DESC;

    3、求出max与本条纪录字段

    SELECT

      lba_id,

      price,

      add_time

    FROM

    ds_live_broadcast_auction AS lba_a

    WHERE

    lba_a.price = (

      SELECT

        max(price)

      FROM

      ds_live_broadcast_auction AS lba_b

    ORDER BY add_time asc

    )

    limit 1; # 如果价格有多条相同的情况

    后续还会更新,谢谢各们亲关注!

  • 相关阅读:
    获取最近6个月的年月(yyyyMM,不包括当月)
    checkbox与<c:forEach>在开发中遇到的问题记录
    MyBatis开发-->增删改
    MyBatis开发-->接口方式编程
    MyBatis开发-->入门
    android-async-http框架之与网络进行数据交互
    android-async-http框架之与服务器进行数据交互
    jQuery截取{}里的字符串及获取json里的值
    SSH整合之三:添加Hibernate环境且使之与Spring进行整合
    angular源码剖析之Provider系列--QProvider
  • 原文地址:https://www.cnblogs.com/FLy-1992/p/11464792.html
Copyright © 2020-2023  润新知