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

Форум MySQL

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

 

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

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

тема: пара вопросов по организации поиска
 
 автор: куч1963   (23.06.2006 в 17:07)   письмо автору
 
 

сделал такую констукцию

 $query = "select id_article from paragraphes WHERE MATCH(name) AGAINST('$_POST[name]*' IN BOOLEAN MODE) GROUP BY id_article"; 
  $post = mysql_query($query);
        if($post)
        {
          $num = mysql_num_rows($post);
          if($num>0)
          {
           
            while($posts = mysql_fetch_array($post))
            {
             $idol = mysql_query("SELECT * FROM articles WHERE id_article =' ".$posts['id_article']."'"); 
            
             while($pos = mysql_fetch_array($idol))
             {
             echo " <a href=../article/index.php?id_article=".$pos['id_article'].">".$pos['name']."</a><br>";
             }
            }
           
          }
          else
          {
            echo "По запросу ничего не найдено.";
            exit();
          }}

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

   
 
 автор: cheops   (23.06.2006 в 23:34)   письмо автору
 
   для: куч1963   (23.06.2006 в 17:07)
 

Для этого необходимо воспользоваться многотабличным запросом
select articles.* from articles, paragraphes 
WHERE MATCH(paragraphes.name) AGAINST('$_POST[name]*' IN BOOLEAN MODE) 
GROUP BY articles.id_article

   
 
 автор: куч1963   (24.06.2006 в 09:00)   письмо автору
 
   для: cheops   (23.06.2006 в 23:34)
 

Спасибо Сheops,
немного скорректировал запрос таким образом


select articles.id_article AS id_article,
                        articles.name AS name,
                     paragraphes.name AS text,
                        paragraphes.id_article
    from articles, paragraphes
WHERE articles.id_article = paragraphes.id_article AND  MATCH(paragraphes.name) AGAINST('$_POST[name]*' IN BOOLEAN MODE)
GROUP BY articles.id_article


вывод делаю стандартно


$post = mysql_query($query);
        if($post)
        {
          $num = mysql_num_rows($post);
          if($num>0)
          {
           
            while($posts = mysql_fetch_array($post))
            {
            
             echo " <a href=../article/index.php?id_article=".$posts['id_article'].">".$posts['name']."</a><br>
             
            }

пробоввал выводить отрывок текста с $_POST[name], но получается только когда полное соответствие :((;
А на второй вопрос так ответа не получил.
Сейчас у меня поиск по базе организован так
В переключателе выбираю где искать, в форме обработки switch-чем выбираю запросы.
А как реализовать поиск без переключателя, типа ввел слово в форму а в обработчике происходит поиск по всем нужным таблицам. Запхнуть запросы в цикл или как? Структура запросов разная.

   
 
 автор: valenok   (24.06.2006 в 09:48)   письмо автору
 
   для: куч1963   (24.06.2006 в 09:00)
 

Вам поможет оператор LIKE

articles.id_article = LIKE paragraphes.id_article

   
 
 автор: куч1963   (24.06.2006 в 11:21)   письмо автору
 
   для: valenok   (24.06.2006 в 09:48)
 

С запросом все нормально, немного шалит вывод участка текста, где найдено вхождение
делаю так

<?= strtok (stristr($posts['text'], $_POST['name']),'.');?>

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

но меня больше интересует одновременный запрос на несколько таблиц

делаю

$query = " select articles.id_article AS id_article,
                        articles.name AS name,
                     paragraphes.name AS text,
                        paragraphes.id_article
    from articles, paragraphes
WHERE articles.id_article = paragraphes.id_article AND  MATCH(paragraphes.name) AGAINST('$_POST[name]*' IN BOOLEAN MODE)
GROUP BY articles.id_article
   UNION SELECT p_id AS id, name AS links_name  FROM links WHERE MATCH(name) AGAINST('$_POST[name]*' IN BOOLEAN MODE)
GROUP BY name"; 
$post = mysql_query($query);
//Проверяю
$num = mysql_num_rows($post);
echo $num;
//Результат пустое окно

По отдельности два селекта работают.
И еще прицепом идет проблема,
результат надо разбить на части, равные колличеству селектовБ чтобы было так:
найдено в раделе 1: найдено в разделе 2:
Я мыслю это сделать так

 while($posts = mysql_fetch_array($post))
            {
      if(!empty($posts['id_article']))
             {
             echo " <a href=../article/index.php?id_article=".$posts['id_article'].">".$posts['name']."</a><br>";
         }    
     else
           {
           echo " в разделе 1 ничего не найдено";
            }
   // if(!empty($posts['id']))...
}    

Только в таком виде разнобой

   
 
 автор: куч1963   (24.06.2006 в 16:54)   письмо автору
 
   для: куч1963   (24.06.2006 в 11:21)
 

Не идет запрос

$query = " select articles.id_article AS id_article,
                        articles.name AS name,
                     paragraphes.name AS text,
                        paragraphes.id_article
    from articles, paragraphes
WHERE articles.id_article = paragraphes.id_article AND  MATCH(paragraphes.name) AGAINST('$_POST[name]*' IN BOOLEAN MODE)
GROUP BY articles.id_article
   UNION SELECT p_id AS id, name AS links_name  FROM links WHERE MATCH(name) AGAINST('$_POST[name]*' IN BOOLEAN MODE)
GROUP BY name"; 

Кто может помогите разобраться в чем дело!

   
 
 автор: cheops   (24.06.2006 в 16:56)   письмо автору
 
   для: куч1963   (24.06.2006 в 16:54)
 

В чём выражается "не идёт" - выводит ошибку или не возвращает записи?

   
 
 автор: куч1963   (24.06.2006 в 16:57)   письмо автору
 
   для: cheops   (24.06.2006 в 16:56)
 

не возвращает записи
По отдельности работают, а после объединения вывода данных нет

   
Rambler's Top100
вверх

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