|
|
|
| Есть форма поиска, где можно выбрать в какой таблице искать(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 в 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 | |
|
|
|
|
|
|
|
для: dina
(30.01.2006 в 11:28)
| | у вас ошибка подключения к базе | |
|
|
|
|
|
|
|
для: 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:47)
| | main.php, где берется файл с формой поиска
<? include("searchform2.php");?>
|
| |
|
|
|
|
|
|
|
для: dina
(30.01.2006 в 10:50)
| | я делала вот так, с использованием временной таблицы для того, чтобы хранить
промежуточные результаты поиска
<? mysql_query("DROP TABLE vrem"); // очищаем временную таблицу
$q = trim($q);//обрезаем пробелы
$qu2 = strtolower($q);//убираем заглавные буквы
$qu2 = chop($qu2);//убираем пробелы
$qu2= eregi_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>";
}
}
?>
|
| |
|
|
|
|
|
|
|
для: 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 " что означает, откуда берется? | |
|
|
|
|
|
|
|
для: dina
(30.01.2006 в 13:39)
| | у меня тоже num_rows часто выдавал подобные ошибки, поэтому я теперь вообще от него
отказалась и все разборы результатов запросов делаю через mysql_fetch_array().
в моем варианте $prefix - это две буквы перед именем таблицы (чтобы не путать с другими).
я не сразу увидела, что вам нужен поиск ИЗ РАЗНЫХ таблиц. у меня все ищется в одной. но
можно организовать и во многих. помню, я это делала, но не могу найти, где :) | |
|
|
|
|
|
|
|
для: elenaki
(30.01.2006 в 14:00)
| | Если найдете пришлите пожауйста | |
|
|
|
|
|
|
|
для: dina
(30.01.2006 в 14:51)
| | вот нашла. сначала ищем в одной таблице, потом во второй, результаты заносим во
временную таблицу, потом из нее выбираем уникальные значения с помощью DISTINCT | |
|
|
|
|
|
|
|
для: elenaki
(30.01.2006 в 16:04)
| | Большое спасибо. Попробую к себе применить. | |
|
|
|