php-在这种情况下如何高效地编写mysql更新?

php-在这种情况下如何高效地编写mysql更新?,php,mysql,insert-update,Php,Mysql,Insert Update,我想让我的数据库文章重新分类。我不知道如何把文章分类得更好。我建立了一个参考表,把每个类别的每个单词都放在里面。 然后我从主表articles中查询,将每篇文章的内容探索成单词,并将它们放入参考表中,以匹配文章是否属于哪个类别?然后进行更新。 我想控制每个类别有一个最大的文章是5。我写了一些这样的代码 <?php header('Content-type:text/html; charset=utf-8'); $db = mysql_connect("localhost","root","

我想让我的数据库文章重新分类。我不知道如何把文章分类得更好。我建立了一个参考表,把每个类别的每个单词都放在里面。 然后我从主表
articles
中查询,将每篇文章的内容探索成单词,并将它们放入参考表中,以匹配文章是否属于哪个类别?然后进行更新。 我想控制每个类别有一个最大的文章是5。我写了一些这样的代码

<?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");//get all the articles from database
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' "); // put every word from each article into `tag1` database whether the article is match 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"); // update first 5 articles which is match category='art' 
$query = mysql_query("SELECT * FROM tags1 WHERE ($where) AND category='fashion' "); // put every word from each article into `tag1` database whether the article is match category='fashion'
$citn = '';
            while ($row = mysql_fetch_array($query)) {
        $citn .= $row['category']."|" ;
        } 
    $catnew = explode("|",$citn);
mysql_query("UPDATE articles SET directory = '".$catnew."' WHERE id = '".$id."' AND directory ='0'  Order By date DESC LIMIT 5"); // update first 5 articles which is match category='fashion'
$query = mysql_query("SELECT * FROM tags1 WHERE ($where) AND category='travel' ");// put every word from each article into `tag1` database whether the article is match category='travel'
... // there have 20 `category`, each is the same judge method.
}
}
mysql_close($db);
?>
这是我的tag1表

category | tag1    | tag2   | tag3       | tag4    |  tag5   
tourism  | tourism | travel | tour       | journey |  trip
fashion  | style   | vogue  | fashion    | mode    |  Popular
art      | paint   |
... // more 20 categories

原谅我,我觉得我一定是看错了你的代码,因为在我读的时候,有很多关于你代码的问题困扰着我

首先,您有许多领域,例如:

  while ($row = mysql_fetch_array($query)) {
$citn = $row['category'];
} 
当然,当运行时,它将只显示$citn中的最后一个条目,但在where子句中,您指定的类别必须是'art'。例如,因此,查询的目的是什么,您已经知道答案是'art'?除非这是简化的代码

因此,我想知道你认为你的代码做了什么,据我所知,“art”的第一个将返回$citn作为“art”,第二个将返回“fashion | fashion..”对于找到的tags1表中的每一行,如果有超过1个fashion,最后一次更新可能会失败,在将其分解为数组时,我不确定SQL将如何处理转储在其中的PHP数组。最后一个查询没有显示任何代码,因此。。我有点迷路了

我得到的印象是,您希望分解给定文章的文本,然后查看是否有5个或更多标记出现在目录中。如果是这样的话,我看不到这段代码会这样做


正如我所说,我可能有点误读了。

我得到的印象是,你想分解给定文章的文本,然后看看是否有5个或更多的标签出现在目录中。如果是这样,我看不到这段代码会这样做。
,如果我的错误导致了
致命错误
,如何编写编写代码?谢谢。你到底需要这个代码做什么?至少从你的代码来看,我没有你想象的那么清楚。我想分解给定文章的文本,然后查看是否有文章中的一个单词匹配1标记出现在Category中,然后在此Category名称中升级此文章。例如如果像
这样的文章旅途愉快
,那么该文章包含一个单词
旅程
匹配类别
旅游
,因此将文章
目录
更新为值
旅游
。然后允许最多5篇文章
目录
=
旅游
。谢谢。我自己检查了故障,我把
}
放错位置了。谢谢你。啊,这有点道理。
  while ($row = mysql_fetch_array($query)) {
$citn = $row['category'];
}