这个是我写的
难点在于怎么解决a记录中既符合2天内的条件,但又有记录在2天前的
SELECT * FROM `b`left join a on a.bid = b.id where  b.name='willko' and (a.bid is null or a.time < '2007-8-13') group by b.id

解决方案 »

  1.   

    现在要统计出b有多少条记录最近2天没有在b中插入新记录
    =============
    这句话有点奇怪,
    还有一点,b中的name都相同么?
      

  2.   

    mysql> select count(*) from b where b.id not in(select distinct bid from a where
     a.time>'2007-8-13');
    +----------+
    | count(*) |
    +----------+
    |        2 |
    +----------+
    1 row in set (0.02 sec)
      

  3.   

    楼上看清楚点....
    "mysql是4的"
      

  4.   

    现在要统计出b有多少条记录最近2天没有在b中插入新记录
    =============
    这句话有点奇怪,
    还有一点,b中的name都相同么?我表达能力不好吧。
    b中的name不一定相同,我只是举例子。。
    b和另外一张表是多对一的关系不过这个不重要~~~写错了应该是  现在要统计出b有多少条记录最近2天没有在a中插入新记录
      

  5.   

    to wildlily980:~~
    谢谢,,但是sql~~不支持子查询~~
      

  6.   

    mysql> select count(*) from b where not exists(select distinct bid from
    a where a.time>'2007-8-13' and b.id=a.bid);
    兄弟,挣你分太不容易了.
    你不会自己改写下么?
      

  7.   

    你php版都5个三角星了.比我还多,怎么会不知道in可以用exists代替?
      

  8.   

    楼上啊
    看一下mysql版本啊~
    楼主都提醒两次了,mysql4不支持子查询。完毕!
    在不支持子查询的情况下楼主还是考虑查两次吧。
      

  9.   

    恩~~
    打算查2此了。。
    先查询A种的记录,然后放在内存,,因为需要多次用到。我听我公司的前辈说mysql4用in可能会错误,数据多的时候。。不知道是不是真的~~
      

  10.   

    最新的~~~在5上测试的~~效率不知怎样
    表a增加了索引
    ALTER TABLE `a` DROP INDEX `bid` ,
    ADD INDEX `bid` ( `bid` , `time` ) 
    EXPLAIN SELECT SQL_CALC_FOUND_ROWS max( a.time )
    FROM `b`
    LEFT JOIN a ON a.bid = b.id
    WHERE b.name = 'willko'
    AND (
    a.bid IS NULL
    OR (
    to_days( now( ) ) - to_days( a.time )
    ) >=1
    AND (
    to_days( now( ) ) - to_days( a.time )
    ) <=4
    )
    GROUP BY a.bid请问这个还可以优化吗?
    +----+-------------+-------+------+---------------+------+---------+-----------+------+----------------------------------------------+
    | id | select_type | table | type | possible_keys | key  | key_len | ref       | rows | Extra                                        |
    +----+-------------+-------+------+---------------+------+---------+-----------+------+----------------------------------------------+
    |  1 | SIMPLE      | b     | ref  | name          | name | 22      | const     |    2 | Using where; Using temporary; Using filesort |
    |  1 | SIMPLE      | a     | ref  | bid           | bid  | 4       | test.b.id |    1 | Using where; Using index                     |
    +----+-------------+-------+------+---------------+------+---------+-----------+------+----------------------------------------------+         |
    +----+-------------+-------+------+---------------+------+---------+-----------+------+----------------------------------------------+
      

  11.   

    我不太清楚你的意思,凭我自己的理解写了一段,看下是否满足你的条件SELECT * FROM a RIGHT JOIN b
    ON a.bid = b.id
    WHERE a.time IS NULL or a.time < DATE_ADD(CURDATE(),INTERVAL -2 DAY);如果对的话,给点小分我啊,嘿嘿