رتبه موضوع:
  • 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
وصل کردن دو جدول به هم در اندروید (حل شد)
#1
سلام
من دوتا جدول دارم میخوام عنوان های جدول 2 رو از طریق جدول 1 نشون بدم.
اسم جدول هام یکیشون: poems هست و اون یکی poet
حالا تویِ جدول poems یه فیلد به نام poets_id زدم و توی جدول poets اومدم یه id و یه name زدم و اسم شاعرا رو درج کردم.
حالا میخوام از طریق poets_id اسم شاعرو همراه با شعر رو نمایش بدم.
الان از این کد برای نمایش اشعار استفاده میکنم (اینجا گفتم که اونایی که first_category_id برابر 5 هست نمایش بده)
Cursor result = db.rawQuery("SELECT * from poems WHERE first_category_id=5" , null);

باید چکار کنم؟
پاسخ
تشکر شده توسط:
#2
SELECT poems.*,poet.name AS poetname FROM poems LEFT OUTER JOIN poet ON poems.poets_id=poet.id WHERE first_category_id=5
پاسخ
تشکر شده توسط: af94
#3
یه مثال میزنم که بهتر متوجه بشین:
Cursor c = db.rawQuery("SELECT poems.*,poets.name AS poetname FROM poems LEFT OUTER JOIN poets ON poems.poets_id=poets.id WHERE first_category_id=5", null);
ArrayList<String> poetNames = new ArrayList<>();
if (c.moveToFirst()) {
    while (c.moveToNext()) {
        poetNames.add(c.getString(c.getColumnIndex("poetname")));
    }
}
پاسخ
تشکر شده توسط: af94
#4
این کد من در فایل DatabaseHandler:
    public List<HashMap <String , Object>> getAshar () {
       
       Cursor result = db.rawQuery
                ("SELECT poems.*,poets.name AS poetname FROM poems LEFT OUTER JOIN poets ON poems.poets_id=poets.id WHERE first_category_id=1" , null);
       
       List<HashMap<String , Object>> all_data= new ArrayList<>();

       while (result.moveToNext())
       {
           HashMap<String , Object> temp= new HashMap<>();

           temp.put("id", result.getString(0));
           temp.put("first_category_id", result.getString(1));
           temp.put("poets_id", result.getString(2));
           temp.put("poetry", result.getString(3));

           all_data.add(temp);
       }
       return all_data;
   }

اینم کدی که تویِ اکتیویتی که میخوام نمایش بدم:
    private ListView contentListView;
   private List<HashMap<String , Object>> ashar;
   private DatabaseHandler db;

       contentListView = (ListView) findViewById(R.id.list_view);

       db = new DatabaseHandler( getBaseContext() );
       db.open();
       ashar = db.getAshar();

       String[] from= {"poetry", "poets_id"};

       int[] to= {R.id.matne_sher, R.id.shaer};

       SimpleAdapter adb = new SimpleAdapter(
               getBaseContext() , ashar , R.layout.custom_sher_list , from , to
       );

       contentListView.setAdapter( adb );

       db.close();


الان وقتیکه از کد استفاده میکنم بازم id رو میزنه
پاسخ
تشکر شده توسط:
#5
اگه میخواین با getString و پارامتر عددی کار کنید دقت کنید که الان جدول نتایج یه ستون اضافه داره و باید به این شکل بخونید:
temp.put("poetname", result.getString(4));
پاسخ
تشکر شده توسط: af94
#6
من الان تمام کدم اینطوره:

    public List<HashMap <String , Object>> getAshar () {

       Cursor c = db.rawQuery("SELECT poems.*,poets.name AS poetname FROM poems LEFT OUTER JOIN poets ON poems.poets_id=poets.id WHERE first_category_id=1", null);
       ArrayList<String> poetNames = new ArrayList<>();
       if (c.moveToFirst()) {
           while (c.moveToNext()) {
               poetNames.add(c.getString(c.getColumnIndex("poetname")));
           }
       }

       Cursor result = db.rawQuery
("SELECT poems.*,poets.name AS poetname FROM poems LEFT OUTER JOIN poets ON poems.poets_id=poets.id WHERE first_category_id=1"
       , null);

       List<HashMap<String , Object>> all_data= new ArrayList<>();

       while (result.moveToNext())
       {
           HashMap<String , Object> temp= new HashMap<>();

           temp.put("id", result.getString(0));
           temp.put("first_category_id", result.getString(1));
           temp.put("poets_id", result.getString(2));
           temp.put("poetry", result.getString(3));
           temp.put("poetname", result.getString(8));

           all_data.add(temp);
       }
       return all_data;
   }

فایل های پیوست هم ستون های جدول های poems و poets هست.
البته poems چهار ستون دیگه داره.
از کد بالا که استفاده میکنم بازم نشون نمیده.


فایل‌های پیوست تصاویر بندانگشتی
       
پاسخ
تشکر شده توسط:
#7
public List<HashMap <String , Object>> getAshar () {
    Cursor c = db.rawQuery("SELECT poems.*,poets.name AS poetname FROM poems LEFT OUTER JOIN poets ON poems.poets_id=poets.id WHERE first_category_id=1", null);
    List<HashMap<String , Object>> allData = new ArrayList<>();
    while (c.moveToNext()) {
        HashMap<String , Object> temp = new HashMap<>();
        temp.put("id", c.getString(c.getColumnIndex("id"));
        temp.put("first_category_id", c.getString(c.getColumnIndex("first_category_id"));
        temp.put("poets_id", c.getString(c.getColumnIndex("poets_id"));
        temp.put("poetry", c.getString(c.getColumnIndex("poetry"));
        temp.put("poetname", c.getString(c.getColumnIndex("poetname"));
        allData.add(temp);
    }
    return allData;
}
پاسخ
تشکر شده توسط: af94
#8
خیلی ممنون درست شد
پاسخ
تشکر شده توسط:




کاربران در حال بازدید این موضوع: 2 مهمان