求分组最大的sql语句

今天遇到一个问题,有一张数据库表格:

salary
uid,sal,time,state
------------------
1,1100,2012-1-1,1
1,1200,2012-2-1,1
1,1300,2012-3-1,1
2,2100,2012-1-1,1
2,2200,2012-2-1,1
3,3100,2012-1-1,1
4,4100,2012-1-1,1
4,4200,2012-2-1,1

希望得到这样一个查询:每一个成员的最后一次工资记录。即,希望得到的是:

1,1300,2012-3-1,1
2,2200,2012-2-1,1
3,3100,2012-1-1,1
4,4200,2012-2-1,1

这个实在不好弄,开始想max和groupby,不过无法取得出了max里面和groupby里面的其他字段。



然后百度找到了一个解决方法,挺有意思的:

select * from salary s1 where not exists (select * from salary where uid = s1.uid and time > s1.time)

大概解释是:找到time最大的,在uid相等的情况下,之后最大的那一条记录没办法满足time > s1.time(没有比它更大的)。

不过这这解决了“最大”这个问题,如果扩展一下,要取最大N个怎么办?

mysql在linux系统下的备份脚本

转自:http://os.chinaunix.net/a2006/0823/970/000000970876.shtml
空了修改修改就能备份整个站点了

脚本如下:

  1.     #!/bin/sh
  2.     # mysql_backup.sh: backup mysql databases and keep newest 5 days backup.
  3.     #
  4.     # Last updated: 20 March 2006
  5.     # ———————————————————————-
  6.     # This is a free shell script under GNU GPL version 2.0 or above
  7.     # Copyright (C) 2006 Sam Tang
  8.     # Feedback/comment/suggestions : http://www.real-blog.com/
  9.     # ———————————————————————-
  10.     # your mysql login information
  11.     # db_user is mysql username
  12.     # db_passwd is mysql password
  13.     # db_host is mysql host
  14.     # —————————–
  15.     db_user=“root”
  16.     db_passwd=“”
  17.     db_host=“localhost”
  18.     # the directory for story your backup file.
  19.     backup_dir=“”
  20.     # date format for backup file (dd-mm-yyyy)
  21.     time=“$(date +”%d-%m-%Y“)”
  22.     # mysql, mysqldump and some other bin’s path
  23.     MYSQL=“$(which mysql)”
  24.     MYSQLDUMP=“$(which mysqldump)”
  25.     MKDIR=“$(which mkdir)”
  26.     RM=“$(which rm)”
  27.     MV=“$(which mv)”
  28.     GZIP=“$(which gzip)”
  29.     # check the directory for store backup is writeable
  30.     test ! w $backup_dir >> echo “Error: $backup_dir is un-writeable.” >> exit 0
  31.     # the directory for story the newest backup
  32.     test ! “$backup_dir/backup.0/” >> $MKDIR “$backup_dir/backup.0/”
  33.     # get all databases
  34.     all_db=“$($MYSQL -u $db_user -h $db_host -p$db_passwd -Bse ‘show databases’)”
  35.     for db in $all_db
  36.     do
  37.      $MYSQLDUMP u $db_user h $db_host p$db_passwd $db | $GZIP 9 > “$backup_dir/backup.0/$time.$db.gz”
  38.     done
  39.     # delete the oldest backup
  40.     test “$backup_dir/backup.5/” >> $RM rf “$backup_dir/backup.5”
  41.     # rotate backup directory
  42.     for int in 4 3 2 1 0
  43.     do
  44.      if(test “$backup_dir”/backup.“$int”)
  45.      then
  46.      next_int=`expr $int + 1`
  47.      $MV “$backup_dir”/backup.“$int” “$backup_dir”/backup.“$next_int”
  48.      fi
  49.     done

php操作mysql数据库

在采用了php和mysql作为开发服务器端工具之后,首先就是怎么在php中去读取,修改数据库中的数据。
php内置了很多以mysql_开头的函数来进行mysql数据库的操作,非常方便。这里用一个例子来说明常用函数的使用吧。

以feedback功能为例,设计一个数据库表格,有以下字段
fbID,fbContent,fbEmail,fbName,fbTime

首先用户通过http post方法进行一次反馈操作,那么遇到的数据库操作就有:打开数据库连接,选择数据库,执行insert语句,断开数据库。即:
1.连接数据库
$db = @mysql_connect('localhost','dbusername','dbpassword') or die('db connect error');
2.选择数据库
@mysql_select_db('testapi',$db) or die('db select error');
3.执行insert查询语句将数据插入数据库
$sqlInsert = "insert into feedbacks (fbContent,fbEmail,fbName,fbTime) value ('".$feedBackArray['content']."','".$feedBackArray['email']."','".$feedBackArray['name']."','".$feedBackArray['time']."')";
@mysql_query($sqlInsert,$db) or die('db insert error');

4.断开数据库连接
mysql_close($db);
以上就是在php中插入数据到mysql数据库中的一个方法,对其中的insert语句做一些变化,也就实现了各种对数据库的操作了。

接下来的另一个方面是如何从mysql中查询数据,以及如何使用查询得到的数据。其中连接数据库,选择数据库,断开连接同上,只是第三步有说区别:

  1. $fbResultsFromDB = @mysql_query ( ‘select * from feedbacks’, $db ) or die ( ‘db select error’ );
  2. $row = mysql_fetch_row ( $fbResultsFromDB );
  3. echo ‘<table><tr><td>ID</td><td>Content</td><td>Email</td><td>Name</td><td>GMTTime</td></tr>’;
  4. while ( ! empty ( $row ) ) {
  5.     echo “<tr>”;
  6.     echo “<td>” . $row [0] . “</td>”;
  7.     echo “<td>” . $row [1] . “</td>”;
  8.     echo “<td>” . $row [2] . “</td>”;
  9.     echo “<td>” . $row [3] . “</td>”;
  10.     echo “<td>” . $row [4] . “</td>”;
  11.     echo ‘</tr>’;
  12.     $row = mysql_fetch_row ( $fbResultsFromDB );
  13. }
  14. echo ‘</table>’;
  15. mysql_free_result ( $fbResultsFromDB );

使用mysql_query函数来得到查询结果,对查询结果不断调用mysql_fetch_row方法来获取每一行的数据,得到的数据是一个array。以上代码片段是将查询到的数据以表格形式打印在浏览器上。