More search updates + user posts

git-svn-id: file:///svn/phpbb/trunk@1428 89ea8834-ac86-4346-8a33-228a782c2dd0
This commit is contained in:
Paul S. Owen 2001-11-23 19:01:51 +00:00
parent e0489034fc
commit 8b7b50cdfb
2 changed files with 81 additions and 88 deletions

View file

@ -88,20 +88,7 @@ function remove_common($percent, $word_id_list = array())
{ {
global $db; global $db;
$word_id_sql = ""; // 0.01-0.06s
if( count($word_id_list) )
{
for($i = 0; $i < count($word_id_list); $i++ )
{
if( $word_id_sql != "" )
{
$word_id_sql .= ", ";
}
$word_id_sql .= $word_id_list[$i]['word_id'];
}
$word_id_sql = "WHERE word_id IN ($word_id_sql) ";
}
$sql = "SELECT SUM(forum_posts) AS total_posts $sql = "SELECT SUM(forum_posts) AS total_posts
FROM " . FORUMS_TABLE ; FROM " . FORUMS_TABLE ;
$result = $db->sql_query($sql); $result = $db->sql_query($sql);
@ -116,6 +103,13 @@ function remove_common($percent, $word_id_list = array())
{ {
$common_threshold = floor($row['total_posts'] * $percent); $common_threshold = floor($row['total_posts'] * $percent);
$word_id_sql = "";
if( count($word_id_list) )
{
$word_id_sql = "WHERE word_id IN (" . implode(", ", $word_id_list) . ") ";
}
// 0.020-0.024s
$sql = "SELECT word_id $sql = "SELECT word_id
FROM " . SEARCH_MATCH_TABLE . " FROM " . SEARCH_MATCH_TABLE . "
$word_id_sql $word_id_sql
@ -127,6 +121,7 @@ function remove_common($percent, $word_id_list = array())
message_die(GENERAL_ERROR, "Couldn't obtain common word list", "", __LINE__, __FILE__, $sql); message_die(GENERAL_ERROR, "Couldn't obtain common word list", "", __LINE__, __FILE__, $sql);
} }
// No matches
if( $word_count = $db->sql_numrows($result) ) if( $word_count = $db->sql_numrows($result) )
{ {
$common_word_id_list = array(); $common_word_id_list = array();
@ -158,19 +153,7 @@ function remove_common($percent, $word_id_list = array())
message_die(GENERAL_ERROR, "Couldn't delete word match entry", "", __LINE__, __FILE__, $sql); message_die(GENERAL_ERROR, "Couldn't delete word match entry", "", __LINE__, __FILE__, $sql);
} }
} }
else
{
return 0;
}
} }
else
{
return 0;
}
}
else
{
return 0;
} }
return $word_count; return $word_count;
@ -235,6 +218,7 @@ function remove_unmatched_words()
case 'mysql': case 'mysql':
case 'mysql4': case 'mysql4':
// 0.07s
$sql = "SELECT w.word_id $sql = "SELECT w.word_id
FROM " . SEARCH_WORD_TABLE . " w FROM " . SEARCH_WORD_TABLE . " w
LEFT JOIN " . SEARCH_MATCH_TABLE . " m ON m.word_id = w.word_id LEFT JOIN " . SEARCH_MATCH_TABLE . " m ON m.word_id = w.word_id
@ -253,6 +237,7 @@ function remove_unmatched_words()
if( $word_id_sql ) if( $word_id_sql )
{ {
// 0.07s (about 15-20 words)
$sql = "DELETE FROM " . SEARCH_WORD_TABLE . " $sql = "DELETE FROM " . SEARCH_WORD_TABLE . "
WHERE word_id IN ($word_id_sql)"; WHERE word_id IN ($word_id_sql)";
$result = $db->sql_query($sql); $result = $db->sql_query($sql);
@ -285,97 +270,80 @@ function add_search_words($post_id, $post_text, $post_title = "")
$stopword_array = @file($phpbb_root_path . "language/lang_" . $board_config['default_lang'] . "/search_stopwords.txt"); $stopword_array = @file($phpbb_root_path . "language/lang_" . $board_config['default_lang'] . "/search_stopwords.txt");
$synonym_array = @file($phpbb_root_path . "language/lang_" . $board_config['default_lang'] . "/search_synonyms.txt"); $synonym_array = @file($phpbb_root_path . "language/lang_" . $board_config['default_lang'] . "/search_synonyms.txt");
// 0.3s
$search_text = clean_words($post_text, $stopword_array, $synonym_array); $search_text = clean_words($post_text, $stopword_array, $synonym_array);
// $search_title = clean_words($post_title, $stopword_array, $synonym_array);
$search_matches = split_words($search_text); $search_matches = split_words($search_text);
if( count($search_matches) ) if( count($search_matches) )
{ {
$word = array(); $word = array();
sort($search_matches);
for ($j = 0; $j < count($search_matches); $j++) $word_text_sql = "";
for ($i = 0; $i < count($search_matches); $i++)
{ {
$this_word = strtolower(trim($search_matches[$j])); $search_matches[$i] = trim($search_matches[$i]);
$new_word = true; if( $search_matches[$i] != "" && $search_matches[$i] != $search_matches[$i-1] )
for($k = 0; $k < count($word); $k++)
{ {
if( $this_word == $word[$k] || $this_word == "" ) $word[] = $search_matches[$i];
if( $word_text_sql != "" )
{ {
$new_word = false; $word_text_sql .= ", ";
} }
}
if( $new_word ) $word_text_sql .= "'" . $search_matches[$i] . "'";
{ }
$word[] = $this_word;
}
}
$word_sql_in = "";
for ($j = 0; $j < count($word); $j++)
{
if( $word_sql_in != "" )
{
$word_sql_in .= ", ";
}
$word_sql_in .= "'" . $word[$j] . "'";
} }
$sql = "SELECT word_id, word_text, word_common $sql = "SELECT word_id, word_text, word_common
FROM " . SEARCH_WORD_TABLE . " FROM " . SEARCH_WORD_TABLE . "
WHERE word_text IN ($word_sql_in)"; WHERE word_text IN ($word_text_sql)";
$result = $db->sql_query($sql); $result = $db->sql_query($sql);
if( !$result ) if( !$result )
{ {
message_die(GENERAL_ERROR, "Couldn't select words", "", __LINE__, __FILE__, $sql); message_die(GENERAL_ERROR, "Couldn't select words", "", __LINE__, __FILE__, $sql);
} }
$check_words = array();
$word_id_list = array();
if( $word_check_count = $db->sql_numrows($result) ) if( $word_check_count = $db->sql_numrows($result) )
{ {
$check_words = $db->sql_fetchrowset($result); while( $row = $db->sql_fetchrow($result) )
{
$check_words[$row['word_text']] = $row['word_common'];
$word_id_list[] = $row['word_id'];
}
} }
$match_word = array(); $match_word = array();
for ($j = 0; $j < count($word); $j++) for ($i = 0; $i < count($word); $i++)
{ {
if( $word[$j] ) $new_match = true;
$word_common = false;
if( $word_check_count )
{ {
$new_match = true; if( isset($check_words[$word[$i]]) )
$word_common = false;
if( $word_check_count )
{ {
for($k = 0; $k < $word_check_count; $k++) $new_match = false;
{
if( $word[$j] == $check_words[$k]['word_text'] )
{
if( $check_words[$k]['word_common'] )
{
$word_common = true;
}
$new_match = false;
}
}
} }
}
if( !$word_common ) if( !$check_words[$word[$i]] )
{ {
$match_word[] = "'" . $word[$j] . "'"; $match_word[] = "'" . $word[$i] . "'";
} }
if( $new_match ) if( $new_match )
{
$sql = "INSERT INTO " . SEARCH_WORD_TABLE . " (word_text, word_common)
VALUES ('". $word[$i] . "', 0)";
$result = $db->sql_query($sql);
if( !$result )
{ {
$sql = "INSERT INTO " . SEARCH_WORD_TABLE . " (word_text) message_die(GENERAL_ERROR, "Couldn't insert new word", "", __LINE__, __FILE__, $sql);
VALUES ('". addslashes($word[$j]) . "')";
$result = $db->sql_query($sql);
if( !$result )
{
message_die(GENERAL_ERROR, "Couldn't insert new word", "", __LINE__, __FILE__, $sql);
}
} }
} }
} }
@ -391,10 +359,19 @@ function add_search_words($post_id, $post_text, $post_title = "")
{ {
message_die(GENERAL_ERROR, "Couldn't insert new word matches", "", __LINE__, __FILE__, $sql); message_die(GENERAL_ERROR, "Couldn't insert new word matches", "", __LINE__, __FILE__, $sql);
} }
} }
remove_common(0.15, $check_words); /*
$mtime = explode(" ",microtime());
$starttime = $mtime[1] + $mtime[0];
$mtime = explode(" ", microtime());
$endtime = $mtime[1] + $mtime[0];
echo "<BR><BR> TIMING1 >>>>>>>>> " . ($endtime - $starttime) . "<BR><BR>\n";
*/
remove_common(0.15, $word_id_list);
return; return;
} }
@ -1488,7 +1465,9 @@ if( ( $submit || $confirm || $mode == "delete" ) && !$error )
{ {
$row = $db->sql_fetchrow($result); $row = $db->sql_fetchrow($result);
if( $userdata['user_id'] != $row['poster_id'] && !$is_auth['auth_mod']) $poster_id = $row['poster_id'];
if( $userdata['user_id'] != $poster_id && !$is_auth['auth_mod'])
{ {
$message = ( $delete || $mode == "delete" ) ? $lang['Delete_own_posts'] : $lang['Edit_own_posts']; $message = ( $delete || $mode == "delete" ) ? $lang['Delete_own_posts'] : $lang['Edit_own_posts'];
$message .="<br /><br />" . sprintf($lang['Click_return_topic'], "<a href=\"" . append_sid("viewtopic.$phpEx?" . POST_TOPIC_URL . "=$topic_id") . "\">", "</a>"); $message .="<br /><br />" . sprintf($lang['Click_return_topic'], "<a href=\"" . append_sid("viewtopic.$phpEx?" . POST_TOPIC_URL . "=$topic_id") . "\">", "</a>");
@ -1631,14 +1610,25 @@ if( ( $submit || $confirm || $mode == "delete" ) && !$error )
if( $delete || $mode == "delete" ) if( $delete || $mode == "delete" )
{ {
$sql = "UPDATE " . USERS_TABLE . "
SET user_posts = user_posts - 1
WHERE user_id = " . $poster_id;
if( !$db->sql_query($sql, BEGIN_TRANSACTION) )
{
message_die(GENERAL_MESSAGE, "Couldn't update users post count", "", __LINE__, __FILE__, $sql);
}
$sql = "DELETE FROM " . SEARCH_MATCH_TABLE . " $sql = "DELETE FROM " . SEARCH_MATCH_TABLE . "
WHERE post_id = $post_id"; WHERE post_id = $post_id";
$result = $db->sql_query($sql, BEGIN_TRANSACTION); $result = $db->sql_query($sql);
if( !$result ) if( !$result )
{ {
message_die(GENERAL_ERROR, "Couldn't delete word match entry for this post", "", __LINE__, __FILE__, $sql); message_die(GENERAL_ERROR, "Couldn't delete word match entry for this post", "", __LINE__, __FILE__, $sql);
} }
//
// Removes redundant words from wordlist table
//
remove_unmatched_words(); remove_unmatched_words();
$sql = "DELETE FROM " . POSTS_TEXT_TABLE . " $sql = "DELETE FROM " . POSTS_TEXT_TABLE . "
@ -1863,6 +1853,9 @@ if( ( $submit || $confirm || $mode == "delete" ) && !$error )
} }
} }
//
// Clear out the old matches
//
$sql = "DELETE FROM " . SEARCH_MATCH_TABLE . " $sql = "DELETE FROM " . SEARCH_MATCH_TABLE . "
WHERE post_id = $post_id"; WHERE post_id = $post_id";
$result = $db->sql_query($sql, BEGIN_TRANSACTION); $result = $db->sql_query($sql, BEGIN_TRANSACTION);
@ -1878,7 +1871,7 @@ if( ( $submit || $confirm || $mode == "delete" ) && !$error )
{ {
$sql = "UPDATE " . POSTS_TEXT_TABLE . " $sql = "UPDATE " . POSTS_TEXT_TABLE . "
SET post_text = '$post_message', post_subject = '$post_subject' SET post_text = '$post_message', post_subject = '$post_subject'
WHERE post_id = $post_id"; WHERE post_id = $post_id";
if( $is_first_post_topic ) if( $is_first_post_topic )
{ {

View file

@ -248,7 +248,7 @@ if( isset($HTTP_GET_VARS['mode']) || isset($HTTP_POST_VARS['mode']) )
$posts_per_day = sprintf("%.2f", $profiledata['user_posts'] / $memberdays); $posts_per_day = sprintf("%.2f", $profiledata['user_posts'] / $memberdays);
// Get the users percentage of total posts // Get the users percentage of total posts
if($profiledata['user_posts'] != 0) if( $profiledata['user_posts'] != 0 && $total_posts != 0 )
{ {
$total_posts = get_db_stat("postcount"); $total_posts = get_db_stat("postcount");
$percentage = sprintf("%.2f", ($profiledata['user_posts'] / $total_posts) * 100); $percentage = sprintf("%.2f", ($profiledata['user_posts'] / $total_posts) * 100);