inline-block justify实现列表两端对齐

适用条件:

1、一行的li间距宽度 小于两个li的宽度之和;
2、li个数刚好满行

条件1大部分都能满足的,所以主要就是刚好满行的情况。

相关代码片段

ul{
    text-align:justify;
    text-justify:distribute;
    font-size:0;
    letter-spacing:-4px;/*解决inline-block间隙表现不一致 bug*/
}
ul li {
    display:inline-block;
    *display:inline;
    *zoom:1;
    font-size:12px;
    letter-spacing:0;
    vertical-align:top;
}
ul li.justify_fix {
    width:100%;
    height:0;
    line-height:0;
    font-size:0;
    overflow:hidden;
    margin:0;
    padding:0;
}

html结构如下

<divclass="container">
    <ul>
        <li></li>
        <li></li>
        <li></li>
        <li></li>
        <li></li>
        <li></li>
        <li></li>
        <li></li>
        <li></li>
        <li></li>
        <li></li>
        <li></li>
        <!--  必须空出一个li 来fix bug -->
        <liclass="justify_fix"></li>
    </ul>
</div>

mysql group by 无数据补0 方法

来看下这个SQL,这个SQL的意思是获取需求ID的数量及需求价格 并按需求类型分组显示。

SELECT `require_type_id` , COUNT(  `require_id` ) AScount,
SUM(  `require_final_cost` ) ASprice
FROM `tb_require`
WHEREDATE_FORMAT(  `require_start_date` ,  '%Y-%m') = DATE_FORMAT(  '2012-10-1',  '%Y-%m')
GROUPBY  `require_type_id`
1

得到如下数据:

但是没有数据的部分就无法显示出来了。

如果要将group by的数据显示完整,没有数据的字段显示0,可以使用子查询和 右连接查询。

改造的sql语句如下:

SELECTtb_type.`type_id` , IF(countIS NULL , 0, count) ascount  ,
IF(price ISNULL , 0, price) asprice
FROM
(select`require_type_id`,count(`require_id`) ascount  ,
sum(`require_final_cost`) asprice
FROMtb_require
wheredate_format(`require_start_date`,'%Y-%m')=  date_format('2012-10-1','%Y-%m')
GROUPBY `require_type_id`) indTable
RIGHTJOIN `tb_type` onindTable.`require_type_id` = `tb_type`.`type_id`
2

这样得到的数据则包含tb_type表所有的字段内容了。

这种方式适用于两个现有的表进行联合查询,但是有时候我们需要按日期进行分组。这个时候我们就需要创建个日期表了。
一个例子:

新建一个week表 week(id) 就是1-53

然后,采用连接查询。

SELECTweek.id , IF(amount ISNULL , 0, amount)
 
FROM
(SELECTWEEKOFYEAR(时间) AsperWeek  ,SUM(数量) ASamount FROM你的表 GROUPBY perWeek) indTable 
 
RIGHTJOIN week onindTable.perWeek = week.id;

除了if也可以用case then.

SELECT  CASE when c.co IS NULL then 0 else c.co END count,b.id,b.contact_name,b.team_name FROM team b
LEFT JOIN (SELECT count(*) co,a.team_id FROM member_team a GROUP BY a.team_id) c ON b.id = c.team_id