Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: поиск в MySQL
 
 автор: Crux   (16.10.2004 в 20:55)   письмо автору
 
 

раскажите пожалуйсто как лучше организовать поиск по БД, какие запросы для этого существуют.

зарание благодарен.

   
 
 автор: Адоп Акробат   (16.10.2004 в 21:11)   письмо автору
 
   для: Crux   (16.10.2004 в 20:55)
 

Я пользуюсь оператором like и по мойму это единственная функция для поиска

   
 
 автор: cheops   (16.10.2004 в 21:12)   письмо автору
 
   для: Crux   (16.10.2004 в 20:55)
 

А что требуется найти? По ссылке приведён обсуждение полнотекстового поиска по таблице, но часто достаточно осуществлять поиск по дате или цене...

http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=148

   
 
 автор: Crux   (16.10.2004 в 21:21)   письмо автору
 
   для: cheops   (16.10.2004 в 21:12)
 

с опрератором LIKE всё понятно, а другие операторы существуют?

   
 
 автор: cheops   (16.10.2004 в 22:13)   письмо автору
 
   для: Crux   (16.10.2004 в 21:21)
 

Там по ссылке указано два способа, один оператор LIKE, второй полнотекстовый поиск по столбцу для которого имеется индекс FULLTEXT. В последнем случае используется операторы
MATCH (...) AGAINST

Например,
SELECT id FROM base 
WHERE MATCH(text) AGAINST('искомое слово'); 


PS В рамках полнотекстового поиска в последних версиях MySQL появился так называемый логический режим позволяющий задавать действительно гибкие условия поиска.

   
 
 автор: Crux   (16.10.2004 в 22:52)   письмо автору
 
   для: cheops   (16.10.2004 в 22:13)
 

ясно спасиб, но тема пока ещё не закрыта

   
 
 автор: LimP   (20.10.2004 в 18:40)   письмо автору
 
   для: Crux   (16.10.2004 в 22:52)
 

я вот тоже пользую
SELECT id FROM base 
WHERE MATCH(text) AGAINST('искомое слово'); 

так привычней с обычными запросами...

   
 
 автор: вопрос_MYSQL   (22.10.2004 в 10:00)   письмо автору
 
   для: cheops   (16.10.2004 в 21:12)
 

А как найти значение поля и сделать то или иное действие?


<? php
$x
mysql_query ("SELECT  FROM base
WHERE text LIKE 'искомое_слово' ;"
);
if (
$x)
{
 echo 
"в таблице base в поле есть искомое слово";
 }
 else
 {
  
"в таблице base в поле нет искомого слова";
     }
?>


у меня что то не так а что ?

   
 
 автор: cheops   (22.10.2004 в 11:36)   письмо автору
 
   для: вопрос_MYSQL   (22.10.2004 в 10:00)
 

Хм.. в SQL-запросе после SELECT отсутствует знак звёздочки, кроме того $x - является дескриптором и принимает false, только в том случае если база данных не может выполнить запрос (например, ошибка в синтаксисе SQL-запроса), для проверки того факта найдено искомое слово или нет лучше воспользоваться функцией mysql_num_rows()
<?php 
$x
mysql_query ("SELECT * FROM base 
WHERE text LIKE 'искомое_слово' ;"
); 
if (!
$x

  echo 
"Ошибка в синтаксисе";
  exit();
}
if(
mysql_num_rows($x)>0)
{
  echo 
"в таблице base в поле есть искомое слово"

else 

  echo 
"в таблице base в поле нет искомого слова"

?> 


http://www.softtime.ru/dic/id_dic=122&id_group=2

   
 
 автор: вопрос_MYSQL   (22.10.2004 в 12:10)   письмо автору
 
   для: cheops   (22.10.2004 в 11:36)
 

pole-имя столбца

<?php
$x 
mysql_query ("SELECT pole
         FROM table_name WHERE pole= '"
.$имя_переменной_что_ищем."'
         ;"
);
if (!
$x

  echo 
"Ошибка в синтаксисе"
  exit(); 
}
if (@
mysql_result($xpole))
{
echo 
" '".$имя_переменной_что_ищем."'  есть";
}
else
{
echo 
" '".$имя_переменной_что_ищем."'  нет";
}
?>

А так хуже или просто по другому?

   
 
 автор: cheops   (22.10.2004 в 12:28)   письмо автору
 
   для: вопрос_MYSQL   (22.10.2004 в 12:10)
 

В принципе должно работать, но это хуже в идеологическом смысле :), в условие оператора if лучше вообще не помещать функции которые не возвращают жёстко true или false (ну или 1 и 0, соотвественно) это часто приводит к логическим ошибкам, которые вылавливаются всех дольше.

   
 
 автор: Crux   (25.10.2004 в 23:28)   письмо автору
 
   для: cheops   (22.10.2004 в 12:28)
 

а оператор REGEXP чем отличается от LIKE

   
 
 автор: cheops   (25.10.2004 в 23:48)   письмо автору
 
   для: Crux   (25.10.2004 в 23:28)
 

RLIKE или REGEXP - это аналоги оператора LIKE, но вместо шаблона поиска допускающие использование регулярных выражений.
SELECT "fo\nfo" REGEXP "^fo$";
SELECT "fofo" REGEXP "^fo";

Первое сравнение ложно, второе истино.

   
 
 автор: Crux   (26.10.2004 в 00:06)   письмо автору
 
   для: cheops   (25.10.2004 в 23:48)
 

ага... это то мне и надо было, спасиб

   
 
 автор: Sin   (26.03.2005 в 14:05)   письмо автору
 
   для: Crux   (26.10.2004 в 00:06)
 

А вот я сталкнулся с интересной ситуацией... А разве с помощью like можно искать только по полям char и varchar
А с помощью конструкции MATCH (...) AGAINST только по полям типа text?

   
 
 автор: cheops   (26.03.2005 в 15:40)   письмо автору
 
   для: Sin   (26.03.2005 в 14:05)
 

С помощью MATCH (...) AGAINST только по полям производных от text, так как для этого используется индекс полнотекстового поиска FULLTEXT.

http://www.softtime.ru/forum/read.php?id_forum=3&id_theme=1991

   
 
 автор: Sin   (26.03.2005 в 16:13)   письмо автору
 
   для: cheops   (26.03.2005 в 15:40)
 

А значит с помощью like можно искать по любым полям?

   
 
 автор: cheops   (26.03.2005 в 18:15)   письмо автору
 
   для: Sin   (26.03.2005 в 16:13)
 

В общем да.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования