Поиск с помощью php. сравнивая keyward с несколькими столбцами в одной таблице - PullRequest
1 голос
/ 26 февраля 2011
                                                                      <?php
//get data
session_start();

$button = $_GET['submit'];
$search = $_GET['search'];
if (!$button)
    echo "YOU DIDNT SUBMIT A KEYWORD";
else
{
   if (strlen($search)<=2)
       echo "SEARCH TERM TOO SHORT";
   else
   {
       echo"You searched for <b>$search</b><hr size='1'>";


   //connect to database
   include("connect.php");



    // a bit of filtering
 $search = strtoupper($search);
 $search= strip_tags($search);
 $search = trim ($search);

$search_exploded = explode(" ",$search);

foreach ($search_exploded as $search_each)

       {
          //construct query
           $x++;
           if ($x==1)
             $construct .= "CONCAT(role_category1, role_category2, role_category3, role_category4) LIKE '%$search_each%'";
           else
               $construct .= " OR CONCAT(role_category1, role_category2, role_category3, role_category4) LIKE '%$search_each%'";

       }
   //echo out construct
$construct = "SELECT * FROM  jobdescription WHERE $construct";
$run = mysql_query($construct);

$foundnum = mysql_num_rows($run);

if ($foundnum==0)
    echo "No results found.";
else
    {
     echo "$foundnum results found!<p>";

     while ($runrows = mysql_fetch_assoc($run))
         {

         $jobdescriptionid = $runrows['jobdescriptionid'];

         $companyid = $runrows['companyid'];
         $companyid = $runrows['companyid'];
         $role_1= $runrows['role_1'];
         $role_location_1 = $runrows['role_location_1'];
         $role_category_1 = $runrows['role_category_1'];
         $role_term_1 = $runrows['role_term_1'];
         $role_description_1 = $runrows['role_description_1'];
          $role_2= $runrows['role_2'];
         $role_location_2 = $runrows['role_location_2'];
         $role_category_2 = $runrows['role_category_2'];
         $role_term_2 = $runrows['role_term_2'];
         $role_description_2 = $runrows['role_description_2'];

         echo "
         <b>$companyid
          <b>$jobseekerfirstname $jobseekerlastname </b><br>
         $role_1<br>
         $role_location_1<br>
         $role_category_1<br>

          $role_2<br>
         $role_location_2<br>
         $role_category_2<br>";




 }
        }}}

?> Я использую скрипт php, но он по-прежнему определяет, что я ищу.Я пытаюсь найти поля в одной и той же таблице, но в разных столбцах (заголовки этих столбцов - role_category1, role_category2 .....) любые предложения

1 Ответ

1 голос
/ 26 февраля 2011
$construct .= "'role_category_1' || 'role_category_2' || 'role_category_3' || 'role_category_4' OR preferedlocation LIKE '%$search_each%'";

в MySQL конкатенация выполняется с помощью функции CONCAT () - вы выполняете битовые OR операции над строками, поэтому ваша конструкция обрабатывается как:

string || string || string || string LIKE '%blahblahblah%'

, которая становится

0 || 0 || 0 || 0 LIKE '%blahblah%';
0 || (0 LIKE '%blahblah%')
0

Кроме того, поскольку вы помещаете одинарные кавычки вокруг имен полей, MySQL будет обрабатывать их как строки, а не как имена полей, поэтому вы фактически пытались сопоставить входную текстовую строку с фиксированной строкой, котораявыглядит как

role1_category1role_category2role_category3role_category4

Вы хотите

$construct .= "CONCAT(role_category1, role_category2, role_category3, role_category4) LIKE '%blahblah%'";

вместо.Обратите внимание на отсутствие кавычек вокруг имен полей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...