windows下定时备份mysql的计划任务

mkdir E:\mysql\backup_day\%date:~0,10%
cd E:\mysql\backup_day\%date:~0,10%
mysqldump -uroot -ppassword dbname|gzip > dbname.%time:~0,2%.sql

%date:~0,10%和%time:~0,2%分别是日期和时间和格式化,格式化成数字,以生成按日期目录生成的文件

如果是使用了xampp这样的集成环境,mysqldump的路径请手工指定。gzip 命令是我下载的gzip for windows,以便对数据进行压缩保存。

Mysql插入语句的5种写法。

  1. insert into tablename (id,name) value ('', 'xxx');
  2. insert into tablename (id,name) values ('', 'xxxxx');
  3. insert into tablename (id, name) value ('','xxx'),('','xxxxxxx');
  4. insert into tablename (id, name) values ('','xxx'),('','xxxxxxx');
  5. insert into tablename set id='id', name='xxxxx';

一般推荐第四种写法,这是SQL标准,在Oracle等其它数据库类型中通用性好,其它几种在Mysql App开发时,有特定的方便之处。

MySQL server has gone away的解决办法

最近做网站有一个站要用到WEB网页采集器功能,当一个PHP脚本在请求URL的时候,可能这个被请求的网页非常慢慢,超过了mysql的 wait-timeout时间,然后当网页内容被抓回来后,准备插入到MySQL的时候,发现MySQL的连接超时关闭了,于是就出现了“MySQL server has gone away”这样的错误提示,解决这个问题,我的经验有以下两点,或许对大家有用处:

第一种方法:

当然是增加你的 wait-timeout值,这个参数是在my.cnf(在Windows下台下面是my.ini)中设置,我的数据库负荷稍微大一点,所以,我设置的值 为10,(这个值的单位是秒,意思是当一个数据库连接在10秒钟内没有任何操作的话,就会强行关闭,我使用的不是永久链接 (mysql_pconnect),用的是mysql_connect,关于这个wait-timeout的效果你可以在MySQL的进程列表中看到 (show processlist) ),你可以把这个wait-timeout设置成更大,比如300秒,呵呵,一般来讲300秒足够用了,其实你也可以不用设置,MySQL默认是8个小 时。情况由你的服务器和站点来定。
继续阅读MySQL server has gone away的解决办法

一些PHP+PDO的查询技巧

1,类似PHP框架中的预处理,简单理解为可绑定参数自动传值

This example fetches data based on a key value supplied by a form. The user input is automatically quoted, so there is no risk of a SQL injection attack.

这个例子里获取的数据,根据用户提交的表单自动生成,不需要程序员判断变量,用户提交的数据将被自动转义,所有没有SQL注入的问题


<?php
$stmt = $dbh->prepare("SELECT * FROM users where name = ?");
if ($stmt->execute(array($_GET['name']))) {
while ($row = $stmt->fetch()) {
print_r($row);
}
}
?>

2,同上,自动赋值的另外一种代码样式


<?php
$stmt = $dbh->prepare("INSERT INTO REGISTRY (name, value) VALUES (?, ?)");
$stmt->bindParam(1, $name);
$stmt->bindParam(2, $value);

// insert one row
$name = 'one';
$value = 1;
$stmt->execute();

// insert another row with different values
$name = 'two';
$value = 2;
$stmt->execute();
?>

3,PHP+PDO+Mysql

<?php
try {
   $dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass);
   foreach ($dbh->query('SELECT * from FOO') as $row) {
      print_r($row);
   }
   $dbh = null;
} catch (PDOException $e) {
   print "Error!: " . $e->getMessage() . "<br/>";
   die();
}
?>

4,完善的事务处理功能

<?php
try {
  $dbh = new PDO('odbc:SAMPLE', 'db2inst1', 'ibmdb2',
      array(PDO::ATTR_PERSISTENT => true));
  echo "Connected\n";
  $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

  $dbh->beginTransaction();
  $dbh->exec("insert into staff (id, first, last) values (23, 'Joe', 'Bloggs')");
  $dbh->exec("insert into salarychange (id, amount, changedate)
      values (23, 50000, NOW())");
  $dbh->commit();

} catch (Exception $e) {
  $dbh->rollBack();
  echo "Failed: " . $e->getMessage();
}
?>

编译Mysql时出现configure: error: No curses/termcap library found的解决办法

在CentOS和Ubuntu下均提示以下错误,有时在PHP的安装时,也会遇到类似错误,百思不得其解,网上一些高人说可能是当前的Linux发行版缺少必要模块,都会出现以下错误:

checking for tgetent in -ltermcap... no
checking for termcap functions library... configure: error: No curses/termcap library found

有的朋友建议先安装ncurses,后来发现不安装也可以,主要是错误在配置参数上。

遇到的朋友可以在配置时,加上这样一条参数:--with-named-curses-libs=/usr/lib/libncursesw.so.5

最后的参数就是:

./configure --with-named-curses-libs=/usr/lib/libncursesw.so.5

到此,问题解决。

修复升级Mysql时的1577错误,附升级文件包

环境:Windows,Mysql5.x

理论上Linux下也一样。

错误提示"Please try to update your system table and to see if it solves your problem. mysql_upgrade is stored in the "bin" folder under the MySQL server installation path.";

错误分析:可能是直接复制不同版本之间的MYSQL数据库目录。比如我,备份了低版本的MYSQL数据库DATA到新版的目录下。

错误影响:数据库可以正常使用,但会造成一定的管理错误,如可视化mysql数据库管理工具Navicat for mysql的错误提示。

我是离不开Navicat的,虽不影响使用,但也得解决这个问题。

这个问题已经遇到几次了,不得不写下大篇文档纪念之。

方法很简单,使用mysql/bin目录下的mysql_upgrade.exe进行升级就可以了。

使用方法:

开始->运行->输入cmd回车,在操作提示符下输入

E:\APMServ5.2.6\MySQL5.1\bin\mysql_upgrade -uroot -pPWD

然后回车(将其中的E:\APMserv5.2.6改成你自己实际安装的目录,PWD改成你的密码即可),执行完以后就OK了。

当然,有一些版本的APMServ有精简,可能没有mysql_upgrade.exe和mysqlcheck.exe这两个文件,解决办法也很简单,直接下载一个对应版本的MYSQL免安装版本,将这两个文件复制过去就行了。

FML...

换了服务器以后,终于还是又遇上了这个问题,自己又下载了Mysql进行修复,麻烦呐。

遂将需要到的文件mysql_upgrade.exe和mysqlcheck.exe打包于后,备用。

bin

PHP+PDO+MSSQL的灾难。

PHP6默认就使用PDO进行数据库之间的连接方法了,本来以后可以等PHP6出来再去适应,想不到前天接下的一个项目却让我提前过了一把瘾。

灾难呀。

首先是PDO报错的方法,改成编号了,连接数据库的“数据库密码错误”却变成“8000”的错误代码,一搜,N种错误可能。

再次,我怎么感觉PDO的效率不那么理想,一个IP的连接,一直连接到超时都不报错。

最后,怎么还是感觉自己写的类好用,适应起来还真是别扭。

最后,很痛苦的事情出在PDO+MSSQL的分页上,真是灾难中的灾难。

这次的项目需要将MSSQL中的数据转换到Mysql中,本来想用PDO练练手的,结果却死也找不到PDO+MSSQL的分页类。习惯了到网上找资源、找类库、找函数,一时间找不到前辈们的杰作,真让人惶恐不已。前无古人,这种感觉未必那么有成就感。

MSSQL的分页历来被人诟病,相比之下,我真想说“Mysql,我爱死你了”。

好想发一个表情,结果没有,懒得倒腾了。一一!

MYSQL 数据库函数库备忘

一、数学函数
ABS(x)                    返回x的绝对值
BIN(x)          返回x的二进制(OCT返回八进制,HEX返回十六进制)
CEILING(x)                返回大于x的最小整数值
EXP(x)          返回值e(自然对数的底)的x次方
FLOOR(x)         返回小于x的最大整数值
GREATEST(x1,x2,...,xn)  返回集合中最大的值
LEAST(x1,x2,...,xn)       返回集合中最小的值
LN(x)                     返回x的自然对数
LOG(x,y)         返回x的以y为底的对数
MOD(x,y)                  返回x/y的模(余数)
PI()           返回pi的值(圆周率)
RAND()          返回0到1内的随机值,可以通过提供一个参数(种子)使RAND()随机数生成器生成一个指定的值。
ROUND(x,y)        返回参数x的四舍五入的有y位小数的值
SIGN(x)          返回代表数字x的符号的值
SQRT(x)          返回一个数的平方根
TRUNCATE(x,y)             返回数字x截短为y位小数的结果
二、聚合函数(常用于GROUP BY从句的SELECT查询中)
AVG(col)         返回指定列的平均值
COUNT(col)        返回指定列中非NULL值的个数
MIN(col)         返回指定列的最小值
MAX(col)         返回指定列的最大值
SUM(col)         返回指定列的所有值之和

GROUP_CONCAT(col)     返回由属于一组的列值连接组合而成的结果
三、字符串函数
ASCII(char)        返回字符的ASCII码值
BIT_LENGTH(str)      返回字符串的比特长度
CONCAT(s1,s2...,sn)    将s1,s2...,sn连接成字符串
CONCAT_WS(sep,s1,s2...,sn)  将s1,s2...,sn连接成字符串,并用sep字符间隔

INSERT(str,x,y,instr)    将字符串str从第x位置开始,y个字符长的子串替换为字符串instr,返回结果
FIND_IN_SET(str,list)   分析逗号分隔的list列表,如果发现str,返回str在list中的位置
LCASE(str)或LOWER(str)   返回将字符串str中所有字符改变为小写后的结果
LEFT(str,x)        返回字符串str中最左边的x个字符
LENGTH(s)         返回字符串str中的字符数

LTRIM(str)         从字符串str中切掉开头的空格
POSITION(substr,str)    返回子串substr在字符串str中第一次出现的位置
QUOTE(str)         用反斜杠转义str中的单引号
REPEAT(str,srchstr,rplcstr)返回字符串str重复x次的结果
REVERSE(str)        返回颠倒字符串str的结果
RIGHT(str,x)        返回字符串str中最右边的x个字符
RTRIM(str)         返回字符串str尾部的空格
STRCMP(s1,s2)       比较字符串s1和s2
TRIM(str)         去除字符串首部和尾部的所有空格
UCASE(str)或UPPER(str)   返回将字符串str中所有字符转变为大写后的结果
四、日期和时间函数
CURDATE()或CURRENT_DATE() 返回当前的日期
CURTIME()或CURRENT_TIME() 返回当前的时间
DATE_ADD(date,INTERVAL int keyword) 返回日期date加上间隔时间int的结果(int必须按照关键字进行格式化),如:SELECT DATE_ADD(CURRENT_DATE,INTERVAL 6 MONTH);
DATE_FORMAT(date,fmt)   依照指定的fmt格式格式化日期date值
DATE_SUB(date,INTERVAL int keyword) 返回日期date加上间隔时间int的结果(int必须按照关键字进行格式化),如:SELECT DATE_SUB(CURRENT_DATE,INTERVAL 6 MONTH);
DAYOFWEEK(date)    返回date所代表的一星期中的第几天(1~7)
DAYOFMONTH(date)   返回date是一个月的第几天(1~31)
DAYOFYEAR(date)    返回date是一年的第几天(1~366)
DAYNAME(date)    返回date的星期名,如:SELECT DAYNAME(CURRENT_DATE);
FROM_UNIXTIME(ts,fmt)   根据指定的fmt格式,格式化UNIX时间戳ts
HOUR(time)    返回time的小时值(0~23)
MINUTE(time)    返回time的分钟值(0~59)
MONTH(date)    返回date的月份值(1~12)
MONTHNAME(date)    返回date的月份名,如:SELECT MONTHNAME(CURRENT_DATE);
NOW()     返回当前的日期和时间
QUARTER(date)    返回date在一年中的季度(1~4),如SELECT QUARTER(CURRENT_DATE);
WEEK(date)    返回日期date为一年中第几周(0~53)
YEAR(date)    返回日期date的年份(1000~9999)
一些示例:
获取当前系统时间:SELECT FROM_UNIXTIME(UNIX_TIMESTAMP());
SELECT EXTRACT(YEAR_MONTH FROM CURRENT_DATE);
SELECT EXTRACT(DAY_SECOND FROM CURRENT_DATE);
SELECT EXTRACT(HOUR_MINUTE FROM CURRENT_DATE);
返回两个日期值之间的差值(月数):SELECT PERIOD_DIFF(200302,199802);
在Mysql中计算年龄:
SELECT DATE_FORMAT(FROM_DAYS(TO_DAYS(NOW())-TO_DAYS(birthday)), '%Y')+0 AS age FROM employee;
这样,如果Brithday是未来的年月日的话,计算结果为0。
下面的SQL语句计算员工的绝对年龄,即当Birthday是未来的日期时,将得到负值。
SELECT DATE_FORMAT(NOW(), '%Y') - DATE_FORMAT(birthday, '%Y') - (DATE_FORMAT(NOW(), '00-%m-%d') < DATE_FORMAT(birthday, '00-%m-%d')) AS age from employee
五、加密函数
AES_ENCRYPT(str,key)   返回用密钥key对字符串str利用高级加密标准算法加密后的结果,调用AES_ENCRYPT的结果是一个二进制字符串,以BLOB类型存储
AES_DECRYPT(str,key)   返回用密钥key对字符串str利用高级加密标准算法解密后的结果
DECODE(str,key)    使用key作为密钥解密加密字符串str
ENCRYPT(str,salt)   使用UNIX crypt()函数,用关键词salt(一个可以惟一确定口令的字符串,就像钥匙一样)加密字符串str
ENCODE(str,key)    使用key作为密钥加密字符串str,调用ENCODE()的结果是一个二进制字符串,它以BLOB类型存储
MD5()     计算字符串str的MD5校验和
PASSWORD(str)    返回字符串str的加密版本,这个加密过程是不可逆转的,和UNIX密码加密过程使用不同的算法。
SHA()     计算字符串str的安全散列算法(SHA)校验和
示例:
SELECT ENCRYPT('root','salt');
SELECT ENCODE('xufeng','key');
SELECT DECODE(ENCODE('xufeng','key'),'key');#加解密放在一起
SELECT AES_ENCRYPT('root','key');
SELECT AES_DECRYPT(AES_ENCRYPT('root','key'),'key');
SELECT MD5('123456');
SELECT SHA('123456');
六、控制流函数
MySQL有4个函数是用来进行条件操作的,这些函数可以实现SQL的条件逻辑,允许开发者将一些应用程序业务逻辑转换到数据库后台。
MySQL控制流函数:
CASE WHEN[test1] THEN [result1]...ELSE [default] END 如果testN是真,则返回resultN,否则返回default
CASE [test] WHEN[val1] THEN [result]...ELSE [default] END   如果test和valN相等,则返回resultN,否则返回default
IF(test,t,f)   如果test是真,返回t;否则返回 f
IFNULL(arg1,arg2) 如果arg1不是空,返回arg1,否则返回arg2
NULLIF(arg1,arg2) 如果arg1=arg2返回NULL;否则返回arg1

这些函数的第一个是IFNULL(),它有两个参数,并且对第一个参数进行判断。如果第一个参数不是NULL,函数就会向调用者返回第一个参数;如果是NULL,将返回第二个参数。
如:SELECT IFNULL(1,2), IFNULL(NULL,10), IFNULL(4*NULL,'false');
NULLIF()函数将会检验提供的两个参数是否相等,如果相等,则返回NULL,如果不相等,就返回第一个参数。
如:SELECT NULLIF(1,1),NULLIF('A','B'),NULLIF(2+3,4+1);
和许多脚本语言提供的IF()函数一样,MySQL的IF()函数也可以建立一个简单的条件测试,这个函数有三个参数,第一个是要被判断的表达式,如果表达式为真,IF()将会返回第二个参数,如果为假,IF()将会返回第三个参数。
如:SELECT IF(1<10,2,3),IF(56>100,'true','false');
IF()函数在只有两种可能结果时才适合使用。然而,在现实世界中,我们可能发现在条件测试中会需要多个分支。在这种情况下,MySQL提供了CASE函数,它和PHP及Perl语言的switch-case条件例程一样。
CASE函数的格式有些复杂,通常如下所示:
CASE [expression to be evaluated]
WHEN [val 1] THEN [result 1]
WHEN [val 2] THEN [result 2]
WHEN [val 3] THEN [result 3]
......
WHEN [val n] THEN [result n]
ELSE [default result]
END
这里,第一个参数是要被判断的值或表达式,接下来的是一系列的WHEN-THEN块,每一块的第一个参数指定要比较的值,如果为真,就返回结果。所有的 WHEN-THEN块将以ELSE块结束,当END结束了所有外部的CASE块时,如果前面的每一个块都不匹配就会返回ELSE块指定的默认结果。如果没有指定ELSE块,而且所有的WHEN-THEN比较都不是真,MySQL将会返回NULL。
CASE函数还有另外一种句法,有时使用起来非常方便,如下:
CASE
WHEN [conditional test 1] THEN [result 1]
WHEN [conditional test 2] THEN [result 2]
ELSE [default result]
END
这种条件下,返回的结果取决于相应的条件测试是否为真。
示例:
mysql>SELECT CASE 'green'
WHEN 'red' THEN 'stop'
WHEN 'green' THEN 'go' END;
SELECT CASE 9 WHEN 1 THEN 'a' WHEN 2 THEN 'b' ELSE 'N/A' END;
SELECT CASE WHEN (2+2)=4 THEN 'OK' WHEN (2+2)<>4 THEN 'not OK' END AS STATUS;
SELECT Name,IF((IsActive = 1),'已激活','未激活') AS RESULT FROM UserLoginInfo;
SELECT fname,lname,(math+sci+lit) AS total,
CASE WHEN (math+sci+lit) < 50 THEN 'D'
WHEN (math+sci+lit) BETWEEN 50 AND 150 THEN 'C'
WHEN (math+sci+lit) BETWEEN 151 AND 250 THEN 'B'
ELSE 'A' END
AS grade FROM marks;
SELECT IF(ENCRYPT('sue','ts')=upass,'allow','deny') AS LoginResult FROM users WHERE uname = 'sue';#一个登陆验证
七、格式化函数
DATE_FORMAT(date,fmt)   依照字符串fmt格式化日期date值
FORMAT(x,y)    把x格式化为以逗号隔开的数字序列,y是结果的小数位数
INET_ATON(ip)    返回IP地址的数字表示
INET_NTOA(num)    返回数字所代表的IP地址
TIME_FORMAT(time,fmt)   依照字符串fmt格式化时间time值
其中最简单的是FORMAT()函数,它可以把大的数值格式化为以逗号间隔的易读的序列。
示例:
SELECT FORMAT(34234.34323432,3);
SELECT DATE_FORMAT(NOW(),'%W,%D %M %Y %r');
SELECT DATE_FORMAT(NOW(),'%Y-%m-%d');
SELECT DATE_FORMAT(19990330,'%Y-%m-%d');
SELECT DATE_FORMAT(NOW(),'%h:%i %p');
SELECT INET_ATON('10.122.89.47');
SELECT INET_NTOA(175790383);
八、类型转化函数
为了进行数据类型转化,MySQL提供了CAST()函数,它可以把一个值转化为指定的数据类型。类型有:BINARY,CHAR,DATE,TIME,DATETIME,SIGNED,UNSIGNED
示例:
SELECT CAST(NOW() AS SIGNED INTEGER),CURDATE()+0;
SELECT 'f'=BINARY 'F','f'=CAST('F' AS BINARY);
九、系统信息函数
DATABASE()    返回当前数据库名
BENCHMARK(count,expr)   将表达式expr重复运行count次
CONNECTION_ID()    返回当前客户的连接ID
FOUND_ROWS()    返回最后一个SELECT查询进行检索的总行数
USER()或SYSTEM_USER()   返回当前登陆用户名
VERSION()    返回MySQL服务器的版本
示例:
SELECT DATABASE(),VERSION(),USER();
SELECT BENCHMARK(9999999,LOG(RAND()*PI()));#该例中,MySQL计算LOG(RAND()*PI())表达式9999999次。

DedeCMS的存储过程简介

DedeCMS存储过程

什么是“存储过程”?
存储过程是由流控制和SQL语句书写的过程,这个过程经编译和优化后存储在数据库服务器中,使用时只要调用即可。用 mysql-front或 Navicat MySQL 调试.

只有MySQL5.x以上版本才支持存储过程,所以低版本的用户使用存储过程需要升级数据库

DedeCMS存储过程 - 添加文章的存储过程
DROP PROCEDURE IF EXISTS AddArchives;
CREATE PROCEDURE AddArchives($typeid int, $adminID int, $writer varchar(30), $soruce varchar(50), $title varchar(80), $body mediumtext)
BEGIN
IF $adminID IS NULL THEN
SELECT MIN(id) INTO $adminID FROM dede_admin;
END IF;
IF $writer IS NULL THEN
SET $writer = '';
END IF;
IF $soruce IS NULL THEN
SET $soruce = '';
END IF;

INSERT INTO dede_archives (typeid, adminID, writer, source, title, pubdate, senddate) VALUES ($typeid, $adminID, $writer, $soruce, $title, UNIX_TIMESTAMP(), UNIX_TIMESTAMP());
INSERT INTO dede_addonarticle (typeid, aid, body) VALUES ($typeid, last_insert_id(), $body);
END;

上面的代码创建一个名为AddArchives的存储过程,用来添加文章。参数列表:

1、$typeid
栏目ID,表示将要添加到的栏目。需要手动指定一个栏目ID(参见下文“存储过程调用”)。

2、$adminID
管理员ID,添加时使用的管理员ID。需要手动指定一个管理员ID(参见下文“存储过程调用”)。如果不指定,将默认使用一个最小的管理员ID。

3、$writer
文章作者,指采集到的文章作者。如果未采集,将默认为空。

4、$soruce
文章来源,如果未指定,将默认为空。

5、$title
文章标题,指采集到的文章标题。标题是必须的,为空时记录将不能入库。

6、$body
文章内容,指采集到的文章内容。内容是必须的,为空时记录将不能入库。

DedeCMS存储过程 - 添加软件的存储过程
DROP PROCEDURE IF EXISTS AddSoft;
CREATE PROCEDURE AddSoft($channel int, $typeid int, $adminID int, $writer varchar(30), $soruce varchar(50), $title varchar(80), $language varchar(10), $softtype varchar(10), $os varchar(30), $accredit varchar(10), $softsize varchar(10), $officialUrl varchar(30), $officialDemo varchar(50), $softlinks text, $introduce text)
BEGIN
IF $adminID IS NULL THEN
SELECT MIN(id) INTO $adminID FROM dede_admin;
END IF;
IF $writer IS NULL THEN
SET $writer = '';
END IF;
IF $soruce IS NULL THEN
SET $soruce = '';
END IF;
IF $officialUrl IS NULL THEN
SET $officialUrl = '';
END IF;
IF $officialDemo IS NULL THEN
SET $officialDemo = '';
END IF;
IF $introduce IS NULL THEN
SET $introduce = '';
END IF;

INSERT INTO dede_archives (channel, typeid, adminID, writer, source, title, pubdate, senddate) VALUES ($channel, $typeid, $adminID, $writer, $soruce, $title, UNIX_TIMESTAMP(), UNIX_TIMESTAMP());
INSERT INTO dede_addonsoft (typeid, aid, language, softtype, os, accredit, softsize, officialUrl, officialDemo, softlinks, introduce) VALUES ($typeid, last_insert_id(), $language, $softtype, $os, $accredit, $softsize, $officialUrl, $officialDemo, $softlinks, $introduce);
END;

上面的代码创建一个名为AddSoft的存储过程,用来添加回复。参数列表:

1、$channel
频道ID,表示将要添加到的频道。需要手动指定一个频道ID(参见下文“存储过程调用”)。

2、$typeid
栏目ID,表示将要添加到的栏目。需要手动指定一个栏目ID(参见下文“存储过程调用”)。

3、$adminID
管理员ID,添加时使用的管理员ID。需要手动指定一个管理员ID(参见下文“存储过程调用”)。如果不指定,将默认使用一个最小的管理员ID。

4、$writer
软件作者,指采集到的软件作者。如果未采集,将默认为空。

5、$soruce
软件来源,如果未指定,将默认为空。

6、$title
软件名称,指采集到的软件名称。名称是必须的,为空时记录将不能入库。

7、$language
界面语言,必须。

8、$softtype
软件类型,必须。

9、$os
运行环境,必须。

10、$accredit
授权方式,必须。

11、$softsize
软件大小,必须。

12、$officialUrl
官方网址,可选。

13、$officialDemo
演示网址,可选。

14、$softlinks
软件链接列表,必须。链接列表是指在一个字段中保存了多个下载地址,DedeCMS的链接列表格式为:
{dede:link text='本地下载1'} http://www.aaa.com/down/file.rar {/dede:link}
{dede:link text='本地下载2'} http://www.bbb.com/down/file.rar {/dede:link}

因此,采集时必须将带有链接的采集结果替换成上面的格式。(参见软件帮助中的“采集结果替换”)

13、$introduce
软件介绍,可选。

DEDE显示指定文档内容的方法

DEDE5多了一个Full_search表,含有文档的一些内容信息,所以,建议你把SQL换成以下这句:

    select * from dede_full_search left join  dede_addonarticle on dede_full_search.aid=dede_addonarticle.aid  where  dede_full_search.aid=117727

不过在模板里,就要通过字段来调用了.

                {dede:sql sql="select * from dede_full_search left join  dede_addonarticle on dede_full_search.aid=dede_addonarticle.aid  where  dede_full_search.aid=117727"}
                
  • [field:aid/]
  • [field:title/]
  • [field:body/]
  • [field:pubdate function='GetDateMk(@me)'/]
  • [field:url/]
  • [field:click/]
  • {/dede:sql}

    DELETE,UPDATE与LEFT JOIN

    
    
    #UPDATE:
    UPDATE A SET ApproverID=NULL,ApproveDate=NULL,ApproveResult=100,CheckerID=null,CheckDate=null, IsCheck=0
    FROM [SH_MaterialApplyBuyBill] A
    LEFT JOIN [SH_MaterialApplyBuyBillDetail] B ON A.ID=B.[MaterialApplyBuyBillID]
    WHERE A.id=125 AND @InDetailCount=0
    #DELETE:
    DELETE A FROM [SH_ClosingBalance] A LEFT JOIN [SH_StoreHouse] B ON A.StoreHouseID=B.ID
    WHERE B.departmentID='1000'
    
    update table1 set a.a=1
    from  table1  a inner join table2 b on a.ip=b.ip
    
    

    Sql中字段的相关处理

    增加字段
    alter table docdsp add dspcode char(200)
    删除字段
    ALTER TABLE table_NAME DROP COLUMN column_NAME
    修改字段类型
    ALTER TABLE table_name ALTER COLUMN column_name new_data_type
    改名
    sp_rename
    更改当前数据库中用户创建对象(如表、列或用户定义数据类型)的名称。
    语法
    sp_rename [ @objname = ] 'object_name' ,
        [ @newname = ] 'new_name'
        [ , [ @objtype = ] 'object_type' ]
    
    --假设要处理的表名为: tb
    
    --判断要添加列的表中是否有主键
    if exists(select 1 from sysobjects where parent_obj=object_id('tb') and xtype='PK')
    begin
    print '表中已经有主键,列只能做为普通列添加'
    
    --添加int类型的列,默认值为0
    alter table tb add 列名 int default 0 
    end
    else
    begin
    print '表中无主键,添加主键列'
    
    --添加int类型的列,默认值为0
    alter table tb add 列名 int primary key default 0 
    end
     
    
    

    Discuz 添加选吧的一段MySQL监控

    080727 15:16:00	     27 Connect     discuz@localhost on
    		     27 Query       SET character_set_connection=gbk, character_set_results=gbk, character_set_client=binary
    		     27 Query       SET sql_mode=''
    		     27 Init DB     discuz
    		     27 Query       SELECT * FROM uchome_session WHERE uid='1' AND password='c23f845b1ebdd7dd5c16621bee324c2b'
    		     27 Query       SELECT sf.note, sf.privacy, sf.friend, sf.feedfriend, sf.resideprovince, sf.residecity, s.* FROM uchome_space s
    		LEFT JOIN uchome_spacefield sf ON sf.uid=s.uid
    		WHERE s.uid='1'
    		     27 Query       SELECT tagid, uid FROM uchome_tagspace WHERE uid='1'
    		     27 Query       SELECT * FROM uchome_mtag WHERE tagname IN ('tagschool','tagcity','tagbook')
    		     27 Query       INSERT INTO uchome_mtag (`tagname`, `fieldid`, `membernum`) VALUES ('tagschool', )
    ', '1')
    		     27 Query       INSERT INTO uchome_mtag (`tagname`, `fieldid`, `membernum`) VALUES ('tagcity', '2', '1')
    		     27 Query       INSERT INTO uchome_mtag (`tagname`, `fieldid`, `membernum`) VALUES ('tagbook', '3', '1')
    		     27 Query       INSERT INTO uchome_tagspace (tagid,uid,username) VALUES ('1','1','admin'),('2','1','admin'),('3','1','admin')
    		     27 Quit

    sql的left join 命令详解


    例表a
    aid adate
    1 a1
    2 a2
    3 a3
    表b
    bid bdate
    1 b1
    2 b2
    4 b4
    两个表a,b相连接,要取出id相同的字段
    select * from a inner join b on a.aid = b.bid这是仅取出匹配的数据.
    此时的取出的是:
    1 a1 b1
    2 a2 b2
    那么left join 指:
    select * from a left join b on a.aid = b.bid
    首先取出a表中所有数据,然后再加上与a,b匹配的的数据
    此时的取出的是:
    1 a1 b1
    2 a2 b2
    3 a3 空字符
    同样的也有right join
    指的是首先取出b表中所有数据,然后再加上与a,b匹配的的数据
    此时的取出的是:
    1 a1 b1
    2 a2 b2
    4 空字符 b4


    LEFT JOIN 或 LEFT OUTER JOIN。
    左向外联接的结果集包括 LEFT OUTER 子句中指定的左表的所有行,而不仅仅是联接列所匹配的行。如果左表的某行在右表中没有匹配行,则在相关联的结果集行中右表的所有选择列表列均为空值。


    update dede_addonimages as a
    left join content as b
    on a.maxwidth=b.ID
    set a.imgurls=b.url
    where a.aid>106316 ;