View Single Post
  #4  
Old 10-17-2002, 10:19 PM
ScottA ScottA is offline
 
Join Date: May 2002
Posts: 12
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Sure. Here's what I came up with. The only real differences between my first attempt and this final version are the third and fourth MySQL queries. It does not return the most recent results. What it does instead is group the threads with the highest number of instances of the search word(s), and then sort those by date. It may not be the most efficient or desirable system for your particular application, but it seems to work pretty well. If you come up with any improvements please let me know.

I've simply included it as a function, which can be called with some keywords separated by spaces. I'd recommend not using more than 2 or 3 keywords simply because of the large number of posts it will find. If you print out the queries like I did in my first example you'll see just how many! Change "LIMIT 5" to the number of results you want.

PHP Code:
related_threads("keyword1 keyword2 etc"); 
Related Threads:

PHP Code:
<?php
function related_threads($keywords) {
  @
mysql_connect("localhost""username""password");
  
$words strtolower($keywords);
  
$words explode(' '$words);
  for (
$i 0$i count($words); $i++) {
    
$searchwords .= "title = '{$words[$i]}'";
    if (
$icount($words)) {
      
$searchwords .= ' OR ';
    }
  }
  
$query "SELECT wordid FROM word WHERE $searchwords";
  unset(
$searchwords);
  
$result = @mysql_db_query("forums"$query);
  if (@
mysql_num_rows($result) >= 1) {
    
$i 1;
    while (
$r = @mysql_fetch_array($result)) {
      if (
$i 1) {
        
$searchwords .= ', ';
      }
      
$searchwords .= "'{$r['wordid']}'";
      
$i++;
    }
    
$query "SELECT DISTINCT postid FROM searchindex WHERE wordid IN($searchwords)";
    unset(
$searchwords);
    
$result = @mysql_db_query("forums"$query);
    
$i 1;
    while (
$r = @mysql_fetch_array($result)) {
      if (
$i 1) {
        
$searchwords .= ', ';
      }
      
$searchwords .= "'{$r['postid']}'";
      
$i++;
    }
    
$query "SELECT threadid, count(threadid) AS count FROM post WHERE postid IN($searchwords) AND visible = '1' 
GROUP BY threadid ORDER BY count DESC, dateline LIMIT 5"
;
    unset(
$searchwords);
    
$result = @mysql_db_query("forums"$query);
    
$i 1;
    while (
$r = @mysql_fetch_array($result)) {
      if (
$i 1) {
        
$searchwords .= ', ';
      }
      
$searchwords .= "'{$r['threadid']}'";
      
$i++;
    }
    
$query "SELECT threadid, title, replycount, dateline FROM thread WHERE threadid IN($searchwords) AND visible 
= '1' AND open = '1' ORDER BY lastpost DESC"
;
    
$result = @mysql_db_query("forums"$query);
    echo 
"<table border=\"1\" cellpadding=\"5\" cellspacing=\"0\" width=\"100%\">\n  <tr>\n    <td>Thread</td>\n    
<td>Date</td>\n    <td>Replies</td>\n  </tr>\n"
;
    while (
$r = @mysql_fetch_array($result)) {
      echo 
"  <tr>\n    <td><a href=\"http://www.nissanforums.com/showthread.php?threadid={$r['threadid']}\" 
target=\"_blank\">
{$r['title']}</a></td>\n    <td>" date("m-d-y"$r['dateline']) . "</td>\n    <td>{$r['replycount']}
</td>\n  </tr>\n"
;
    }
    echo
"</table>\n";
  }
  @
mysql_close();
}
?>
Edit: I wrapped some of the lines so they'd fit on my screen...

Scott
Reply With Quote
 
X vBulletin 3.8.12 by vBS Debug Information
  • Page Generation 0.01190 seconds
  • Memory Usage 1,820KB
  • Queries Executed 11 (?)
More Information
Template Usage:
  • (1)SHOWTHREAD_SHOWPOST
  • (1)ad_footer_end
  • (1)ad_footer_start
  • (1)ad_header_end
  • (1)ad_header_logo
  • (1)ad_navbar_below
  • (2)bbcode_php
  • (1)footer
  • (1)gobutton
  • (1)header
  • (1)headinclude
  • (6)option
  • (1)post_thanks_box
  • (1)post_thanks_button
  • (1)post_thanks_javascript
  • (1)post_thanks_navbar_search
  • (1)post_thanks_postbit_info
  • (1)postbit
  • (1)postbit_onlinestatus
  • (1)postbit_wrapper
  • (1)spacer_close
  • (1)spacer_open 

Phrase Groups Available:
  • global
  • postbit
  • reputationlevel
  • showthread
Included Files:
  • ./showpost.php
  • ./global.php
  • ./includes/init.php
  • ./includes/class_core.php
  • ./includes/config.php
  • ./includes/functions.php
  • ./includes/class_hook.php
  • ./includes/modsystem_functions.php
  • ./includes/functions_bigthree.php
  • ./includes/class_postbit.php
  • ./includes/class_bbcode.php
  • ./includes/functions_reputation.php
  • ./includes/functions_post_thanks.php 

Hooks Called:
  • init_startup
  • init_startup_session_setup_start
  • init_startup_session_setup_complete
  • cache_permissions
  • fetch_postinfo_query
  • fetch_postinfo
  • fetch_threadinfo_query
  • fetch_threadinfo
  • fetch_foruminfo
  • style_fetch
  • cache_templates
  • global_start
  • parse_templates
  • global_setup_complete
  • showpost_start
  • bbcode_fetch_tags
  • bbcode_create
  • postbit_factory
  • showpost_post
  • postbit_display_start
  • post_thanks_function_post_thanks_off_start
  • post_thanks_function_post_thanks_off_end
  • post_thanks_function_fetch_thanks_start
  • post_thanks_function_fetch_thanks_end
  • post_thanks_function_thanked_already_start
  • post_thanks_function_thanked_already_end
  • fetch_musername
  • postbit_imicons
  • bbcode_parse_start
  • bbcode_parse_complete_precache
  • bbcode_parse_complete
  • postbit_display_complete
  • post_thanks_function_can_thank_this_post_start
  • showpost_complete