我想将我的文章数据库(articles)重新进行分类,我在文章数据库里新建了一个字段名‘directory’,值为‘0’。
另外,我做了一个辅助的分类目录表(TAG1)。category | tag1 | tag2 | tag3 | tag4 | tag5
art | paint | picture| sculpture | photo | bronze
tourism | tourism | travel | tour | journey | trip
fashion | style | vogue | fashion | mode | Popular
...
工作思路是,把所有的文章从数据库里调出,先将文章里的文字拆成若干个单词,放进辅助的分类目录表里进行文字匹配(TAG1-TAG5)。如果文章中的文字和辅助的分类目录表里(TAG1-TAG5)的条件匹配,则输出目录名,UPDATE进文章数据库;没有时跳过。UPDATE条件是:每篇文章不可以重复分类,仅允许归有一个类别。每个类别只能出现5篇文章。
即:测试先从category=‘art’开始,满5条文章后,终止art的归类,剩余的文章进行category=‘tourism’依次类推。下面是我的代码,但是有3个mysql_query动作,当UPDATE写在mysql_fetch_array循环里时,limit失效,求助大家,如何解决这个问题?谢谢了。
<?php
header('Content-type:text/html; charset=utf-8');
$db = mysql_connect("localhost","root","root") or die("can not connect Mysql Server");
mysql_select_db("mydb",$db);
$result = mysql_query("SELECT content,id,directory,date FROM articles WHERE Order By date DESC");//从文章数据库里获得所有的文章。
while ($row = mysql_fetch_array($result))
{
$id = $row['id'];
$content = $row['content'];
$words = preg_split("/\s+/",$content);
$uniqueWords = array_keys(array_flip($words)); //将没条文章分割成一个一个单词
$parts = '';
foreach($uniqueWords as $word){
$parts[] = " tag1 = '$word' OR tag2 = '$word' OR tag3 = '$word' OR tag4 = '$word' OR tag5 = '$word' ";
}
$where = implode(" OR ", $parts);
mysql_select_db("mydb",$db);
mysql_query("SET NAMES utf8");
$query = mysql_query("SELECT * FROM tags1 WHERE ($where) AND category='art' "); // 把上面分割的单词放进TAG1表中,进行检索,如果文章中有文字和tag1表列中相吻合,输出category='art',如果没有,跳过不输出。
$citn = '';
while ($row = mysql_fetch_array($query)) {
$citn = $row['category'];
}
$catnew = $citn;
mysql_query("UPDATE articles SET directory = '".$catnew."' WHERE id = '".$id."' AND directory ='0' Order By date DESC LIMIT 5"); // 根据ID号匹配,UPDATE文章数据表,这里我试验时用了60篇文章,但是输完后查询数据库,却有11条文章的directory升级成了 'art'
}
mysql_close($db);
?>
另外,我做了一个辅助的分类目录表(TAG1)。category | tag1 | tag2 | tag3 | tag4 | tag5
art | paint | picture| sculpture | photo | bronze
tourism | tourism | travel | tour | journey | trip
fashion | style | vogue | fashion | mode | Popular
...
工作思路是,把所有的文章从数据库里调出,先将文章里的文字拆成若干个单词,放进辅助的分类目录表里进行文字匹配(TAG1-TAG5)。如果文章中的文字和辅助的分类目录表里(TAG1-TAG5)的条件匹配,则输出目录名,UPDATE进文章数据库;没有时跳过。UPDATE条件是:每篇文章不可以重复分类,仅允许归有一个类别。每个类别只能出现5篇文章。
即:测试先从category=‘art’开始,满5条文章后,终止art的归类,剩余的文章进行category=‘tourism’依次类推。下面是我的代码,但是有3个mysql_query动作,当UPDATE写在mysql_fetch_array循环里时,limit失效,求助大家,如何解决这个问题?谢谢了。
<?php
header('Content-type:text/html; charset=utf-8');
$db = mysql_connect("localhost","root","root") or die("can not connect Mysql Server");
mysql_select_db("mydb",$db);
$result = mysql_query("SELECT content,id,directory,date FROM articles WHERE Order By date DESC");//从文章数据库里获得所有的文章。
while ($row = mysql_fetch_array($result))
{
$id = $row['id'];
$content = $row['content'];
$words = preg_split("/\s+/",$content);
$uniqueWords = array_keys(array_flip($words)); //将没条文章分割成一个一个单词
$parts = '';
foreach($uniqueWords as $word){
$parts[] = " tag1 = '$word' OR tag2 = '$word' OR tag3 = '$word' OR tag4 = '$word' OR tag5 = '$word' ";
}
$where = implode(" OR ", $parts);
mysql_select_db("mydb",$db);
mysql_query("SET NAMES utf8");
$query = mysql_query("SELECT * FROM tags1 WHERE ($where) AND category='art' "); // 把上面分割的单词放进TAG1表中,进行检索,如果文章中有文字和tag1表列中相吻合,输出category='art',如果没有,跳过不输出。
$citn = '';
while ($row = mysql_fetch_array($query)) {
$citn = $row['category'];
}
$catnew = $citn;
mysql_query("UPDATE articles SET directory = '".$catnew."' WHERE id = '".$id."' AND directory ='0' Order By date DESC LIMIT 5"); // 根据ID号匹配,UPDATE文章数据表,这里我试验时用了60篇文章,但是输完后查询数据库,却有11条文章的directory升级成了 'art'
}
mysql_close($db);
?>
header('Content-type:text/html; charset=utf-8');
$db = mysql_connect("localhost","root","root") or die("can not connect Mysql Server");
mysql_select_db("mydb",$db);
$result = mysql_query("SELECT content,id,directory,date FROM articles WHERE Order By date DESC");//从文章数据库里获得所有的文章。// 统计一个分类中的最大文章个数
$count = 0;// 记录更新文章的id
$ids = array();
// 分类的总数量
$categories = array('art', 'tourism', 'fashion');// 当前分类
$curCategory = array_shift($categories);while ($row = mysql_fetch_array($result))
{
$id = $row['id'];
$content = $row['content'];
$words = preg_split("/\s+/",$content);
$uniqueWords = array_keys(array_flip($words)); //将没条文章分割成一个一个单词
$parts = '';
foreach($uniqueWords as $word){
$parts[] = " tag1 = '$word' OR tag2 = '$word' OR tag3 = '$word' OR tag4 = '$word' OR tag5 = '$word' ";
}
$where = implode(" OR ", $parts);
mysql_select_db("mydb",$db);
mysql_query("SET NAMES utf8"); // 仅仅验证的话,就count吧
$query = mysql_query("SELECT count(*) as count FROM tags1 WHERE ($where) AND category='$curCategory' "); // 把上面分割的单词放进TAG1表中,进行检索,如果文章中有文字和tag1表列中相吻合,输出category='art',如果没有,跳过不输出。
// 不建议用while, 仅仅是返回是否有还是没有
$count = 0;
while ($row = mysql_fetch_array($query)) {
$count = $row['count'];
} // 说明找到了分类
if($count) {
//记录分类
$ids[] = $row['id'];
$count++; // 高潮部分
if($count == 5) {
// 进行更新
mysql_query("UPDATE articles SET directory = '".$curCategory."' WHERE id in ('".implode("', '", $ids)."')"); // 获取下一个分类
if(!$curCategory = array_shift($categories)) {
// 没有分类结束
break;
} // 重新计数
$count = 0; // 记录更新文章的id
$ids = array();
}
}
$catnew = $citn;
mysql_query("UPDATE articles SET directory = '".$catnew."' WHERE id = '".$id."' AND directory ='0' Order By date DESC LIMIT 5"); // 根据ID号匹配,UPDATE文章数据表,这里我试验时用了60篇文章,但是输完后查询数据库,却有11条文章的directory升级成了 'art'
}
mysql_close($db);
?>
未经验证,仅做参考
header('Content-type:text/html; charset=utf-8');
$db = mysql_connect("localhost","root","root") or die("can not connect Mysql Server");
mysql_select_db("mydb",$db);
$result = mysql_query("SELECT content,id,directory,date FROM articles WHERE Order By date DESC");//从文章数据库里获得所有的文章。// 统计一个分类中的最大文章个数
$count = 0;// 记录更新文章的id
$ids = array();
// 分类的总数量
$categories = array('art', 'tourism', 'fashion');// 当前分类
$curCategory = array_shift($categories);while ($row = mysql_fetch_array($result))
{
$id = $row['id'];
$content = $row['content'];
$words = preg_split("/\s+/",$content);
$uniqueWords = array_keys(array_flip($words)); //将没条文章分割成一个一个单词
$parts = '';
foreach($uniqueWords as $word){
$parts[] = " tag1 = '$word' OR tag2 = '$word' OR tag3 = '$word' OR tag4 = '$word' OR tag5 = '$word' ";
}
$where = implode(" OR ", $parts);
mysql_select_db("mydb",$db);
mysql_query("SET NAMES utf8"); // 仅仅验证的话,就count吧
$query = mysql_query("SELECT count(*) as count FROM tags1 WHERE ($where) AND category='$curCategory' "); // 把上面分割的单词放进TAG1表中,进行检索,如果文章中有文字和tag1表列中相吻合,输出category='art',如果没有,跳过不输出。
// 不建议用while, 仅仅是返回是否有还是没有
$count = 0;
while ($row = mysql_fetch_array($query)) {
$count = $row['count'];
} // 说明找到了分类
if($count) {
//记录分类
$ids[] = $row['id'];
$count++; // 高潮部分
if($count == 5) {
// 进行更新
mysql_query("UPDATE articles SET directory = '".$curCategory."' WHERE id in ('".implode("', '", $ids)."')"); // 获取下一个分类
if(!$curCategory = array_shift($categories)) {
// 没有分类结束
break;
} // 重新计数
$count = 0; // 记录更新文章的id
$ids = array();
}
}
// 这两句不要了
//$catnew = $citn;
//mysql_query("UPDATE articles SET directory = '".$catnew."' WHERE id = '".$id."' AND directory ='0' Order By date DESC LIMIT 5"); // 根据ID号匹配,UPDATE文章数据表,这里我试验时用了60篇文章,但是输完后查询数据库,却有11条文章的directory升级成了 'art'
}
mysql_close($db);
?>
后面2句可以不要了!
不过还是没有插入成功。
我把
$query = mysql_query("SELECT count(*) as count FROM tags1 WHERE ($where) AND category='$curCategory' ");
里的$curCategory,改成art,然后
while ($row = mysql_fetch_array($query)) {
$count = $row['count'];
echo $count;//输出 00100000111000011000000000000010000000000100010110001000000
}
用category='$curCategory' ,输出全部都变成了0。帮忙再看下,问题在哪里?
// 不建议用while, 仅仅是返回是否有还是没有
$_count = 0;
while ($row = mysql_fetch_array($query)) {
$_count = $row['count'];
} // 说明找到了分类
if($_count) {
//记录分类, 这里还可以验证directory是否 ='0'才记录分类
$ids[] = $row['id'];
$count++; // 高潮部分
if($count == 5) {
// 进行更新
mysql_query("UPDATE articles SET directory = '".$curCategory."' WHERE id in ('".implode("', '", $ids)."')"); // 获取下一个分类
if(!$curCategory = array_shift($categories)) {
// 没有分类结束
break;
} // 重新计数
$count = 0; // 记录更新文章的id
$ids = array();
}
}另外$query = mysql_query("SELECT count(*) as count FROM tags1 WHERE ($where) AND category='$curCategory' ");可以打印一下sql语句,然后放到mysql中,执行以后看有什么提示"SELECT count(*) as count FROM tags1 WHERE ($where) AND category='$curCategory' "