PDA

View Full Version : پیاده سازی جستجو در سایت



manager_66
شنبه 10 دی 1390, 12:47 عصر
سلام. من میخوام تو سایتم یک سیستم جستجو بشکل 79938 قرار بدم . حالا میخواستم راهنماییم کنید که دقیقا چکاری انجام بدم بهینه تره . یعنی بیام کلی شرط بذارم بگم اگه قیمت وارد شده فلان کار رو بکن اگه وارد نشده فلان کار اگه گروه اصلی همه بود فلان کار رو بکن وگرنه فلان کار . این روش بنظرم زیاد جالب نیست . کسی از دوستان راه بهتری داره ؟ :قلب:

چون گروه اصلی و گروه فرعی و نام همیشه مقداری دارند و میشه در query این ها رو and کرد امه دو فیلد قیمت از و تا میشه بدون مقدار باشن . اگه اون ها رو هم در کوئری بالایی and کنم ممکنه یک نفر قیمت وارد نکنه بعد جواب نمیده . !؟

manager_66
شنبه 10 دی 1390, 23:50 عصر
کسی نمیتونه راهنمایی کنه ؟ اگه متوجه منظورم نمیشید بگین دوباره توضیح بدم . یک خورده عجله دارم دوستان . :قلب:

ravand
یک شنبه 11 دی 1390, 10:16 صبح
من اين كد رو قبلا براي جستجو در بانك اطلاعاتيم استفاده كردم ولي يادم نيست چيكار كردم ببين شايد بدردت خورد:

<?php
$id=$tfname=$tffamily=$tfmelli="";
if ( isset($_REQUEST["tfname"]) ) {
$id=$_REQUEST["id"];
$tfname=$_REQUEST["tfname"];
$tffamily=$_REQUEST["tffamily"];
$tfmelli=$_REQUEST["tfmelli"];
}
?>

<form dir=rtl action=<?php echo($_SERVER["PHP_SELF"]) ?> method=post>
<table height="130" width="250" BGCOLOR="#45CCE9" border="1">
<tr>
<td colspan="2">
<table height="30" width="100%" border="0">
<tr align="center"><td>جستجو در ثبت نام كنندگان</td></tr>
</table>
</td>
</tr>
<tr><td>ID : </td><td><input type=text name=id value=<?php echo($id) ?> ></td></tr><br>
<tr><td>نام: </td><td><input type=text name=tfname value=<?php echo($tfname) ?> ></td></tr><br>
<tr><td>نام خانوادگی: </td><td><input type=text name=tffamily value=<?php echo($tffamily) ?> ></td></tr><br>
<tr><td>کد ملی: </td><td><input type=text name=tfmelli value=<?php echo($tfmelli) ?> ></td></tr><br>

<tr><td></td><td><input type=submit value="جستجو در مشخصات"></td></tr>
</table>

</form>

<?php
if (isset($_REQUEST["tfname"] ) ) {
$db = mysql_connect( 'localhost' , 'root' , '' );
mysql_select_db( 'fani' , $db);
$sqlstring ="select * from form";
if ($id != "" or $tfname != "" or $tffamily != "")
$sqlstring .=" where ";
if ($id != "")
$sqlstring .=" id='$id' or";
if ($tfname != "")
$sqlstring .=" tfname like '%$tfname%' or";
if ($tffamily != "")
$sqlstring .=" tffamily like '%$tffamily%' or";

if ($sqlstring[strlen($sqlstring)-1]=='r' ) {
$sqlstring[strlen($sqlstring)-1]=" ";
$sqlstring[strlen($sqlstring)-2]=" ";

}
mysql_query("SET CHARACTER SET utf8");
$result = mysql_query($sqlstring ,$db);
if ( !$result) {
die( 'Could not query:' . mysql_error( ) );
}
if ( !$row = mysql_fetch_row($result) )
die( '.هيچ ثبت نام كننده اي وجود ندارد');
do {
echo "<table border='2'>";
echo "<tr>";

echo("<td ALIGN=CENTER VALIGN=MIDDLE BGCOLOR=#C997F3>". $row[0] ."</td>"."<td ALIGN=CENTER VALIGN=MIDDLE BGCOLOR=#95A1EC>".":ID" ."</td>"."<br>\n" );
echo "</tr>";
echo "<tr>";
echo("<td ALIGN=CENTER VALIGN=MIDDLE BGCOLOR=#C997F3>"." <a href='" . $row[1] . "'>" . عکس . "</a></td><br>\n" );
echo "<td ALIGN=CENTER VALIGN=MIDDLE BGCOLOR=#95A1EC>";
echo ":تصوير ";
echo "</td>";
echo "</tr>";
echo "<tr>";
echo("<td ALIGN=CENTER VALIGN=MIDDLE BGCOLOR=#C997F3>" . $row[2] . "</td>"."<td ALIGN=CENTER VALIGN=MIDDLE BGCOLOR=#95A1EC>"." :نام "."</td>"."<br>\n" );
echo "</tr>";
echo "<tr>";
echo("<td ALIGN=CENTER VALIGN=MIDDLE BGCOLOR=#C997F3>" .$row[3] . "</td>"."<td ALIGN=CENTER VALIGN=MIDDLE BGCOLOR=#95A1EC>"." :نام خانوادگی "."</td>"."<br>\n" );
echo "</tr>";
echo "<tr>";
echo("<td ALIGN=CENTER VALIGN=MIDDLE BGCOLOR=#C997F3>".$row[4]. "</td>"."<td ALIGN=CENTER VALIGN=MIDDLE BGCOLOR=#95A1EC>" .": جنسیت " ."</td>"."<br>\n" );
echo "</tr>";
echo "<tr>";
echo("<td ALIGN=CENTER VALIGN=MIDDLE BGCOLOR=#C997F3>"."<a href=\"delete/delete.php?ID=".$row['0']."\">حذف</a></td><td ALIGN=CENTER VALIGN=MIDDLE BGCOLOR=#95A1EC> &nbsp;
<a target=_blank href=\"edit.php?ID=".$row['0']."\">ادامه</a></td><br>");
echo "</tr>";
echo "</table>";
}
while ( $row=mysql_fetch_row($result) );
}
?>

M.Rahi
یک شنبه 11 دی 1390, 11:05 صبح
سلام
خیلی ساده میتونی تمام مقادیر را در query قرار بدی و نتیجه رو برگردونی. اگر میخوای مقدار خالی وارد نشه، میتونی با جاوااسکریپت فیلد قیمتها رو چک کنی.
دستور sql مشابه زیر میشه:


Select * From mahsoulat where asli=$asli and fari=$fari and name like '%$name%' and price between p1 and p2


موفق باشی

manager_66
یک شنبه 11 دی 1390, 17:34 عصر
سلام
خیلی ساده میتونی تمام مقادیر را در query قرار بدی و نتیجه رو برگردونی. اگر میخوای مقدار خالی وارد نشه، میتونی با جاوااسکریپت فیلد قیمتها رو چک کنی.
دستور sql مشابه زیر میشه:


Select * From mahsoulat where asli=$asli and fari=$fari and name like '%$name%' and price between p1 and p2

موفق باشی
ممنون . ولی من میخوام فیلد قیمتها خالی هم بتونه باشه . یعنی هم بتونه مقدار بگیره و هم نگیره . این رو باید چجوری پیاده سازی کنم ؟!

irGeek
یک شنبه 11 دی 1390, 17:47 عصر
یک روش اینکه در ان واحد دوتا query داشته باشین بعد با توجه به مقادیری که کاربر وارد میکنه انتخاب کنید که از کدوم استفاده کنید.

manager_66
یک شنبه 11 دی 1390, 19:54 عصر
با این حساب من یک همچین الگوریتمی به ذهنم میرسه . ببینید درسته یا خیر (متشکرم)؟



$asli = $_post["asli"];
$faree = $_post["faree"];
$name = $_post["name"];
$az = $_post["az"];
$ta = $_POST["ta];
if(!empty($name))
select * from mahsool where name=$name and asli = $asli and faree=$faree
else if (!empty(az) and (!empty(ta) and (!empty(name))) )
select * from mahsool where name=name and price between az and ta and asli =$asli and faree = $faree


حالا اگه دسته اصلی یا فرعی روی همه باشه چی؟ چطور باید بگم محصولات همه گروهها رو بگرد . باید از سوییچ استفاده کنم یا باز چند تا if دیگه . متشکرم :قلب:

manager_66
دوشنبه 12 دی 1390, 13:36 عصر
ممنون میشم اگه یک راهنمایی کنید ...:لبخندساده:

M.Rahi
دوشنبه 12 دی 1390, 15:57 عصر
واسه سرچ هایی که تعداد آپشن ها زیاده، باید یک فیلد را در اول دستور sql با مقدار قرار بدی (یعنی باید حتما مقدار داشته باشه)
بعد برای فیلدهای دیگه کافیه چک کنی که اگه مقدارش خالی نبود، مثلا متغیر x مساوی با ( And field=value) بشه.
حالا کافیه توی دستور sql ، بعد از where ، شرط اول که باید مقدار داشته باشه رو چک کنی و برای شرایط بعدی تنها نام متغیرها را بنویسی.
اینجوری اولین شرط برقرار میشه و برای شرطهای بعدی اگر مقدار داشته باشه دستور And field=value قرار میگیره و اگر مقدار نداشته باشه، مقدار خالی در دستور sql قرار میگیره و انگار هیچ شرطی قید نکردید!
موفق باشی