как составить запрос без помощи if

post

Новичок
как составить запрос без помощи if

Помогите, пожалуйста, как составить запрос.
Есть таблица dogovors.
Состоит из столбцов dog_id, dog_type, dog_number, dog_date, dog_name.
Из формы посылаются нужные категории поиска, которые выбирает пользователь.

<form action="search.php" method="POST">

Выберите нужные категории поиска: <br>
<input type="checkbox" name="type1" value="dog_type"> тип договора <br>
<input type="checkbox" name="type2" value="dog_number"> № договора <br>
<input type="checkbox" name="type3" value="dog_date"> дата <br>
<input type="checkbox" name="type4" value="dog_name"> имя файла договора <br>
<input type="checkbox" name="type5" value="dog_client"> наименование клиента <br>
&nbsp; <br>
<font> Ключевое слово: <br> &nbsp; <br>
<input type="text" name="keyword" >
<input type="image" src="search1.gif" ><br>
</form>

Каждой категории в checkbox соответствует столбец.
При выборе нужно искать по конкретным столбцам.
Я сделал с помощью if.
То, что есть:

PHP:
if  ($type1 == dog_type) { 
     $array = explode( " ", $keyword);           //ключевое предложение разбиваем на слова в массив 
     for ($i=0;$i<count($array); $i++) {      //$i перебирает слова в ключевом предложении
            $query = "select dog_type
                               from dogovors 
                               where dog_type like '%".addslashes($array[$i]) . "%'"  ; 
             
            $result = mysql_query($query);
             
             while ($myrow = mysql_fetch_row ($result)) {    
                         for ($n=0;$n<count($myrow);$n++) {
                                print "$myrow[$n] ";
                          }
               }       
       }
             
}

if  ($type2 == dog_number) {
     $array = explode( " ", $keyword);           //ключевое предложение разбиваем на слова в массив 
     for ($i=0;$i<count($array); $i++) {      //$i перебирает слова в ключевом предложении
            $query = "select dog_number
                               from dogovors 
                               where dog_number like '%".addslashes($array[$i]) . "%'"  ; 
             
            $result = mysql_query($query);
             
             while ($myrow = mysql_fetch_row ($result)) {    
                         for ($n=0;$n<count($myrow);$n++) {
                                print "$myrow[$n] ";
                          }
               }       
       }
             
}
и т.д. для $type3, $type4, $type5...

Подскажите, пожалуйста, можно ли написать это в одном запросе, чтобы в нём сразу проверялось, по каким столбцам искать.
И как сделать так, чтобы выводились только те строки, которые удовлетворяют всем выбранным категориям.
 

Wicked

Новичок
можно составлять такой запрос динамически.

А-ля...
if($type1 = 'dog_type') {
$query .= "or dog_type like '%".mysql_real_escape_string($array[$i])."%'";
}
if($type2 = 'dog_number') {
$query .= "or dog_number like '%".mysql_real_escape_string($array[$i])."%'";
}
и т.п.

Вообще, твой код можно улучшать и улучшать :) Уж больно он неказистый...
 

Фанат

oncle terrible
Команда форума
да уж. особенно в сторону уменьшения количества выполняемых каждый раз запросов
 

Wicked

Новичок
угу. В идеале должен получиться один запрос с поиском по полнотекстовому индексу :)
 

post

Новичок
Подскажите поподробней про fulltext index...

Я установил стобцу dog_type индекс fulltext. Вот, допустим, поиск по столбцу dog_type

$query = "select * from dogovors WHERE MATCH('dog_type') AGAINST('$keyword')";
$result = mysql_query($query);
while ($myrow = mysql_fetch_row ($result)) {
for ($n=0;$n<count($myrow);$n++) {
print "$myrow[$n] ";
}
}

.. но этот запрос у меня ничего не выводит.. почему?
 

Фанат

oncle terrible
Команда форума
Wicked
вот зря ты про фуллтекст заикнулся.
хотел еще вчера про это написать, но не стал.
 

post

Новичок
Автор оригинала: *****
Wicked
вот зря ты про фуллтекст заикнулся.
хотел еще вчера про это написать, но не стал.
думаете, не стОит здесь его употреблять
или я неправильно употребил?
 

Фанат

oncle terrible
Команда форума
я думаю, что тебе бы сначала стоило научиться составлять запросы для like
используя оператор OR и пхп для сборки нужной строки.
чтобы в результате получился один запрос.
а не как у тебя сейчас- количество типов помножить на количество слов
 

post

Новичок
$keyword = explode(" ", $keyword);

for($i=0; $i<count($keyword); $i++) {
$kak =$keyword[$i];
for($i=0; $i<count($_POST[type]); $i++) {
$where.="(".$_POST[type][$i]." LIKE '%$kak%') or";


}
} $where=substr($where, 0, strlen($where)-2);
$sql="select dog_number,dog_date,dog_name,dog_client,manager,dog_status,dog_id from dogovors where $where";
$result = mysql_query($sql);

вот, наконец, заработало.

-~{}~ 14.10.07 14:50:

ну и форма изменилась чуть-чуть

<input type="checkbox" name="type[]" value="dog_type"> тип договора <br>
<input type="checkbox" name="type[]" value="dog_number"> № договора <br>
<input type="checkbox" name="type[]" value="dog_date"> дата <br>
<input type="checkbox" name="type[]" value="dog_name"> имя файла договора <br>
<input type="checkbox" name="type[]" value="dog_client"> наименование клиента <br>
 

Фанат

oncle terrible
Команда форума
Любой читатель журнала "ксакеп" будет делать у тебя в базе все, что только пожелает. читать, писать, удалять.
 

Beavis

Banned
post
а где загадка то? тебе сказали что с твоим кодом любой кто читал журнал Xakep может делать с твоей базой почти всё что угодно...

можешь тоже стать читателем))
 
Сверху