Witam!
Otóż mam mały problem z wyszukiwarką, ogólnie rzecz biorąc działa, ale nie tak jak bym chciał, mianowicie gdy podam jakiś wyraz do wyszukania owszem znajdzie mi go w bazie danych, ale również wyszukuje wszystkie inne które nawet częściowo zawierają litery tego wyrazu. Tak więc wolał bym aby znajdowała konkretne wyrazy które sie podaje, ewentualnie istnieje taka możliwość, żeby te wyniki zawierające szukany ciąg w sobie znajdowały się na kolejnych dalszych pozycjach rezultatu wyszukiwania.. ale to już nie jest konieczne. Wszakże uprzejmie proszę o pomoc smile.gif

Wskrócie chodzi mi o wskazanie komendy, która może być odpowiedzialna za takie, a nie inne działanie wyszukiwania.. i tu np jak wpisuje kilka wyrazów to żeby znaleziony plik zawierał je wszystkie.


oto kod php pliku wyszukiwarki:


  1.  
  2. <?php
  3.  
  4. $t1=time();
  5. require('include/config.php');
  6. require('include/function.php');
  7. require('classes/pagination.class.php');
  8. require('language/' .$_SESSION['language']. '/search_result.lang.php');
  9.  
  10. $active = ( $config['approve'] == 1 ) ? " AND active = '1'" : NULL;
  11. $search_id = ( isset($_REQUEST['search_id']) ) ? mysql_real_escape_string($filterObj->process($_REQUEST['search_id'])) : NULL;
  12. $search_type = ( isset($_REQUEST['search_type']) ) ? $_REQUEST['search_type'] : 'videos';
  13. $search_key = ( isset($_REQUEST['search_key']) ) ? mysql_real_escape_string($filterObj->process($_REQUEST['search_key'])) : NULL;
  14. $sort = ( isset($_REQUEST['sort']) && strlen($_REQUEST['sort']) <= 7 ) ? $_REQUEST['sort'] : NULL;
  15. $page = ( isset($_GET['page']) && is_numeric($_GET['page']) ) ? trim($_GET['page']) : 1;
  16. $viewtype = ( isset($_REQUEST['viewtype']) && $_REQUEST['viewtype'] == 'detailed' ) ? 'detailed' : 'basic';
  17.  
  18. switch ( $sort ) {
  19. case 'addate':
  20. $sortby = " ORDER BY adddate DESC";
  21. break;
  22. case 'viewnum':
  23. $sortby = " ORDER BY viewnumber DESC";
  24. break;
  25. case 'rate':
  26. $sortby = " ORDER BY (ratedby*rate) DESC";
  27. break;
  28. default:
  29. $sortby = " ORDER BY title";
  30. }
  31.  
  32. if ( $search_id == '' && $search_key == '' ) {
  33. $err = $lang['search_result.query_empty'];
  34. }
  35.  
  36. $searching = false;
  37. $total = 0;
  38. $start_num = NULL;
  39. $end_num = NULL;
  40. $videos = array();
  41. $ch = NULL;
  42. if ( $err == '' ) {
  43. if ( $search_type == 'search_users' ) {
  44. $sql = "SELECT UID, username FROM signup WHERE username LIKE '%" .$search_id. "%' LIMIT 1";
  45. $rs = $conn->execute($sql);
  46. if ( $conn->Affected_Rows() ) {
  47. $uid = $rs->fields['UID'];
  48. $username = $rs->fields['username'];
  49. $URL = seo_url('users/' .$username, 'uprofile.php?UID=' .$uid);
  50. header('Location: ' .$URL);
  51. die();
  52. } else {
  53. $err = $lang['search_result.nothing'];
  54. }
  55. } elseif ( $search_type == 'search_groups' ) {
  56. $URL = $config['BASE_URL']. '/search_group.php?search_type=' .$search_type. '&search_id=' .$search_id;
  57. header('Location: ' .$URL);
  58. die();
  59. } elseif ( $search_type == 'related' ) {
  60. $searching = true;
  61. $list = key_to_info($search_key);
  62. $ch = explode(' ', $list['2']);
  63. if ( count($ch) > 1 ) {
  64. $channel = NULL;
  65. for ($i=1; $i<count($ch); $i++) {
  66. $channel .= "OR keyword LIKE '%" .mysql_real_escape_string($ch[$i]). "%'";
  67. }
  68. }
  69. $sql_count = "SELECT count(VID) AS total_videos FROM video WHERE type = 'public' AND (title LIKE '%" .mysql_real_escape_string($ch['0']). "%' " .$channel. ")";
  70. $sql = "SELECT * FROM video WHERE type = 'public' AND (title LIKE '%" .mysql_real_escape_string($ch['0']). "%' " .$channel. ") ORDER BY VID ASC";
  71. } else {
  72. $searching = true;
  73. $searches = explode(' ', $search_id);
  74. $query = "(";
  75. $query_add = NULL;
  76. foreach ( $searches as $item ) {
  77. $query .= $query_add. "title LIKE '%" .mysql_real_escape_string($item). "%' OR keyword LIKE '%" .mysql_real_escape_string($item). "%'";
  78. $query_add = " OR ";
  79. }
  80. $query .= ")";
  81. $sql_count = "SELECT count(VID) AS total_videos FROM video WHERE type = 'public'" .$active. " AND " .$query. $sortby;
  82. $sql = "SELECT * FROM video WHERE type = 'public'" .$active. " AND " .$query. $sortby;
  83. }
  84.  
  85. if ( $searching ) {
  86. $ars = $conn->execute($sql_count);
  87. $total = $ars->fields['total_videos'];
  88. $pagination = new Pagination($config['items_per_page']);
  89. $limit = $pagination->getLimit($total);
  90. $sql = $sql. " LIMIT " .$limit;
  91. $rs = $conn->execute($sql);
  92. $videos = $rs->getrows();
  93. $pagination_url = $config['BASE_URL']. '/search/{#PAGE#}/?sort=' .$sort. '&search_type=' .$search_type. '&search_id=' .$search_id. '&search_key=' .$search_key;
  94. $page_link = $pagination->getPagination($pagination_url);
  95. $start_num = $pagination->getStartItem();
  96. $end_num = $pagination->getEndItem();
  97. $tags = group_tags($sql);
  98. STemplate::assign('tags',$tags);
  99.  
  100. if ( $total == 0 ) {
  101. $err = $lang['search_result.nothing'];
  102. }
  103. }
  104. }
  105.  
  106. STemplate::assign('err',$err);
  107. STemplate::assign('msg',$msg);
  108. STemplate::assign('ch', $ch);
  109. STemplate::assign('page',$page);
  110. STemplate::assign('viewtype', $viewtype);
  111. STemplate::assign('start_num',$start_num);
  112. STemplate::assign('end_num',$end_num);
  113. STemplate::assign('page_link',$page_link);
  114. STemplate::assign('total',$total);
  115. STemplate::assign('answers',$videos);
  116. STemplate::assign('head_bottom',"homelinks.tpl");
  117. STemplate::display('head1.tpl');
  118. STemplate::display('err_msg.tpl');
  119. STemplate::display('search.tpl');
  120. $t2=time();
  121. STemplate::assign('ttime',($t2-$t1));
  122. STemplate::display('search_result.tpl');
  123. STemplate::display('footer.tpl');
  124. STemplate::gzip_encode();
  125. ?>
  126.  


-------------------------------------------------------
Edit:
OK.. juz sobie poradziłem. Wystarczyło zamienić odpowiednie wartosci logiczne OR na AND i śmiga praktycznie tak jak chcialem (bo nie ma rzeczy idealnych:P )