上个礼拜为自己的一个小站添加了”随便逛逛”的功能,感觉很爽^_^ 言归正传,MySQL中使用 order by rand() 就可以随机取出记录。

/* 随机获取10条记录  */
SELECT * FROM table ORDER BY rand( ) LIMIT 10;

方便是很方便,但是偶的破本本上执行需要17秒,这样的性能要是流量大一定拖垮服务器。(还好偶的小站流量很小, 嘿嘿~~~) Google到一种解决方法,还是不错的,以Wordpress的posts表为例,随机获取文章的ID。

/* 随机获取WordPress文章的ID  */
SELECT `ID` FROM `wp_posts` AS t1
	JOIN (
		SELECT round( rand( ) * (
			SELECT max( `ID` )  FROM `wp_posts` ) ) AS sid
	) AS t2
	WHERE t1.id >= t2.sid
			AND `post_type` = 'post' AND `post_status` = 'publish'
	ORDER BY t1.id
	LIMIT 1

这个SQL语句确实有效,执行只有0.1秒,可是每次获取的都是连续的ID,只能一次获取一条记录,想要获取多条就多执行几次。有得必有失嘛。 至于获取的ID,WP 有内置的函数 get_permalink( $ID ) 可以得到文章的链接。