آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
مشکل عدم دسترسی خریداران پیشین به برخی آموزش ها برطرف شد
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

جستجو کردن کلمه در دیتابیس

mohsen-jj  10 سال پیش  10 سال پیش
+2 0

سلام هرچی سرچ کردم نتونستم از جستجو در دیتابیس خیلی سردربیارم ، چطور میتونم یک کلمه رو در یک متن طولانی موجود در دیتابیس جستجو کنم و همه متنهایی که شامل این کلمه هستن رو شناسایی کنم . در ضمن این کلمه هرکجای متن ممکنه باشه ( یعنی فقط اول متن ها نیست ) . لطفا روش جستجو در دیتابیس رو با کد بنویسید و ایده ی نمایش اون متنهای شامل کلمه رو هم بدید . خیییییلی ممنونم :)

0 0
من میخوام اگه مثلا 10 تا متن دارم و کلمه در 6 تای اونها وجود داره همه ی او 6 تا شناسایی بشه و مثلا به listView اضافه بشن . مرسی (10 سال پیش)
0 0
سرچ نمیخواد شما بخش 14 که مربوط به دیتابیس دوباره نگاه کن (10 سال پیش)
0 0
نگاه کردم ولی استاد توی این بخش فقط عدد سرچ میکنه بعلاوه اینکه من میخوام تمام متن هایی که شامل کلمه سرچ شده هستن رو شناسایی کنم که همچین کاری نکرده استاد (10 سال پیش)
0 0
لینک ی نگاه بنداز طریقه جستجو از بانک انلاینه ولی دستورات فرقی ندارن فکر کنم دستور اصلی یکیه.در باز شدن دیدتم کمک میکنه (10 سال پیش)
0 0
مرسی نگاه میکنم ببینم چیزی دستگیرم میشه یا نه (10 سال پیش)
 برای این سوال 5 پاسخ وجود دارد.
پاسخ به سوال 
MiRHaDi  10 سال پیش
+3 0

select * from table where textfield like '%searchtext%'
0 0
لینک (10 سال پیش)
0 0
دست گلت درد نکنه (10 سال پیش)
پاسخ به سوال 
SaM MP  10 سال پیش
+7 0

پروژه مارکت رو ببینی و یکم ابتکار به خرج بدی میتونی چستجو از بانک اطلاعات رو پیاده سازی کنی، بگذریم بریم سراغ آموزش :)

برای تفهیم آسانتر همون پروژه Notes ارتباط با دیتابیس استاد رو فرض کنید.

  • یک EditeText داریم که متن جستجو رو داخلش تایپ میکنیم، یه Button هم که بعد از کلیک  عمل جستوجو انجام بشه:
Button btnSearch = (Button) findViewById(R.id.btnSearch);
EditText edtSearch = (EditText) findViewById(R.id.edtSearch);
final String search = edtSearch.getText().toString();
btnSearch.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View view) {
   ArrayList<NameValuePair> params = new ArrayList<NameValuePair>();
   params.add(new BasicNameValuePair("search", search));
   Commands.read(params);
   }
});

متن رو میگیریم، توی یک آرایه (Params) واریز میکنیم، متود ()Read رو از کلاس Commands صدا میزنیم با ورودی آرایمون.


  • اینم کلاس Commands و متود ()Read داخلش:
 public class Commands {

 public static void read() {
     String result = Webservice.readUrl("http://192.168.1.2/server/service.php?action=read_search", params);
     if (result != null) {
         try {
             G.tasks.clear();
             JSONArray tasks = new JSONArray(result);
             for (int i = 0; i < tasks.length(); i++) {
                 JSONObject object = tasks.getJSONObject(i);
                 StructTask task = new StructTask();
                 task.id = object.getLong("task_id");
                 task.title = object.getString("task_title");
                 task.desc = object.getString("task_desc");
                 task.done = object.getInt("task_done") == 1 ? true : false;

                 G.tasks.add(task);
             }
         }
         catch (JSONException e) {
             e.printStackTrace();
         }
     }
  }
}
// action=read_search  (به این توجه کن (یه هماهنگسازیه با پی اچ پی 

خب طبق این متود هر چی از بانک خوانده بشه نتیجش توی G.tasks واریز میشه.


بریم سراغ کدهای php:

<?php
header('Content-Type: text/html; charset=utf-8');
if (isset($_REQUEST['action'])){
    $action = $_REQUEST['action'];
} else {
    echo "Invalid Data";
    exit;
}

if ($action=="read_search"){
    read_search();
}

function connectToDatabase(){
    $connection=mysqli_connect("localhost", "root", "", "database_name");
    mysqli_query($connection,"SET NAMES 'utf8'");
    mysqli_set_charset($connection,"UTF8");
    if (mysqli_connect_errno()) {
        echo "Failed to connect to MySQL: " . mysqli_connect_error();
    }
    return $connection;
}

function read_search(){
    $connection = connectToDatabase();
    $strSearch = $_REQUEST["search"];
    $result = mysqli_query($connection, "SELECT * FROM task WHERE task_title LIKE '%$strSearch%' OR task_desc LIKE '%$strSearch%' ORDER BY task_id DESC");

    $output = array();
    while($row = mysqli_fetch_array($result)) {
        $record = array();
        $record['task_id'] = $row['task_id'];
        $record['task_title'] = $row['task_title'];
        $record['task_desc'] = $row['task_desc'];
        $record['task_done'] = $row['task_done'];

        $output[] = $record;
    }
    echo json_encode($output);
    mysqli_close($connection);
}

اینم که قسمت کلیدیش فقط خط تعریف $result  که یکم دقت کنی میفهمی قضیش چیه ( اینجا روی  task_title و task_desc جستجو انجام میشه به همین صورت میتونی تعدادشو از اینجا که دوتاست بیشتر کنی)

از بیشتر نمیتونم مبحث رو باز کنم!   ارادت :)

0 0
خسته نباشید ولی کاش به متن سوال دقت میکردید،میخواد از دیتابیس جستجوه کنه نه از سرور! (10 سال پیش)
0 0
آقا دمت گرم مرسی :) (10 سال پیش)
0 0
عالی بود. (10 سال پیش)
پاسخ به سوال 
Seyed.Mahdi  10 سال پیش
+1 0

بايد كل كلمات متنتو ايندكس كني توي يه جدول يني اينكه مثلا كلمه "است" در عنوان "آموزش برنامه نويسي" وجود داره كه  اين عنوان خودش تو يه جدول ديگه داراي يك آي دي مي باشد حالا بايد كلمه "است" رو با اين آي دي در يك جدول ديگر درج كني و اينجوري ميتوني بفهمي كه چه كلماتي واسه ي چه عناويني هست. اين ترفند توي sql هم استفاده ميشه كه من از يه برنامه نويس حرفه اي دلفي ياد گرفتم البته اون خيلي سربسته راهنمايي كرد ولي جدولاشو تريس كردم فهميدم كه موضوع از چه قراره.ساده اس ولي خيلي قشنگه.موفق باشيد.

0 0
این کار پویایی برنامه را به شدت از بین میبره و شما اگر متن جدیدی بخواید اضافه کنید باید دوباره همچین ایندکسی بسازید و ... ؛ زمان داس از این کارها میکردیم که sql هنوز نداشتیم. الان دیگه نیازی به ساخت فایل جدا برای index و ... نیست. (10 سال پیش)
0 0
سرعت اينكار بسيار بالاست و براي متن جديد كافيه كه براي متنت يه تولز بسازي و از اون استفاده كني واز همون توابعي كه براي ايندكس ساختن استفاده ميكني تولزتو بسازي . اتفاقا توي يه سري نرم افزارها مثل قانون لینک از اين روش استفاده شده و خيلي سرعت جستجوي بالايي داره و چرا بايد پويايي برنامه رو از بين ببره ساخت ايندكس فقط يك بار توسط خود برنامه نويس انجام ميشه و تمام.حالا اين روش چون خيلي جالب بود ارائه دادم اگه شما روش بهتري داريد ارائه بديد لطفا. موفق باشيد. (10 سال پیش)
0 0
راستي يادم رفت يه سري از نرم افزارهاي قرآني و ادعيه هم از اين روش كه خدمتتون عرض كردم استفاده ميكنن چون بايد كلمات بدون علامت رو توي ديتابيس ذخيره كنن اينم يكي از كاربرداش. (10 سال پیش)
0 0
برای بعضی برنامه ها میتونه کاربرد داشته باشه ، ولی محدودیتهای خودشو داره ، مثلا شما اگر کلمه به کلمه ایندکس کنید اگر جزئی از کلمه سرچ بشه پیدا نمیشه . ولی گاهی میتونه کاربرد داشته باشه ، یک روش برای کارهای خاص منظوره میتونه باشه (10 سال پیش)
0 0
منظورم از پویا نیست اینه که در برنامه اگر بخواد تکستهای جدید اضافه بشه توسط کاربر یا از اینترنت و ... جستجو روش انجام نمیشه مگر اینکه یک مرحله ساخت ایندکس هم بذارید ! مثال شما با تکست ثابت هست مثل قرآن و قانون که قبل از انتشار این کار انجام شده (10 سال پیش)
پاسخ به سوال 
MiRHaDi  10 سال پیش
+2 0

query (SQLiteDatabase db, String[] projectionIn, String selection, String[] selectionArgs, String groupBy, String having, String sortOrder)

و از این پارامترها استفاده کنید

selection = KEY_CODE + " LIKE ?";
selectionArgs = new String[] {"%" + query + "%"};
0 0
میگم الان تو این گدا چیکار کردید دقیقا ؟!! (10 سال پیش)
0 0
اینجا از SQLiteQueryBuilder استفاده شده (10 سال پیش)
پاسخ به سوال 
mohsen-jj  10 سال پیش
0 0

ممنون از همه .

من میخواستم یک کلمه از کاربر بگیرم (که اسمش input هست ) و این کلمه رو سرچ کنم فهمیدم باید با این کد جستجو کنم :

 Cursor cursor = G.database.rawQuery("SELECT * FROM mytexts WHERE matn LIKE'%" + input+ "%'", null);
 
ولی این کد مثلا اگه داخل 6 متن اون کلمه وجود داشته باشه همشون رو پیدا نمی کنه فقط یکیشون رو پیدا می کنه ، حالا باید چیکار کنم ؟
0 0
این رکوردهایی که شامل کلمه میشه را برمیگردونه ، تعداد وجود کلمه در هر رکورد را بر نمیگردونه (10 سال پیش)
0 0
منم تعداد وجود کلمه در هر رکورد رو نمیخوام . همه ی رکوردهایی رو میخوام که شامل کلمه هستن . ولی چطور همه ی این رکورد ها رو بفهمم کدوما هستن ؟ (10 سال پیش)
0 0
فکر کنم فهمیدم . باید یه cursor بزنم و بعد همه ی اون رکوردها رو داخل یه آرایه ای از string یا int ذخیره کنم . مرسی از راهنماییتون :) (10 سال پیش)

پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .