PDA

View Full Version : جستجوی mysql به ترتیب میزان شباهت



anjexion
جمعه 29 اردیبهشت 1391, 15:04 عصر
درود
فرا تر از جستجوی معمولی پایگاه با عملگر LIKE آیا روشی وجود داره که بصورت بهینه ای بتونه میزان مشابهت رکورد ها رو به یک واژه بدست بیاره؟ بویژه وقتی پایگاه خیلی بزرگ باشه

MMSHFE
جمعه 29 اردیبهشت 1391, 17:10 عصر
فکر میکنم جستجوی Full Text (توسط دستور MATCH...AGAINST) کاری که میخواین رو انجام میده.

رضا قربانی
جمعه 29 اردیبهشت 1391, 18:38 عصر
include 'incl/db.php'; // Include the database
// Set the page, use one if the get page is not a number or is negative
if(!isset($_GET['page']) || !ctype_digit($_GET['page']))
$page = 1;
else
$page = $_GET['page'];
// Set the maximum number of results
$max = 10;
// Set the start location (when viewing the next page)
$limit = ($page * $max) - $max;

$q = trim(mysql_real_escape_string($_GET['q'])); // Make a safe string

// Make a query, (change "code" and "name" to your column names)
$query = "SELECT SQL_CALC_FOUND_ROWS *,
MATCH(code) AGAINST ('$q' IN BOOLEAN mode) AS score1,
MATCH(name) AGAINST ('$q' IN BOOLEAN mode) AS score2
FROM snippets
WHERE
MATCH(code,name) AGAINST ('$q' IN BOOLEAN mode)
ORDER BY score1 DESC, score2 DESC LIMIT $limit, $max";
// Perform the query
$sql = mysql_query($query);
// Find how many results would have been returned if there wasn't a limit
$result_count = mysql_query("SELECT FOUND_ROWS()")or die(mysql_error());
// Get the number
$total = mysql_fetch_array($result_count);
// Search the array for the total
$totalrows = $total[0];
// Calculate the number of pages, if it is a decimal, then there are
// more reusults, but that number is less than our $max (total number of results
// to display on the page)
$pages = ceil($totalrows / $max);
// Display the results...
if(mysql_num_rows($sql) > 0){
echo '<p>Found <b>'.$totalrows.'</b> results for <b>"'.htmlentities($_GET['q']).'"</b></p>';
$i = $limit + 1;
while($row = mysql_fetch_array($sql)){
echo '<p>'.$i.'. <a href="view.php?id='.$row['id'].'">'.$row['name'].'</a></p>';
$i++;
}
}else{
// No results were found
echo '<h2>No Results Found!</h2>';
}
// Display the page numbers (if there is more than one page)
if($pages > 1){
echo '<div style="padding:10px;">';
for($i = 1;$i<$pages+1;$i++){
if($i == $page)
echo '<span class="page" style="padding:10px;">'.$i.'</span>';
else
echo '<a style="padding:10px;" href="'.$_SERVER['PHP_SELF'].'?q='.$_GET['q'].'&amp;page='.$i.'">'.$i.'</a>';
}
echo '<span style="clear:both;display:block;font-size:1px;">&nbsp;</span>';
echo '</div>';
}

از آقا مصطفی

nader3
پنج شنبه 18 خرداد 1391, 16:16 عصر
سلام آقای قربانی میشه یه کم توضیحات بیشتری بدید