什么叫毫无意义,当然是有特殊要求才这么做了!你能搞定咩? select from tb where posttime-$timestamp<15 order by top?这样出来的结果是什么?只选置顶的???不置顶的不要了???真是。。不看清就乱说!
select from tb where to_days(posttime) > to_days(now()) - 15 or 1 order by topflag desc,posttime desc limit 20; 这样子不知道能否符合你的条件。 posttime为发布时间 topflag为置顶属性字段 里面的1代表其它成立的条件
keaizhong(可爱钟) :不行!!你的 or 1 不是就包括所有的了吗?
用户有访问时先 把 15天以上的UPDATE 之后 SELECT * FROM {table} WHERE 条件 ORDER BY 置顶标识符
TO keaizhong(可爱钟) 不 是吧!那如果我就是不要其它条件,就是所有的呢?看来你的方法也不行啊!谢谢先!
TO keaizhong(可爱钟) 你说的是你上面写的topflag吗??那你说条件要怎么写??比如我置顶时我topflag值为1,不置顶的为0 我要怎么写??
增加一字段存储设置置顶的时间。top datetime 设置置顶也要数据库自动完成?如果是就太怪异了。 查询语句 select * from tbl_name where adddate(top,interval 15 day)>=now() union select * from tbl_name where adddate(top,interval 15 day)<now(); 前半句提取符合置顶条件的记录,后半句提取其他的记录。用union子句连接成完整的查询结果
select from tb where posttime-$timestamp<15 order by top?这样出来的结果是什么?只选置顶的???不置顶的不要了???真是。。不看清就乱说!
这样子不知道能否符合你的条件。
posttime为发布时间
topflag为置顶属性字段
里面的1代表其它成立的条件
之后 SELECT * FROM {table} WHERE 条件 ORDER BY 置顶标识符
设置置顶也要数据库自动完成?如果是就太怪异了。
查询语句
select * from tbl_name where adddate(top,interval 15 day)>=now()
union
select * from tbl_name where adddate(top,interval 15 day)<now();
前半句提取符合置顶条件的记录,后半句提取其他的记录。用union子句连接成完整的查询结果
Union是什么意思??请问唠叨是不是PHPx中的唠叨版主? 我先试一下!
改成这样还能分级预置,例如一级预置,二级预置,三级预置代码:--------------------------------------------------------------------------------
SELECT *, IF(DATE_SUB(NOW(), INTERVAL 15 DAY)< posttime and pin>0,pin,0) as pinkey FROM posts WHERE `type`='t' ORDER BY pinkey DESC,id DESC
--------------------------------------------------------------------------------例如 pin=2 就是二级预置了
SQL数据(test数据库):代码:--------------------------------------------------------------------------------
CREATE TABLE `posts` (
`id` int(10) unsigned NOT NULL auto_increment,
`title` tinytext NOT NULL,
`posttime` datetime NOT NULL default '0000-00-00 00:00:00',
`type` char(1) NOT NULL default '',
`pin` tinyint(3) unsigned NOT NULL default '0',
PRIMARY KEY (`id`)
) TYPE=MyISAM AUTO_INCREMENT=9 ;--
-- 导出表中的数据 `posts`
-- INSERT INTO `posts` VALUES (1, '这是第一张帖子', '2005-04-15 08:00:00', 't', 1);
INSERT INTO `posts` VALUES (2, '这是第一张帖子的回复', '2005-04-15 09:11:00', 'r', 0);
INSERT INTO `posts` VALUES (3, '这是第二个主题', '2005-04-27 00:00:00', 't', 0);
INSERT INTO `posts` VALUES (4, '第三个主题', '2005-04-11 11:00:00', 't', 0);
INSERT INTO `posts` VALUES (5, '第四个主题', '2005-04-13 11:00:00', 't', 1);
INSERT INTO `posts` VALUES (6, '第五个主题', '2005-04-16 00:00:00', 't', 0);
INSERT INTO `posts` VALUES (7, '第七个主题', '2005-03-24 00:00:00', 't', 1);
INSERT INTO `posts` VALUES (8, '第八个主题', '2005-04-29 00:00:00', 't', 0);
-------------------------------------------------------------------------------------
select from tb where to_days(posttime) > to_days(now()) - 15 or 1 order by topflag desc,posttime desc limit 20;
这样子不知道能否符合你的条件。
posttime为发布时间
topflag为置顶属性字段
里面的1代表其它成立的条件
-------------------------------------------------------------------------------------
请问
1、to_days(posttime) > to_days(now()) - 15 条件得到的是什么?是不是发布时间是不是15天之前?2、or 1 又是什么?按你的意思如果没有其它条件可以不要是不是?两个条件加OR一下是不是发布时间15天之内的记录????
什么叫毫无意义,当然是有特殊要求才这么做了!你能搞定咩?
select from tb where posttime-$timestamp<15 order by top?这样出来的结果是什么?只选置顶的???不置顶的不要了???真是。。不看清就乱说!
-------------------
我不懂。我不说了,ok?
回复人: ashchen(陈辉) ( ) 信誉:120 2005-04-15 15:52:00 得分: 0
别让数据库变成了计算器
-----------------------
同意。
ps:说话不要那么冲。别人帮你不是义务。
有置顶标记的加上15天的描述!!然后在ORDER BY这个值!
经鉴定楼主是猪,这个问题一楼其实已经解决了还讨论到现在,纯粹找骂
以上方法觉得都不好(别打我:))
唠叨老大的我不知道好不好,感觉把时间那里adddate(top,interval 15 day)>=now()改成型如
top 〉= (now + 15 day)就最好了:)
其他的感觉都有可能造成遍历表。
orderby 后边跟 时间差排序最不赞成,order里的咚咚不要没有索引的,(尽量,呵呵,有的时候也是没有办法的。)
if哪个就看不清楚了,不过感觉效率好不到哪里去
赫赫,对于这个问题union可以胜任,但是如果太勉强的还是建议不要这样做,数据量大了以后就成垃圾了,宁可改php部分了:)