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






select * from table where textfield like '%searchtext%'

پروژه مارکت رو ببینی و یکم ابتکار به خرج بدی میتونی چستجو از بانک اطلاعات رو پیاده سازی کنی، بگذریم بریم سراغ آموزش :)
برای تفهیم آسانتر همون پروژه 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 جستجو انجام میشه به همین صورت میتونی تعدادشو از اینجا که دوتاست بیشتر کنی)
از بیشتر نمیتونم مبحث رو باز کنم! ارادت :)

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

query (SQLiteDatabase db, String[] projectionIn, String selection, String[] selectionArgs, String groupBy, String having, String sortOrder)
و از این پارامترها استفاده کنید
selection = KEY_CODE + " LIKE ?";
selectionArgs = new String[] {"%" + query + "%"};

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