PDA

View Full Version : سوال: سوال در مورد چگونگی جستجوی همزمان چند شماره



reza1988
یک شنبه 13 بهمن 1387, 16:56 عصر
با سلام
من یک جدول دارم با یک ستون به نام مثلا serialnaumber ، که در اون یه سری شماره فایل ذخیره می کنم .
حال یک کادر textbox دارم ، که می خوام شماره فایل ها را در آن تایپ و سرچ کنم تا اون سطرهایی که شماره فایلشون تایپ شده ، یافت شوند .
اگه فقط بخوام یه دونه شماره فایل در اون تایپ و فقط یک سطر را سرچ کنم ، مشکلی ندارم . ولی من می خوام چند شماره فایل را همزمان در کادر متنی تایپ و هر چند تا سطر با هم یافت شوند . حالا باید چی کار کنم ؟ :متفکر:
من تازه کارم و اگه یه وقت سوالم برای شما دوستان خیلی آسون و مسخره است منو به بزرگی خودتون ببخشید. :خجالت:

با تشکر :لبخندساده:

I,Nobody
یک شنبه 13 بهمن 1387, 18:16 عصر
کوئری سرچ خودتو بگذار تا تصحیحش کنیم.
فقط کافیه مقادیر مورد سرچ رو با , از هم جدا کنید. ولی نمی دونم روشتون چیه؟ از LIKE استفاده میکنید، از Match AGAINST استفاده می کنید؟ یا ...
به هر حال ممکنه نیاز به تغییرات بیشتری همداشته باشه

sama01
یک شنبه 13 بهمن 1387, 19:40 عصر
اول شما باید به یک شکلی، شماره‌ها را از هم جدا کنید و مثلا در یک آرایه بریزید. بعد در query بگید رکورد هایی را انتخاب کند که شماره‌ی آن‌ها مساوی با مقادیر وارد شده باشد. یعنی به تعداد اعداد (که همان تعداد آیتم‌های آرایه مورد نظر است) باید شرط تساوی بگذارید و بین آن‌ها از (یا - or) استفاده کنید.

من مشکلی نمی‌بینم.
اگر مسئله‌ی خاصی وجود دارد بیان کنید تا بررسی شود.

reza1988
یک شنبه 13 بهمن 1387, 22:03 عصر
ضمن تشکر
I,Nobody ، ضمن تشکر از پاسخ شما ، حقیقتش همان طور که گفتم من تا به حال فقط در لیست باکس یک شماره سرال می نوشتم و سرچ می کردم ، ونتیجه هم می داد . و از like و امثالهم استفاده نمی کردم ، چون نیازی نبود . چرا که من می خواستم که شماره سریال تایپ شده که قبلا فقط یکی بود ، عیننا با شماره سریالی که در یک فیلد در بانک اطلاعاتی بود مطابقت داشته باشد ، و نمی خواستم با بخشی از کاراکترهای رشته ای که در یک فیلد از بانک ذخیره شده بود مطابقت داشته باشد . (فکر نمی کنم به like نیاز باشد ، چون من که نمی خوام یک کلمه را از بین یک سری جمله در فیلد موجو در بانک اطلاعاتی پیدا کنم .)
لذا همچین کدی مانند زیر را به کار می برم که خیلی ساده و ابتدایی بود .


$serialnumber=$_GET['serialnumber'];

$select2=mysql_query("select *
from table
where serialnumber='$serialnumber' order by date DESC");


خوب حال که می خوام چند تا شماره را همزمان با هم در یک جعبه متنی نوشته و بر اساس آن ها سرچ کنم . نمی دونم چه کنم .آیا به like نیاز دارم . :متفکر:
این یه توضیح در مورد بانک و فیلد مورد نظر :
این شماره سریال ها در فیلد serialnumber ذخیره می شوند و مقدار آن ها در هیچ دو سطری یکسان نیست، این شماره سریال ها در واقع یک سری شماره برای فایل های اطلاعاتی مختلف هستند ، که اصلا به این دلیل به وجود آمدند که با کمک آن ها بتوان به فایل مورد نظر دسترسی یافت .



sama01 ضمن تشکر از پاسخ شما ، خودم می دونم باید به شکلی شماره ها جدا بشه ، ولی اگه می دونستم که چه شکلی این کار را باید کرد اصلا سوال نمی پرسیدم. لذا خواهشمندم کاملتر توضیح بدید .


من مشکلی نمی‌بینم.

ضمن تشکر از شما ، شما مشکلی نمی بینید چون که از تیر1386 عضو این سایت هستید و از آن موقع در برنامه نویسی وب فعالیت داشتید ، و حتما قبل از آن تاریخ نیز در زمینه برنامه نویسی فعالیت داشتید ، لذا از تجربه زیادی در برنامه نویسی وب برخورداردید . ولی من تازه کارم .



با تشکر
موفق و پیروز باشید .

sama01
یک شنبه 13 بهمن 1387, 22:39 عصر
از این دستور استفاده کنید:


array split ( string $pattern, string $string [, int $limit] )

مثلا فرض کنید شما بین اعدادی که وارد می‌کنید، یک کاما وارد می‌کنید. با دستور زیر، رشته‌ی وارد شده، بر اساس کاراکتر کاما از هم جدا شده و به صورت آرایه ذخیره می‌شوند.


$serials = split(',' , $serial_textbox);

البته به‌تر از برای رشته‌ی pattern از regular expression استفاده شود.
دیگه بقیه‌اش کاری نداره. اگر مشکلی بود بفرمایید.

reza1988
دوشنبه 14 بهمن 1387, 00:35 صبح
واقعا از شما ممنونم .
واقعا شرمنده ام ولی اگه بازم جوابم را بدید ، ممنون می شم .
من با توجه به پاسخ شما همچین کدی نوشتم ولی کار نکرد ، و دیگه حتی اگه در فرم یه دونه شماره سریال هم می نوشتم چیزی برنمی گردوند .



$serialnumber=$_GET['serialnumber'];
$serialnumber= split(',' , $serialnumber);
$select=mysql_query("select *
from mortgage_rent
where serialnumber='$serialnumber' order by date DESC");

sama01
دوشنبه 14 بهمن 1387, 00:52 صبح
نشد.
ببینید. serialnumber خط اول یک متغیر رشته‌ای است. ولی این متغیر در خط دوم تبدیل به آرایه شده است.
کاری که شما باید بکنید این است که حالا به تعداد اعضای این آرایه که با دستور count قابل دسترسی است، شرط به query‌ اضافه کنید. مثل این:


$str_serialnumber=$_GET['serialnumber'];
$arr_serialnumber= split(',' , $serialnumber);
if ($count=count($arr_serialnumber)) {
$query = "SELECT * FROM mortgage_rent WHERE serialnumber=" . $arr_serialnumber[0];
if ($count>1){
for($i=1;$i<=$count;$i++){
$query .= " " . "OR serialnumber=" . $arr_serialnumber[$i];
}
}
$query .= " " . "ORDER BY date DESC");
}
$select=mysql_query($query);
البته حول حولکی نوشتم. شاید اشکالات تایپی داشته باشه. ولی منطق همینه.

reza1988
دوشنبه 14 بهمن 1387, 02:31 صبح
واقعا متشکرم . واقعا ممنونم .:تشویق: .
ولی با عرض شرمندگی کدی که شما لطف کردید و به من ارائه دادید را اجرا کردم ولی error می گرفت . و در error آمده بود که آرگومنت داده شده به تابع mysql_fetch__array ، یک آرگومنت valid نیست . البته غلط های تایپی کد شما را به صورت زیر اصلاح کردم و ایراد از آن ها نیست .


$str_serialnumber=$_GET['serialnumber'];
$arr_serialnumber= split(',' , $str_serialnumber);
if ($count=count($arr_serialnumber)) {
$query = "SELECT * FROM mortgage_rent WHERE serialnumber=" . $arr_serialnumber[0];
if ($count>1){
for($i=1;$i<=$count;$i++){
$query .= " "." OR serialnumber=" . $arr_serialnumber[$i];
}
}
$query .= " " . "order by date DESC";
}
$select=mysql_query($query)


اگه در قسمت زیر از کد بالا


$query .= " "." OR serialnumber=" . $arr_serialnumber[$i];

به جای $i شماره عنصر را تایپ کنیم ، جواب ارائه می شود ، ولی خوب این کار را نباید کرد، میشه لطف کنید و بگید ایراد کد کجاست .


بازم از شما به خاطر پاسخ هایتان نهایت تشکر و سپاس را دارم.

sama01
دوشنبه 14 بهمن 1387, 04:44 صبح
این خط را تغییر دهید:


for($i=1;$i<=$count;$i++)
replace with:
for($i=1;$i<$count;$i++)

اگر مشکل حل نشد که به جای خط آخر، query را echo کنید و بفرستید ببینم چی درست شده.

reza1988
دوشنبه 14 بهمن 1387, 13:13 عصر
با تشکر و سپاس فراوان :تشویق:
واقعا ممنونم ، مشکل کاملا حل شد .
فقط برای اینکه بتونم شماره فایل هایی که از نوع رشته هستند نیز بازیابی بشوند یه تغییر خیلی خیلی خیلی جزئی دادم .


$str_serialnumber=$_GET['serialnumber'];
$arr_serialnumber= split(',' , $str_serialnumber);
if ($count=count($arr_serialnumber)) {
$query = "SELECT * FROM mortgage_rent WHERE serialnumber='$arr_serialnumber[0]'";
if ($count>1){
for($i=1;$i<$count;$i++){
$query .= " "." OR serialnumber='$arr_serialnumber[$i]'";
}
}
$query .= " " . "order by date DESC";
}
$select=mysql_query($query);


ممنون خیلی خیلی ممنون خیلی کمکم کردید . :تشویق:
موفق باشید .