CREATE TABLE `news` (
  `box_news_id` int(11) NOT NULL auto_increment,
  `news_added_date` datetime NOT NULL default '0000-00-00 00:00:00',
  `news_modified_date` datetime default NULL,
  `news_start_date` datetime default NULL,
  `news_end_date` datetime default NULL,
  `news_published_date` datetime default NULL,
  `news_status` tinyint(1) default '0',
  `more_news_page` tinyint(1) default '0',
  PRIMARY KEY  (`box_news_id`)
) TYPE=MyISAM AUTO_INCREMENT=1;CREATE TABLE `news_content` (
  `box_news_id` int(11) NOT NULL default '0',
  `languages_id` int(11) NOT NULL default '1',
  `news_title` varchar(64) NOT NULL default '',
  `news_content` text NOT NULL,
  PRIMARY KEY  (`languages_id`,`box_news_id`)
) TYPE=MyISAM;
我现在又这两张表,上面是放新闻除文字外的信息,下面这个是新闻标题和新闻内容,news_status是判断是否显示这条新闻的,我现在想实现永远只有50条新闻显示,而且是新加的新闻显示。

解决方案 »

  1.   

    搞不清楚这个需求跟触发器有什么关系,你每次order by news_added_date limit 0,50不就成了。
      

  2.   

    你建触发器是要完成什么功能?把news_added_date排名倒数50外的news_status设为1?DELIMITER |
    CREATE TRIGGER trigger_news AFTER INSERT ON news FOR EACH ROW
    BEGIN
    UPDATE news t1,
    (SELECT t1.box_news_id,COUNT(*) ct FROM news t3,news t4 WHERE t3.news_added_date>t4.news_added_date) t2 
    SET t1.news_status=1 
    WHERE t1.news_added_date=t2.news_added_date AND t2.ct>=50;
    END;
    |
    DELIMITER ;
      

  3.   

    MYSQL 中触发器无法对当前表的其它记录进行UPDATE/INSERT/DELETE操作!
    所以你要求的功能 在`news`表中INSERT记录的同时将某条记录的`news_status` 改为0 是无法通过 触发器 来实现。
      

  4.   

    那么我通过news_content这个表来处理news表可以吗,box_news_id两个表示关联的。