php实现只保留mysql中最新1000条记录

<?php
mysql_connect("localhost","root","root");
mysql_select_db("test");
//保留最新的1000条记录
$limit=1000;
$query="select `id` from `news`";
$result=mysql_query($query);
$num=mysql_num_rows($result);
if($num>$limit){
$query="select `id` from `news` order by `id` desc limit ".$limit;
$result=mysql_query($query);
mysql_data_seek($result,$limit-1);
$data=mysql_fetch_array($result);
$query="delete from `news` where `id`<'$data[id]'";
if(mysql_query($query)){
echo "数据库中原有".$num."条记录,多余的".($num-$limit)."条记录被成功删除,现在还剩余".$limit."条记录!";
}
}else{
echo "数据记录不足".$limit."条!没有必要删除!";
}
?>

test.sql

-- phpMyAdmin SQL Dump
-- version 3.1.5-rc1
-- http://www.phpmyadmin.net
--
-- 主机: localhost
-- 生成日期: 2010 年 08 月 19 日 05:47
-- 服务器版本: 5.0.18
-- PHP 版本: 5.2.8

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";

/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;

--
-- 数据库: `test`
--

-- --------------------------------------------------------

--
-- 表的结构 `news`
--

CREATE TABLE IF NOT EXISTS `news` (
`id` int(11) unsigned NOT NULL auto_increment,
`title` varchar(256) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=gb2312;

以上所述就是本文的全部内容了,希望大家能够喜欢。

(0)

相关推荐

  • php简单操作mysql数据库的类

    本文实例讲述了php简单操作mysql数据库的类.分享给大家供大家参考.具体如下: <?php /** * Database class * * @version: 2.2 * @revised: 27 may 2007 * **/ class Database { var $host; var $name; var $user; var $pass; var $prefix; var $linkId; function Database($mysql) { foreach($mysql as

  • PHP中常用的几个 mysql操作

    显示数据库或表: 复制代码 代码如下: show databases;//然后可以use database_name; show tables; 更改表名: 复制代码 代码如下: alter table table_name rename new_t; 添加列 : 复制代码 代码如下: alter table table_name add column c_n column attributes; 删除列: 复制代码 代码如下: alter table table_name drop colum

  • php连接MySQL的两种方式对比

    记录一下PHP连接MySQL的两种方式. 先mock一下数据,可以执行一下sql. /*创建数据库*/ CREATE DATABASE IF NOT EXISTS `test`; /*选择数据库*/ USE `test`; /*创建表*/ CREATE TABLE IF NOT EXISTS `user` ( name varchar(50), age int ); /*插入测试数据*/ INSERT INTO `user` (name, age) VALUES('harry', 20), ('

  • php计算整个mysql数据库大小的方法

    本文实例讲述了php计算整个mysql数据库大小的方法.分享给大家供大家参考.具体如下: 这里用MB,KB或者GB的格式返回计算结果. function CalcFullDatabaseSize($database, $db) { $tables = mysql_list_tables($database, $db); if (!$tables) { return -1; } $table_count = mysql_num_rows($tables); $size = 0; for ($i=0

  • php实现mysql数据库分表分段备份

    分卷导出思路:统计sql语句变量的长度,按1个字符当成1 字节比较,如果大于设定分卷大小,则写入一个sql文件(我也不知道这样统计是否稳当,这也是借鉴其他的人的). 分卷导入思路:按行读取sql文件,将每一行当作完整的sql语句存到数组再循环执行插入数据库就可以了,但是在创建表语句分了多行,这个需要单独处理(就这个花了我好长时间的): <?php //宋正河 转载请注明出处 set_time_limit(0); header('content-type:text/html;charset=utf

  • 在php和MySql中计算时间差的方法详解

    在php中计算时间差有时候是件麻烦的事!不过只要你掌握了日期时间函数的用法那这些也就变的简单了. 最近在研究自己爱围脖的时候就要计算到恋爱天数,这需要php根据每天的日期进行计算,下面就来谈谈实现这种日期计算的几种方法: (1) 如果有数据库就很容易了!若是MSSQL可以使用触发器!用专门计算日期差的函数datediff()便可!若是MYSQL那就用两个日期字段的差值计算的计算结果保存在另一个数值型字段中!用时调用便可! (2)如果没有数据库,那就得完全用php的时间日期函数! 下面主要说明之:

  • php 在线导入mysql大数据程序

    php 在线导入 mysql 大数据程序 <?php header("content-type:text/html;charset=utf-8"); error_reporting(E_ALL); set_time_limit(0); $file='./test.sql'; $data=file($file); echo "<pre>"; //print_r($data); $data_new=array(); $tmp=array(); fore

  • 利用php+mysql来做一个功能强大的在线计算器

    找了很久,发现网上资料很少,于是想自己动手写,慢慢的发现问题多了,自己不怎么通算法,写一个计算式子短点还好,长了就挂了,再长点恐怕就要死机. 有一天做做mysql突然发现原来mysql功能这么强大,可以直接计算字符串...哈哈 这下可就高兴了. 代码还超级简单 就做了一个ajax的计算器 有式子错误提示 还可以时时显示输入的式子 有兴趣的朋友可以看看 更多的功能可以自己去开发 演示地址:http://www.jianlila.com/jsq.php jquer.js自己去下载 jsq1.php

  • 在php和MySql中计算时间差的方法

    最近在研究自己爱围脖的时候就要计算到恋爱天数,这需要php根据每天的日期进行计算,下面就来谈谈实现这种日期计算的几种方法: (1) 如果有数据库就很容易了!若是MSSQL可以使用触发器!用专门计算日期差的函数datediff()便可! 若是MYSQL那就用两个日期字段的差值计算的计算结果保存在另一个数值型字段中!用时调用便可! (2)如果没有数据库,那就得完全用php的时间日期函数! 下面主要说明之: 例:计算1998年5月3日到1999-6-5的天数: 复制代码 代码如下: $startdat

  • php实现只保留mysql中最新1000条记录

    <?php mysql_connect("localhost","root","root"); mysql_select_db("test"); //保留最新的1000条记录 $limit=1000; $query="select `id` from `news`"; $result=mysql_query($query); $num=mysql_num_rows($result); if($num&

  • Mysql中一千万条数据怎么快速查询

    目录 普通分页查询 如何优化 偏移量大 采用id限定方式 优化数据量大问题 普通分页查询 当我们在日常工作中遇到大数据查询的时候,第一反应就是使用分页查询. mysql支持limit语句来选取指定的条数数据,而oracle可以使用rownum来选取 mysql分页查询语句如下: SELECT * FROM table LIMIT [offset,] rows | rows OFFSET offset 第一个参数用来指定第一个返回记录行的偏移量 第二个参数指定返回记录行的最大数目 当相同的偏移量时

  • Mysql查询最近一条记录的sql语句(优化篇)

    下策--查询出结果后将时间排序后取第一条 select * from a where create_time<="2017-03-29 19:30:36" order by create_time desc limit 1 这样做虽然可以取出当前时间最近的一条记录,但是一次查询需要将表遍历一遍,对于百万以上数据查询将比较费时:limit是先取出全部结果,然后取第一条,相当于查询中占用了不必要的时间和空间:还有如果需要批量取出最近一条记录,比方说:"一个订单表,有用户,订

  • 使用distinct在mysql中查询多条不重复记录值的解决办法

    在使用mysql时,有时需要查询出某个字段不重复的记录,虽然mysql提供有distinct这个关键字来过滤掉多余的重复记录只保留一条,但往往只用它来返回不重复记录的条数,而不是用它来返回不重记录的所有值.其原因是distinct只能返回它的目标字段,而无法返回其它字段,这个问题让我困扰了很久,用distinct不能解决的话,我只有用二重循环查询来解决,而这样对于一个数据量非常大的站来说,无疑是会直接影响到效率的.所以我花了很多时间来研究这个问题,网上也查不到解决方案,期间把容容拉来帮忙,结果是

  • mysql中RAND()随便查询记录效率问题和解决办法分享

    最近由于需要大概研究了一下MYSQL的随机抽取实现方法.举个例子,要从tablename表中随机提取一条记录,大家一般的写法就是:SELECT * FROM tablename ORDER BY RAND() LIMIT 1. 有两个方法可以达成以上效果. 1.新建一个表,里面存着 -5 至 5 之间的数.再利用order by rand()得到随机数. #建立指定范围数据表 复制代码 代码如下: #auther: 小强(占卜师) #date: 2008-03-31 create table r

  • mysql批量更新多条记录的同一个字段为不同值的方法

    首先mysql更新数据的某个字段,一般这样写: UPDATE mytable SET myfield = 'value' WHERE other_field = 'other_value'; 也可以这样用in指定要更新的记录: UPDATE mytable SET myfield = 'value' WHERE other_field in ('other_values'); 这里注意 'other_values' 是一个逗号(,)分隔的字符串,如:1,2,3 如果更新多条数据而且每条记录要更新

  • Mysql如何查询某条记录在分页的第几页详析

    前言 在实践中我们会遇到这样的问题,知道某条记录的id,然后需要判断此条记录如果按照id进行排序分页,此条记录在第几页.今天这篇文章为大家提供一个思路. 下面话不多说了,来一起看看详细的实现方法吧 根据ID查询分页位置 根据ID来查询分页位置,比如按照ID的倒序排列,则可通过以下SQL查询出大于此ID记录数: select count(id) from user where id > 5; 示例中user为表名,5位待匹配的id.很显然,因为是倒序排序只需查找大于此id的记录数即可,如果是正序排

  • mysql快速添加百万条记录的语句

    使用Insert Select语句插入记录时,必须遵循以下原则.用Select语句选择数据时,不能从被插入数据的表中选择行.指定插入的表后所包含的字段数目必须与Select语句中返回的字段数目相同.指定插入的表后所包含的字段数据类型必须与Select语句中返回的字段数据类型相同或系统可以自动转换.  复制代码 代码如下: INSERT INTO ler_items( classid, title, address, zipcode )SELECT classid, title, address,

  • 随机提取Access/SqlServer数据库中的10条记录的SQL语句

    代码如下:本文相关代码如下:Access:select top n * from table order by rnd(id)'id为数据库的自动编号字段Sql Server:select top n * from table order by newid() 但在ASP+Access中,或许是因为缓存的原因,第一条SQL语句无法得到预期的结果,而VB+Access则可以.解决办法是改用如下SQL语句: 本文相关代码如下:RandomizesSqlTxt="Select top 10 * Fro

  • 利用ROW_NUMBER() OVER函数给SQL数据库中每一条记录分配行号的方法

    从SQL Server 2005开始,增加了一个新的函数Row_Number(),他的一个很伟大的作用就是可以在数据表中添加一列从1开始的行号,这样大大代替所有多余的代码来产生行号.下面就教大家如何使用Row_Number()函数. 假设数据库中有如下表: 复制代码 代码如下: id    name 1    aa 3    bb 4    cc 执行如下SQL语句后将得到如下结果: SELECT ROW_NUMBER() OVER(ORDER BY id) as rowNum,* FROM 表

随机推荐