这个是我写的
难点在于怎么解决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
难点在于怎么解决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
=============
这句话有点奇怪,
还有一点,b中的name都相同么?
a.time>'2007-8-13');
+----------+
| count(*) |
+----------+
| 2 |
+----------+
1 row in set (0.02 sec)
"mysql是4的"
=============
这句话有点奇怪,
还有一点,b中的name都相同么?我表达能力不好吧。
b中的name不一定相同,我只是举例子。。
b和另外一张表是多对一的关系不过这个不重要~~~写错了应该是 现在要统计出b有多少条记录最近2天没有在a中插入新记录
谢谢,,但是sql~~不支持子查询~~
a where a.time>'2007-8-13' and b.id=a.bid);
兄弟,挣你分太不容易了.
你不会自己改写下么?
看一下mysql版本啊~
楼主都提醒两次了,mysql4不支持子查询。完毕!
在不支持子查询的情况下楼主还是考虑查两次吧。
打算查2此了。。
先查询A种的记录,然后放在内存,,因为需要多次用到。我听我公司的前辈说mysql4用in可能会错误,数据多的时候。。不知道是不是真的~~
表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 |
+----+-------------+-------+------+---------------+------+---------+-----------+------+----------------------------------------------+ |
+----+-------------+-------+------+---------------+------+---------+-----------+------+----------------------------------------------+
ON a.bid = b.id
WHERE a.time IS NULL or a.time < DATE_ADD(CURDATE(),INTERVAL -2 DAY);如果对的话,给点小分我啊,嘿嘿