2015-06-21 3 views
1

Проблема, с которой я столкнулся, заключается в том, что в поисковом слове «анти» отобразится продукт, но когда поисковые слова «anti wrinkle» не упомянули никакого результата поиска. Пожалуйста, см. Ниже код и совет, что я пропустил.Функция поиска не работает для определенных слов

$search_output = ''; 

if(isset($_POST['search'])) { 
    $searchsql = $_POST['search']; 
    $searchsql = preg_replace('#[^a-z [email protected]]#i', '', $searchsql); 

    $query = mysql_query("SELECT tb_spa_prd.*, tb_spa_prd_cat.spa_prd_cat FROM tb_spa_prd AS tb_spa_prd INNER JOIN tb_spa_prd_cat ON tb_spa_prd.spa_prd_cat_id = tb_spa_prd_cat.spa_prd_cat_id WHERE spa_prd_cat LIKE '%$searchsql%' or spa_prd_code LIKE '%$searchsql%' or spa_prd_name LIKE '%$searchsql%'") or die ("Could no search!"); 
    $count = mysql_num_rows($query); 
    if($count == 0) { 
     $search_output .= '<tr> 
          <td colspan="9" style="text-align: center">There was no search results!</td> 
          </tr>'; 
    } else { 
     $row_no = 1; 
     while($row = mysql_fetch_array($query,MYSQL_ASSOC)) { 
      $spa_prd_id = $row["spa_prd_id"]; 
      $spa_prd_cat = $row["spa_prd_cat"]; 
      $spa_prd_code = $row["spa_prd_code"]; 
      $spa_prd_name = $row["spa_prd_name"]; 
      $spa_prd_vlm = $row["spa_prd_vlm"]; 
      $spa_prd_qty = $row["spa_prd_qty"]; 
      $spa_prd_crt_date = $row["spa_prd_crt_date"]; 
      $spa_prd_crt_usr = $row["spa_prd_crt_usr"]; 
      $search_output .= '<tr> 
            <td>'.$row_no++.'</td> 
            <td>'.$spa_prd_cat.'</td> 
            <td>'.$spa_prd_code.'</td> 
            <td>'.$spa_prd_name.'</td> 
            <td>'.$spa_prd_vlm.'</td> 
            <td>'.$spa_prd_qty.'</td> 
            <td>'.$spa_prd_crt_date.'</td> 
            <td>'.$spa_prd_crt_usr.'</td> 
          <td><a href=\'edit_spa_prd.php?spa_prd_id='.$spa_prd_id.'\'>Edit</a> | <a href=\'delete_spa_prd.php?spa_prd_id='.$spa_prd_id.'\'>Delete</a></td> 
           </tr>'; 
     } // close while loop 
    } 
} 
+1

Вместо того, чтобы разместить весь код, то лучше включать только необходимую часть. Вы должны распечатать запрос и запустить его в своем phpmyadmin, чтобы увидеть результат или отладить себя. –

+0

Я бы рекомендовал вам использовать полнотекстовый индекс для столбцов, которые вы используете в поиске. – Allkin

+0

@Quinn Если вы хотите, чтобы '' anti wrinkle'' срабатывал, вам нужно будет включить отдельный предикат LIKE для члена _each_, q.v. мой ответ ниже. –

ответ

0

Вы можете попробовать явно включая LIKE предикат для каждый термин поиска, как это:

$searchsql = $_POST['search']; 
$terms = explode(" ", $searchsql); 
$likecols = array("spa_prd_cat", "spa_prd_code, "spa_prd_name"); 
$likesql = ""; 
foreach ($likecols as $likecol) { 
    for ($i = 0; $i < count($terms); ++$i) { 
     if ($likecol == "spa_prd_cat" && $i == 0) { 
      $likesql = "spa_prd_cat LIKE $terms[0]"; 
     } 
     else { 
      $likesql .= " OR $likecol LIKE $terms[$i]"; 
     } 
    } 
} 

$querystr = "SELECT tb_spa_prd.*, tb_spa_prd_cat.spa_prd_cat FROM tb_spa_prd AS tb_spa_prd INNER JOIN tb_spa_prd_cat ON tb_spa_prd.spa_prd_cat_id = tb_spa_prd_cat.spa_prd_cat_id WHERE "; 
$querystr .= $likesql; 
$query = mysql_query($querystr) or die ("Could no search!"); 
+0

извините. Я совершенно новичок в этом. Я попробовал ваш предоставленный код, но упомянутый не смог выполнить поиск. Кроме того, я действительно не уверен, что '$ i' имеет в виду. Пожалуйста посоветуй. – Quinn

+0

Если вы хотите найти '' anti wrinkle'', вы можете использовать 'LIKE 'anti' OR LIKE 'wrinkle''. Мой код пытается это сделать. –

Смежные вопросы