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

باید چکار کنم؟
پاسخ
تشکر شده توسط:
#2
1
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
یه مثال میزنم که بهتر متوجه بشین:
1
2
3
4
5
6
7
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:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
   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;
   }

اینم کدی که تویِ اکتیویتی که میخوام نمایش بدم:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
   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 و پارامتر عددی کار کنید دقت کنید که الان جدول نتایج یه ستون اضافه داره و باید به این شکل بخونید:
1
temp.put("poetname", result.getString(4));
پاسخ
تشکر شده توسط: af94
#6
من الان تمام کدم اینطوره:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
   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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
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
خیلی ممنون درست شد
پاسخ
تشکر شده توسط:




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