PDA

View Full Version : نمایش نتایج در قسمت جستجو



parandweb
سه شنبه 22 دی 1394, 12:55 عصر
سلام در سایت من اطلاعات به صورت زیر در جدول ذخیره شده است:


راز خوشبختی من خفته در قلب من است
تو کجا میگردی قلب من این وطن است
خاک مادرزادی ، خانه ی اجدادی
این وطن ارثیه ی پشت در پشت من است
<div class="t">
هیچ ابرقدرتکی ، مرد تسخیرش نیست
زن اگر تهمینه ، مرد اگر تهمتن است ..
گریه ها کرده وطن ، تاب آورده وطن
مام پر درد وطن ، مادری شیرزن است
قلب من ! خانه ی من ، خانه ی زخم به تن
خسته ام از جانی که گرفتار تن است
من به مرگ آگاهم ، مرگ را میخواهم
هم وطن ها راهم ، دشمن آتش زدن است.
</div>



حالا من نیاز دارم کوئری بنویسم تا فقط بین تک <div class="t"> و </div> را جستجو کند و عباراتی که داخل این تگ دیو نیست جستجو نشود کوئری زیر را نوشتم اما جواب نمیده


$s = "کلمه جستجو شده";
$n = '<div';
$m = "</div>";
$query="SELECT * FROM te WHERE $v like '%".$n."%".clean($s)."%".$m."' OR id = '".clean($s)."' ORDER BY id DESC LIMIT $start, ".$setting['paged_item']."";

لطفا راهنمایی کنید

parandweb
سه شنبه 22 دی 1394, 13:01 عصر
البته توجه داشته باشید ممکنه بعد از </div> نیز عباراتی در جدول وجود داشته باشه که بنده نیازی ندارم در آنها هم جستجو شود

Unique
سه شنبه 22 دی 1394, 13:41 عصر
راستش درخواست شما راهکار سر راستی نداره :

۱ - اگه تعداد رکورد ها خیلی زیاد نیست میتونی یک select بگیری و با php مقادیر را توی while بکشی بیرون و جستجو را انجام بدی !
۲ - اگه رکورد ها زیاده و میخوای MySQL کار را برات انجام بده باید با استفاده از توابع رشته ای mysql (http://dev.mysql.com/doc/refman/5.7/en/string-functions.html) مثل locate (http://dev.mysql.com/doc/refman/5.7/en/string-functions.html#function_locate) و substring (http://dev.mysql.com/doc/refman/5.7/en/string-functions.html#function_substring) مقادیر توی تگ div را خارج کنی و جستجو کنی. اگه یکبار این تگ div باشه خیلی پیچیده نمیشه اما اگه چند بار باشه دردسرش زیاده
۳ - بیای از این تابع استفاده کنی و با regexp کار را خیلی رات تر انجام بدی.

شرمنده اصلا وقت ندارم بشینم کدش را بنویسم اما راه حل هایی که به ذهنم میرسه همینه.

parandweb
سه شنبه 22 دی 1394, 14:04 عصر
راستش درخواست شما راهکار سر راستی نداره :

۱ - اگه تعداد رکورد ها خیلی زیاد نیست میتونی یک select بگیری و با php مقادیر را توی while بکشی بیرون و جستجو را انجام بدی !
۲ - اگه رکورد ها زیاده و میخوای MySQL کار را برات انجام بده باید با استفاده از توابع رشته ای mysql (http://dev.mysql.com/doc/refman/5.7/en/string-functions.html) مثل locate (http://dev.mysql.com/doc/refman/5.7/en/string-functions.html#function_locate) و substring (http://dev.mysql.com/doc/refman/5.7/en/string-functions.html#function_substring) مقادیر توی تگ div را خارج کنی و جستجو کنی. اگه یکبار این تگ div باشه خیلی پیچیده نمیشه اما اگه چند بار باشه دردسرش زیاده
۳ - بیای از این تابع استفاده کنی و با regexp کار را خیلی رات تر انجام بدی.

شرمنده اصلا وقت ندارم بشینم کدش را بنویسم اما راه حل هایی که به ذهنم میرسه همینه.

ممنون از راهنماییتون

1 - تعداد رکوردها بیش از 50000 تا می باشد
2- فقط یک دونه دیو در متن وجود دارد
3- متاسفانه با تابعی که معرفی کردید آشنایی ندارم سعی می کنم سرچ کنم ببینم چیزی ازش می فهمم


به هر حال ممنونم ازتون امیدوارم بتونم حلش کنم چون خیل واسم مهمه

H:Shojaei
سه شنبه 22 دی 1394, 21:57 عصر
با locate این شکلی میشه:
SELECT * FROM `tuserNotif` WHERE text like "%من%" and locate('من',text)>locate('<div class="t">',text) and locate('من',text)<locate('</div>',text)


من با این دیتا تست کردم:
رکورد اول
راز خوشبختی خفته در قلب استتو کجا میگردی قلب این وطن است
خاک مادرزادی ، خانه ی اجدادی
این وطن ارثیه ی پشت در پشت است
<div class="t">
هیچ ابرقدرتکی ، مرد تسخیرش نیست
زن اگر تهمینه ، مرد اگر تهمتن است ..
گریه ها کرده وطن ، تاب آورده وطن
مام پر درد وطن ، مادری شیرزن است
قلب من ! خانه ی من ، خانه ی زخم به تن
خسته ام از جانی که گرفتار تن است
من به مرگ آگاهم ، مرگ را میخواهم
هم وطن ها راهم ، دشمن آتش زدن است.
</div>



رکورد دوم:
راز خوشبختی من خفته در قلب من استتو کجا میگردی قلب من این وطن است
خاک مادرزادی ، خانه ی اجدادی
این وطن ارثیه ی پشت در پشت من است
<div class="t">
هیچ ابرقدرتکی ، مرد تسخیرش نیست
زن اگر تهمینه ، مرد اگر تهمتن است ..
گریه ها کرده وطن ، تاب آورده وطن
مام پر درد وطن ، مادری شیرزن است
قلب من ! خانه ی من ، خانه ی زخم به تن
خسته ام از جانی که گرفتار تن است
من به مرگ آگاهم ، مرگ را میخواهم
هم وطن ها راهم ، دشمن آتش زدن است.
</div>




یه چیزی فهمیدم این که نتیجه کوئری که من نوشتم اینطوری میشه که اگر اولین من بین تگها باشه نتیجه برمیگرده!! اون یکی دیگه رو برنمیگردونه!