تالار گفتمان nCIS.ir

نسخه‌ی کامل: وصل کردن دو جدول به هم در اندروید (حل شد)
شما در حال مشاهده نسخه آرشیو هستید. برای مشاهده نسخه کامل کلیک کنید.
سلام
من دوتا جدول دارم میخوام عنوان های جدول 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);

باید چکار کنم؟
SELECT poems.*,poet.name AS poetname FROM poems LEFT OUTER JOIN poet ON poems.poets_id=poet.id WHERE first_category_id=5
یه مثال میزنم که بهتر متوجه بشین:
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")));
    }
}
این کد من در فایل 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 رو میزنه
اگه میخواین با getString و پارامتر عددی کار کنید دقت کنید که الان جدول نتایج یه ستون اضافه داره و باید به این شکل بخونید:
temp.put("poetname", result.getString(4));
من الان تمام کدم اینطوره:

    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 چهار ستون دیگه داره.
از کد بالا که استفاده میکنم بازم نشون نمیده.
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;
}
خیلی ممنون درست شد