MySQL左连接查询是联合查询中的一种方式,就是说把两个相关的表通过这种方式联合在一起查询,从而更加方便调用数据,避免多层循环嵌套。

左连接查询所用关键字 left join
,书面解释如下:

左外连接(左连接):结果集既包括连接表的匹配行,也包括左连接表的所有行。
下面我解释一下,也就是说左链接查询的返回结果既包含了left join关键字左边表的全部资料,同时也包含了与左表匹配的右表中的符合条件的资源。 简单的说就是以左表为中心,连带右表中的符合条件的资源。

Sql语句的写法:

SQL: select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c

相信大家看完之后一定很晕把,没关系,我解释一下大家就都明白了,看似复杂,其实条理很清楚。它的意思是:


select a.a , a.b

a.a 就是a表中的a字段的意思。


Select与from之间放的就是a表 b表中的相关要查询的字段。


from a LEFT OUT JOIN b
就是 从以a表为主左链接上右表b ,
匹配条件是 a表的a字段等于b表的c字段。

通过这几点解释相信大家也都明白百分之八十了,下面我们通过实例的演示再给大家说一下:

首先建立两个表

表pic
用于存放图片名字的表

CREATE TABLE `image`.`pic` (

`id` INT( 10 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`pname` VARCHAR( 20 ) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL

) ENGINE = InnoDB

表二 用于存放图片评论的

CREATE TABLE `image`.`comment` (

`id` INT( 10 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`pid` INT( 10 ) NOT NULL ,
`content` VARCHAR( 20 ) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL

) ENGINE = InnoDB

下面我要联合查询这两个表通过一条sql语句,注意以前咱们查询两个表肯定是先写一个表的sql然后在根据条件循环查询另一个表,现在不用了,通过这种查询,把返回结果放到一个数组中,

Sql语句写法:select
pic.*,comment.*
from
pic left join comment
on
pic.id=comment.pid

代码如下:
$conn = mysql_connect("localhost","root","");
if(!$conn){
die('连接MySQL数据库失败: ' . mysql_error());
}

mysql_select_db('image');

$sql="select
pic.*,comment.*
from
pic left join comment
on
pic.id=comment.pid";
$re=mysql_query($sql);
while($re1=mysql_fetch_array($re))
{
$arr[]=$re1;
}
print_r($arr);

打印结果如下:

Array
(
[0] => Array
(
[0] => 1
[id] => 1
[1] => aaaaaaaaa
[pname] => aaaaaaaaa
[2] => 1
[3] => 1
[pid] => 1
[4] => ccccccc
[content] => ccccccc
)
[1] => Array
(
[0] => 2
[id] => 2
[1] => bbbbbbbbbbb
[pname] => bbbbbbbbbbb
[2] => 2
[3] => 2
[pid] => 2
[4] => vvvvvvv
[content] => vvvvvvv
)
)
Ok

分类: 网页设计 标签: 日期:2011-01-03

<?php
class word
{
function start()
{
ob_start();
print'<html xmlns:o="urn:schemas-microsoft-com:office:office"
xmlns:w="urn:schemas-microsoft-com:office:word"
xmlns="http://www.w3.org/TR/REC-html40">';
}
function save($path)
{
print "</html>";
$data = ob_get_contents();
ob_end_clean();
$this->wirtefile ($path,$data);
}
function wirtefile ($fn,$data)
{
$fp=fopen($fn,"wb");
fwrite($fp,$data);
fclose($fp);
}
}
?>

分类: 网页设计 标签:, 日期:2011-01-01

插入数据

include 'pdbm.php';

$timestart = explode(' ', microtime());
$timestart = $timestart[0] + $timestart[1];

$pdbm = new Pdbm('test');
$pdbm->open(PDBM_CREAT | PDBM_REWD);

for ($i = 0; $i < 100000; $i++) {
    $pdbm->insert("key{$i}", "value{$i}");
}

$timetime = explode(' ', microtime());
$timetime = $timetime[0] + $timetime[1];

echo $timetime - $timestart;
//*/

获取数据

include 'pdbm.php';

$timestart = explode(' ', microtime());
$timestart = $timestart[0] + $timestart[1];

$pdbm = new Pdbm('test');
$pdbm->open(PDBM_REWD);

$val = $pdbm->fetch('key9999');
if ($val == NULL) {
    echo 'Not found</br>';
} else {
    echo $val."<br/>";
}

//$pdbm->delete('key100'); //delete data

$val = $pdbm->fetch('key100');
if ($val == NULL) {
    echo 'Not found</br>';
} else {
    echo $val."<br/>";
}

$timetime = explode(' ', microtime());
$timetime = $timetime[0] + $timetime[1];

echo $timetime - $timestart;
//*/

(更多...)

分类: 网页设计 标签: 日期:2010-12-30

wp_postmeta 表 是存储文章附带信息的,除了一些特定时候里面的数据是没有用的我之前也写过数据清理文章简单的给出了两条语句并且有其他数据表的清理,详情参见wordpress数据库清理

下面在给出几条语句让你的wp_postmeta干净到非常。

DELETE FROM wp_postmeta WHERE meta_key = '_edit_lock';
DELETE FROM wp_postmeta WHERE meta_key = '_edit_last';

这是之前给出的两条语句测试安全删除无危险。

DELETE FROM wp_postmeta WHERE meta_key = '_wp_old_slug';
DELETE FROM wp_postmeta WHERE meta_key = '_revision-control';
DELETE FROM wp_postmeta WHERE meta_value = '{{unknown}}';

这是新尝试的三条语句,前两条危险性不大。最后一条不太清楚目前作用,但是删除后无任何异常。这五条语句执行完毕能够删除掉95%以上的数据,算的上是极限优化了,最后考虑到这个数据表并不是很重要,有洁净癖的人可以尝试清空这个表,当然我测试清空表会让一些原本的数据丢失。

分类: 网页设计 标签:, 日期:2010-12-29

之前写过一篇这个插件的文章WP Cleaner 删除wordpress不再需要的修订版,但是自从某次升级以后变无法使用这款插件了,我一直以为是插件的问题,并且作者也发出了一个修正版本,但是情况依然没有改变,我还是无法使用。

这两天找了找其他的清理插件,效果没有这个理想还是想用这款插件,于是耐下心来看了看插件的代码,结果发现并不是大问题,因为我的空间不在支持短标签了,而插件是使用的短标签“<? ”我只需要改成“<?php ”即可了,粗略看了下代码使用了三次替换来处理这块。

第一,把代码里的“<?=”替换为“<?php echo ”
第二,把“<?”替换为“<?php”
第三,把“<?phpphp”替换为“<?php”

完成这三次替换保存代码即可在关闭短标签的状态下使用了。

插件官方地址:http://www.jiangmiao.org/blog/138.html

本站提供修改版下载地址:http://www.box.net/shared/sarkgk9ma2

PS:其实这个只是代码写作习惯问题,建议插件作者也处理下这块,毕竟运行环境有时候不用用户能够操作的,而且一个良好的习惯也是有必要的。

分类: 网页设计 标签: 日期:2010-12-29

详细步骤:

1,登录http://www.wordpress.com

2,在WordPress.com右上角找到 Sign Up Now。

3,填写基本信息,需要注意的,我都注明了:

4,到邮箱里点击链接验证,并更新个人信息。

Update Your Profile!是 更新个人信息 的意思。

这里有一个细节,可以体现WordPress.com的用户体验做的非常完美:如果一直没有收到验证的邮件,可以重新选择邮箱。

5,点击邮箱里的验证链接,出现 Your account is now active! 表示帐户已经验证成功。

6,登陆WordPress.com,登陆之后,http://www.wordpress.com首页左上角的用户状态已经变更:

7,点击 My Account下面的Global Dashboard进入后台,再点击 Profile,再点击 Were you looking for your API Key and other Personal Settings?。

8,在点开的页面里可以看到:Your WordPress.com API key is: xxxxxxxxx,这就是属于自己的Akismet的Api Key了。
但要注意后面的一句话:Don't share your API key, it's like a password.中文意思是:这和密码一样重要,请勿分享给其他人使用。

9,到这里,就完成Akismet的Api Key的获取过程,以后各位可以自己获取了。

10,有任何问题,欢迎留言。

分类: 网页设计 标签:, 日期:2010-12-28

网上目前能找到两种方法:

1、找到wp-admin/includes/post.php里边的get_default_post_to_edit这个函数,

$post = get_post( wp_insert_post( array( 'post_title' => __( 'Auto Draft' ), 'post_type' => $post_type, 'post_status' => 'auto-draft' ) ) );

把这一句修改成如下:

$post_auto_draft = $wpdb->get_row( "SELECT * FROM $wpdb->posts WHERE post_type = '$post_type' AND post_status = 'auto-draft' LIMIT 1" );
if ( $post_auto_draft ) {
$post = $post_auto_draft;
} else {
$post = get_post( wp_insert_post( array( 'post_title' => __( 'Auto Draft' ), 'post_type' => $post_type, 'post_status' => 'auto-draft' ) ) );
}
意思就是: 如果有自动保存的auto-draft就使用以前的auto-draft的ID来写文章,如果没有就插入一条auto-draft, 最后,数据库中总有一条auto-draft... 虽然数据库会多一条数据,但ID还是可以保持连续.

2、找到wp-admin\includes\post.php文件,在if ( $create_in_db ) {前面加上这句代码就可以了:

$create_in_db = false;

分类: 网页设计 标签: 日期:2010-12-27

1. 新的Doctype声明

XHTML的声明太长了,我相信很少会有前端开发人员能手写出这个Doctype声明。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 

 
HTML5的Doctype声明很短,看到这个声明相信你马上就能记住,不用浪费脑细胞去记那长的有点变态的XHTML的Doctype声明了。

<!DOCTYPE html>
 
HTML5的简短的DOCTYPE声明是让Firefox、Chrome等现代浏览器和IE6/7/8等浏览器都进入(准)标准模式,你可能会奇怪IE6/7居然也可以支持HTML5 Doctype,事实上,IE是只要doctype符合 这种格式,都会进入标准模式。

2. <figure>标签

看看下面一段简单的代码:

<img alt="About image" src="path/to/image">
<h6>image of Mars.</h6>

 
遗憾的是,这里的h6标签和img标签好像没有什么关系,语义不够明确。HTML5意识到了这一点,于是就采用了<figure>标签。当<figure>结合<figcaption>标签的使用,可以让h6标签和img标签组合起来,代码就更具语义化了。

<figure>
<img alt="about image" src="path/to/image">
<figcaption>
<h6>This is an image of something interesting. </h6>
</figcaption>
</figure>
 
3. 重新定义<small>

不久前,我使用了<small>标签来创建与logo相关的副标题。但是在HTML5中重新定义了<small>标签,使之更能表现语义化,在<small>的字号都会变小,想想如果这个标签用于网站的底部的版权信息还是个不错的做法。

4. 去掉了Javascript和CSS标签的type属性

通常你会在<link>和<script>加上type属性:

<link rel="stylesheet" type=text/css href="path/to/stylesheet.css">
 <script type="text/javascript" src="path/to/script.js"></script>
 
在HTML5中,不再需要type属性了,因为这显得有点多余,去掉之后可以让代码更为简洁。

<link href="path/to/stylesheet.css">
 <script src="path/to/script.js"></script>
 
5. 是否使用双引号

这有点让人纠结,HTML5并不是XTHML,你可以省去标签中的双引号。相信大多数同志也包括我都习惯了加上双引号,因为这让代码看起来会更标准。不过,这可以根据你的个人喜好来确定是到底要不要双引号。

<h6 id="someid"> start the reactor. </h6>
  (更多...)

分类: 网页设计 标签: 日期:2010-12-24

<html>
<head>
      <title>javascript读取RSS数据</title>
<META content="text/html; charset=utf-8" http-equiv=Content-Type />

</head>
<body leftmargin="0" topmargin="0">
<font><h3 align="center">javascript读取RSS数据</h3></font>
<br>
<table width="90%" align="center" border="0" cellpadding=0 cellspacing=0>
<tr>
   <td bgcolor=White><b>新闻中心</b><font size="-1">(摘自新浪网)</font><hr></td>
</tr>
<tr>
   <td bgcolor=White>
    <div id="container" >News Loading...</div>
   </td>
</tr>
</table>
<script language="JavaScript1.2">
//Container for ticker. Modify its STYLE attribute to customize style:
var tickercontainer=''
var xmlsource="http://rss.sina.com.cn/news/marquee/ddt.xml";
var root;
var title;
var link;
var items;
var item;
var images;
var image;
var description;
if (window.ActiveXObject)
{
//document.write("Microsoft.XMLDOM");
var xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
}
else if (document.implementation && document.implementation.createDocument)
{
//document.write("document.implementation.createDocument");
var xmlDoc= document.implementation.createDocument("","doc",null);
}
if (typeof xmlDoc!="undefined")
{
//document.write(tickercontainer)
xmlDoc.load(xmlsource)
}
function fetchxml()
{
if (xmlDoc.readyState==4)
   output()
else
   setTimeout("fetchxml()",10)
}
function output()
{
var temp="";
root = xmlDoc.getElementsByTagName("channel")[0];
title =root.getElementsByTagName("title")[0];
//temp = title.firstChild.nodeValue +"<br>";
items=root.getElementsByTagName("item");
for(i=0;i<=items.length-1;i++)
{
   item=items[i];
   title=item.getElementsByTagName("title")[0];
   link=item.getElementsByTagName("link")[0];
   description=item.getElementsByTagName("description")[0];
   temp = temp + "<font size=-1><a href=" + link.firstChild.nodeValue+ " target='_bank'>" +

title.firstChild.nodeValue +"</a></font><br><br>";
   //temp = temp +"<font size=-1>" + description.firstChild.nodeValue + "</font><br><br>";
   document.getElementById("container").innerHTML = temp;
}
}
if (window.ActiveXObject)
fetchxml()
else if (typeof xmlDoc!="undefined")
xmlDoc.onload=output
</script>
</body>
</html>

分类: 网页设计 标签:, 日期:2010-12-22

网上有很多探针,不过各种版本都很老了,而且目前很少人在更新这个东西,最近测试服务器环境网上下了一些探针,各有优缺点。于是找了个时间把各个版本的探针功能揉在了一起,去掉了广告,清爽了许多。

这个探针是自己用来的,不过还是习惯性的分享出来,对于原版的探针不好意思去掉了链接和广告,服务器性能去掉了过时很久的信息,如果有机会,以后会添加上一些最新服务器的测试信息的。

PHP探针下载地址:php探针

分类: 网页设计 标签:, 日期:2010-12-21