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

Форум MySQL

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

 

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

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

тема: поиск в таблице и вывод найденных данных в таблицу
 
 автор: dina   (30.01.2006 в 10:50)   письмо автору
 
 

Есть форма поиска, где можно выбрать в какой таблице искать(name_cat или org) по полю name.
Как организовать поиск по нескольким словам в этих таблицах и вывести найденные данные в таблицу.

<form action="searchform.php" method="post">
<table width="422" border="1" cellspacing="0" frame="box" rules="none">
  <tr>
    <td width="360" height="47"><div align="center">
        <input type="text" name="q" size="60"  maxlength="200" value="" >
        <input   type="radio" name="cat" value="name_cat" checked>
        <font size="-1">ТОВ(АР</font>
        <input type="radio" name="cat" value="org">
      <font size="-1">ПРЕДПРИЯТИЕ</font>    </div></td>
    <td width="52" valign="top"><input name="submit" type="submit" value="Поиск"></td>
  </tr>
</table>
</form>

   
 
 автор: dina   (30.01.2006 в 11:28)   письмо автору
 
   для: dina   (30.01.2006 в 10:50)
 

нашла хорошую ссылку http://www.softtime.ru/forum/read.php?id_forum=3&id_theme=7831&page=1.

написала поиск так

<?php


   $q
=explode(" "$q); //полученную подстроку из текстового поля делим на слова и запихиваем в массив 

     
$query="SELECT * FROM 'name_cat' WHERE MATCH(name) AGAINST ('$q[0]*' IN BOOLEAN MODE)"//создаём запрос в который прописываем где ищем и заносим первое слово из массива (см выше) 

     
for ($i=0$i<count($q); $i++) //если несколько слов, то запускаем цикл на создание полной строки запроса 
      

        
$query.=" AND MATCH(ПОЛЕ ТАБЛИЦЫ) AGAINST ('$q[$i]*' IN BOOLEAN MODE)"// добавляем последующие слова к первому 
       


      
$result=mysql_query($query); // выполняем созданный нами запрос 

      
$num=mysql_num_rows($result)
      if (
$num>0)
          {
            while(
$art=mysql_fetch_array($result))
          {
             echo 
"<a href=index.php>".$art['name']."</a><br>";
          }
         }

?>

Но выводит ошибку, подскажите что это значит
Warning: mysql_query(): Access denied for user: 'root'@'localhost' (Using password: YES) in ..... on line 38

Warning: mysql_query(): A link to the server could not be established ..... on line 38

   
 
 автор: elenaki   (30.01.2006 в 11:40)   письмо автору
 
   для: dina   (30.01.2006 в 11:28)
 

у вас ошибка подключения к базе

   
 
 автор: dina   (30.01.2006 в 12:47)   письмо автору
 
   для: elenaki   (30.01.2006 в 11:40)
 

так и не могу подключится к базе.
есть файл congig.php

<?php
 

  $dhost 
"localhost";
  
$dname "........";
  
$duser ".........";
  
$dpass ".......";

 
$pnumber 10;
  
$sendmail false;
  
$dbcnx = @mysql_connect($dhost,$duser,$dpass);
 if (!
$dbcnx)
  {
    echo( 
"<P>? ??·?···? ??? ?? ??? ? ????, ·??· ·???? ?????·???? ?????.</P>" );
    exit();
  }

  if (! @
mysql_select_db($dname,$dbcnx) )
  {
    echo( 
"<P>? ??·?···? ?? ??? ? ????, ·??· ·???? ?????·???? ?????.</P>" );
    exit();
  }
 
  function 
puterror($message)
  {
    echo(
"<p>$message</p>");
    exit();
  }
?>



index.php


<?
 
require_once("config.php");?>

<?
$aDBLink 
mysql_connect$dhost$duser$dpass );
mysql_select_db($dname) or die("Could not select database");
if(@!
$_GET['id']) include("main.php");
    else include(
"categ.php");
mysql_close($aDBLink);
?>

main.php, где берется файл с формой поиска [code]


<? include("searchform2.php");?>
.....
[/code]

   
 
 автор: dina   (30.01.2006 в 12:49)   письмо автору
 
   для: dina   (30.01.2006 в 12:47)
 

main.php, где берется файл с формой поиска

<? include("searchform2.php");?>

   
 
 автор: elenaki   (30.01.2006 в 11:39)   письмо автору
 
   для: dina   (30.01.2006 в 10:50)
 

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


<? mysql_query("DROP TABLE vrem"); // очищаем временную таблицу

$q trim($q);//обрезаем пробелы
$qu2 strtolower($q);//убираем заглавные буквы
$qu2 chop($qu2);//убираем пробелы
$qu2eregi_replace ('[.?,!()#":;|]'''$qu2); //убираем лишние символы
while (stristr($qu2"  ")) $qu2 str_replace("  "" "$qu2);//убираем двойные пробелы


// создаем временную таблицу (тип HEAP) - тут ваши данные, у меня были заголовки и даты
   
mysql_query("CREATE TABLE vrem ( 
  'id' varchar(12) NOT NULL default '',
  'datestamp' varchar(12) NOT NULL default '',
  'number' varchar(100) NOT NULL default '',
  'categ' varchar(10) NOT NULL default '',
  'headline' varchar(250) NOT NULL default ''
   ) TYPE=HEAP;"
) or die (mysql_error());

//разбиваем запрос на слова
    
$q explode(' '$qu2);
        
$query1 =  " SELECT * FROM ".$prefix."_items ";//основной запрос, к которому потом будем добавлять условия (у меня несколько было)
        
for ($q=0$q<count($q); $q++): // начало цикла перебора слов запроса
    
    
if ($cond == "lexi") {$poisk $q[$q];} // если надо искать слово    
                     
if ($cond == "phrase") {$poisk $qu2;}    // если надо искать фразу целиком
    
            
if (strlen($poisk)>3): // если найдено слово и оно больше трех знаков, делаем запрос
            
$query1 "SELECT * FROM ".$prefix."_items where 
            date like '%
$poisk%' or 
            number = '
$poisk' or 
            headline like '%
$poisk%' or
            keywords like '%
$poisk%' or
            text like '%
$poisk%'";
            endif; 
// конец проверки на длину слова            
$result1 MYSQL_QUERY($query1); // делаем запрос
$number1=mysql_numrows($result1);
    if (
$number1 == 0// не нашли слово    
                     
{print "<TR><TD class=t background=\"images/bg_big.gif\"><b>";
    echo 
$poisk." Nothing</td></tr>";
    }
    else 
// нашли слово
    
{for ($i=0$i $number1$i++)
         {
         
$id mysql_result($result1,$i,"id");
         
$art_number mysql_result($result1,$i,"number");
         
$headline mysql_result($result1,$i,"headline");
         
$categ mysql_result($result1,$i,"categ");
         
$date mysql_result($result1,$i,"date");
         
$datestamp date_to_datestamp($date);
         
$headline stripslashes($headline);
// заносим во временную таблицу
$query2 =   "insert into vrem (id, datestamp, number, headline, categ) values ('$id', '$datestamp', '$art_number','$headline', '$categ')"
$result2 mysql_query($query2);
           }
    }            
endfor;
// конец цикла перебора слов запроса

// выборка из временной таблицы

$query3 =  "SELECT DISTINCT id,number,datestamp,headline FROM vrem ";
    
//уточняем запрос по другим условиям - вам это не нужно
    /*if ($category !== "") $poteme = " categ = $category ";// poisk i po teme
    else {$poteme = "";}// ne nado po teme
    
    if ($apo != -1) // data nachala ne vibrana
    {$podate = " (datestamp > $apo AND datestamp < $mexri) ";}
    else $podate = ""; // ne nado po date
    
    if ($poteme !== "" || $podate !== "") $usl1 = " where ";
    if ($poteme !== "" && $podate !== "") $usl2 = " AND ";
    $query3 .= $usl1.$poteme.$usl2.$podate." order by datestamp DESC"; // polniy zapros
    //echo $query3;
                      */ 

        
$result3 MYSQL_QUERY($query3);
        
$number3=mysql_numrows($result3);
        
        if (
$number3 == 0// не нашли слово
        
{print "<TR><TD class=t background=\"images/bg_big.gif\"><b>";
        echo 
$poisk." Nothing</td></tr>";
        }
        else 
// нашли слово        
                                          
{
        for (
$i=0$i $number3$i++)
        {
        
$id mysql_result($result3,$i,"id");
        
$art_number mysql_result($result3,$i,"number");
        
$headline mysql_result($result3,$i,"headline");
        
$date mysql_result($result3,$i,"datestamp");
        
$datestamp date_to_datestamp($date);
        
$headline stripslashes($headline);

        
// вывод в таблицу - это просто (когда знаешь ее струкруру)
        
echo"<TR><TD class=t background=\"images/bg_big.gif\"><p align=justify><b>".
        
strftime("%d/%m/%Y"$date)." - <a href=\"viewnews.php?article=$id\" target=_self>N: $art_number - $headline</a></b></p></td></tr>";
        }
    }
?>

   
 
 автор: dina   (30.01.2006 в 13:39)   письмо автору
 
   для: elenaki   (30.01.2006 в 11:39)
 

Подставила свои данные , но выдает ошибку в строке 34 и 71

$number1= mysql_num_rows($result1); 



 $number3= mysql_num_rows($result3);

Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in ...on line 34
Nothing
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in ....on line 71
Nothing

Еще хотела спросить в строке

$query1 =  " SELECT * FROM ".$prefix."_items ";


".$prefix."_items " что означает, откуда берется?

   
 
 автор: elenaki   (30.01.2006 в 14:00)   письмо автору
 
   для: dina   (30.01.2006 в 13:39)
 

у меня тоже num_rows часто выдавал подобные ошибки, поэтому я теперь вообще от него
отказалась и все разборы результатов запросов делаю через mysql_fetch_array().

в моем варианте $prefix - это две буквы перед именем таблицы (чтобы не путать с другими).
я не сразу увидела, что вам нужен поиск ИЗ РАЗНЫХ таблиц. у меня все ищется в одной. но
можно организовать и во многих. помню, я это делала, но не могу найти, где :)

   
 
 автор: dina   (30.01.2006 в 14:51)   письмо автору
 
   для: elenaki   (30.01.2006 в 14:00)
 

Если найдете пришлите пожауйста

   
 
 автор: elenaki   (30.01.2006 в 16:04)   письмо автору
 
   для: dina   (30.01.2006 в 14:51)
 

вот нашла. сначала ищем в одной таблице, потом во второй, результаты заносим во
временную таблицу, потом из нее выбираем уникальные значения с помощью DISTINCT

   
 
 автор: dina   (30.01.2006 в 17:55)   письмо автору
 
   для: elenaki   (30.01.2006 в 16:04)
 

Большое спасибо. Попробую к себе применить.

   
Rambler's Top100
вверх

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