ورود

View Full Version : مشکل در خواندن تعداد داستان ها



nargesjooon
سه شنبه 01 دی 1394, 22:02 عصر
با سلام خدمت اساتید گرامی :لبخندساده:
بنده ی دیتابیس دارم شمال چند داستان از فصول مختلف
میخاهم وقتی کاربر وارد برنامه م شد فصل ها و تعداد داستان های مربوط ب فصل ها را ببیند
اما هرکاری میکنم تعداد داستان ها را فقط 1 ب نمایش میدهد :افسرده:
این هم تصاویر مربوطه و کدهای مربوطه

http://8pic.ir/images/reopey6vncrcokbac1fr.jpg


http://8pic.ir/images/eisp68ueiapxgipmwp7l.jpg



اینم کد اول



public Integer shomaresh_field(String table , String field){
Cursor Cursor=mydb.rawQuery("SELECT * FROM "+table+" group by "+field, null);
int i=Cursor.getCount();
return i ;


}

public String namayesh_field(String table , int row){
Cursor Cursor = mydb.rawQuery("SELECT * FROM "+table+" group by seasone", null);
Cursor.moveToPosition(row);
String s = Cursor.getString(4);
return s;
}

public Integer shomaresh_dastan(String table , String seasone){
Cursor Cursor = mydb.rawQuery("SELECT * FROM "+table+" where seasone='"+seasone+"' group by name", null);
int s = Cursor.getCount();
return s;

}





اینم کد برای نمایش فصل و تعداد داستان ها



public class Season extends ListActivity {

private MyDatabase db;
private String [] Name;
private String [] Teadad;


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.seasone);

db = new MyDatabase(this);
refresher();
setListAdapter(new AA());
}




class AA extends ArrayAdapter<String>{

public AA(){
super (Season.this , R.layout.raw_season , Name);
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater in = getLayoutInflater();
View row = in.inflate(R.layout.raw_season, parent,false);

TextView name = (TextView) row.findViewById(R.id.name_season);
TextView teadad = (TextView) row.findViewById(R.id.teadad_dastan);
name.setText(Name [position]);
teadad.setText(Teadad [position]);
return (row);


}
}

private void refresher (){

db.open();
int save = db .shomaresh_field("sqltb", "seasone");
Name = new String[save];
Teadad = new String[save];

for (int i = 0; i < save; i++) {
Name[i] = db.namayesh_field("sqltb", i);
Teadad[i]=db.shomaresh_dastan("sqltb", Name[i].toString())+"";

}


}




}

suraty
جمعه 04 دی 1394, 21:43 عصر
سلام،
به نظر من شاید بهتر باشه تابع شمارش داستان در کوئری خودش شمارش رو انجام بده!


Cursor Cursor = mydb.rawQuery("SELECT Count(*),seasone FROM "+table+" where seasone='"+seasone+"' group by name", null);

nargesjooon
شنبه 05 دی 1394, 11:13 صبح
سلام،
به نظر من شاید بهتر باشه تابع شمارش داستان در کوئری خودش شمارش رو انجام بده!


Cursor Cursor = mydb.rawQuery("SELECT Count(*),seasone FROM "+table+" where seasone='"+seasone+"' group by name", null);

آهان
ممنون دوست گرامی:لبخندساده:

nargesjooon
سه شنبه 08 دی 1394, 21:03 عصر
سلام،
به نظر من شاید بهتر باشه تابع شمارش داستان در کوئری خودش شمارش رو انجام بده!


Cursor Cursor = mydb.rawQuery("SELECT Count(*),seasone FROM "+table+" where seasone='"+seasone+"' group by name", null);

باز هم جواب نداد :افسرده:

pbm_soy
سه شنبه 08 دی 1394, 23:53 عصر
بهتر بود مرحله به مرحله کار میگردید
آیا توانستید کل لیست عنواین داستانها را نمایش بدهید؟ اگه اینکار را انجاهمیدادید بقیه کارها براتون سخت نمیشد

مورد بعدی شما برای شمارش تعداد کل رکوردها با استفاده ازهsql بروش زیر عمل کنید
Select count(*) from table

ویا برای شمارش داستانهای فصل خاص
Select count(*) from table where season='fasle1'

البته پیشنهاد من برای فصل بندی اينه که یک فیلد عددی اضافه کنید ودر آن شماره %uPOST /editpost.php?do=updatepost

nargesjooon
پنج شنبه 10 دی 1394, 13:46 عصر
بهتر بود مرحله به مرحله کار میگردید
آیا توانستید کل لیست عنواین داستانها را نمایش بدهید؟ اگه اینکار را انجاهمیدادید بقیه کارها براتون سخت نمیشد

مورد بعدی شما برای شمارش تعداد کل رکوردها با استفاده ازهsql بروش زیر عمل کنید
Select count(*) from table

ویا برای شمارش داستانهای فصل خاص
Select count(*) from table where season='fasle1'

البته پیشنهاد من برای فصل بندی اينه که یک فیلد عددی اضافه کنید ودر آن شماره %uPOST /editpost.php?do=updatepost

تعداد شمارش داستان ها درست شد
کدشو میزارم برای دوستانی ک ب مشکل بر خوردن
من گروپ کرده بودم بر اساس name ک اشتباه بود باید بر اساس id انجام میشد
اینم کدش


public Integer shomaresh_dastan(String table , String season){

Cursor Cursor = mydb.rawQuery("SELECT * FROM "+table+" where season='"+season+"' group by id", null);
int s = Cursor.getCount();
return s;

}

pbm_soy
جمعه 11 دی 1394, 01:22 صبح
مطمینید این دستوری که نوشتید درسته؟! مگر اینکه چیز دیگری مدنظرتون باشد؟!
در اینجا و درمورد مثال شما گذاشتن group by منطقی نیست و کار اضافی است
حتی میتوان به این نکته اشاره کرد که id هرداستان منحصربفرد است و id تکراری در جدول ندارید پس دلیلی برای گروه بندی آنها هم ندارید
مگراینکه فیلدی بنام کدفصول داشته باشید یا همان نام فصول و بخواهید لیستی براساس تعداد داستانهای هر فصل را بگیرید که در آنصورت میتوانید از گروپ بای استفاده کنید

شما تعداد داستانهای فصل خاص را میخواهید، درسته؟!
Select * from table where season='faslexxx'
این دستور sql را در بالا بنویسید و یا همانطور که گفتم بخش گروپ بای نوشته خودتون را حذف کنید!
با کپی کردن دستورات به نتیجه نمیرسید و یادگیریتون کند میشود ویا حداقل اگر از جای کپی میکنید و یا الگوبرداری میکنید سعی کنید دستورات را بدرستی بفهمید
در تاپیک دیگری سوال کرده بودید که در اونجا برای همین دیتابیس ۴ جدول درست کرده بودید نمیدانم فکر میکنم برای هرکتاب جدول جداگانه درست کرده بودید این مورد جواب میدهد ولی شاید میزان کدنویسی شما را زیاد کند حجم برنامه بالا برود و خیلی ایرادهای دیگر
درحالی که اگر مفاهیم پایگاه داده ها را مطالعه کنید طراحی صحیح دیتابیس را یادمیگیرید چون برنامه نویسی فقط نوشتن کد و دستور نیست!
دراینجا پیشنهاد میدم در همان جدول اول یک فیلد بنام book اضافه کنید به این ترتیب رکوردهایی که مربوط به کتاب اول باشد در این فیلد یک ذخیره میکنید و رکوردهای مربوط به کتاب دوم در این فیلد مقدار ۲ را میریزید
دراینجا هم میتوانید از گروپ بای برای گروه بندی کردن رکوردهای مربوط به هر کتاب استفاده کنید


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

nargesjooon
جمعه 11 دی 1394, 16:32 عصر
مطمینید این دستوری که نوشتید درسته؟! مگر اینکه چیز دیگری مدنظرتون باشد؟!
در اینجا و درمورد مثال شما گذاشتن group by منطقی نیست و کار اضافی است
حتی میتوان به این نکته اشاره کرد که id هرداستان منحصربفرد است و id تکراری در جدول ندارید پس دلیلی برای گروه بندی آنها هم ندارید
مگراینکه فیلدی بنام کدفصول داشته باشید یا همان نام فصول و بخواهید لیستی براساس تعداد داستانهای هر فصل را بگیرید که در آنصورت میتوانید از گروپ بای استفاده کنید

شما تعداد داستانهای فصل خاص را میخواهید، درسته؟!
Select * from table where season='faslexxx'
این دستور sql را در بالا بنویسید و یا همانطور که گفتم بخش گروپ بای نوشته خودتون را حذف کنید!
با کپی کردن دستورات به نتیجه نمیرسید و یادگیریتون کند میشود ویا حداقل اگر از جای کپی میکنید و یا الگوبرداری میکنید سعی کنید دستورات را بدرستی بفهمید
در تاپیک دیگری سوال کرده بودید که در اونجا برای همین دیتابیس ۴ جدول درست کرده بودید نمیدانم فکر میکنم برای هرکتاب جدول جداگانه درست کرده بودید این مورد جواب میدهد ولی شاید میزان کدنویسی شما را زیاد کند حجم برنامه بالا برود و خیلی ایرادهای دیگر
درحالی که اگر مفاهیم پایگاه داده ها را مطالعه کنید طراحی صحیح دیتابیس را یادمیگیرید چون برنامه نویسی فقط نوشتن کد و دستور نیست!
دراینجا پیشنهاد میدم در همان جدول اول یک فیلد بنام book اضافه کنید به این ترتیب رکوردهایی که مربوط به کتاب اول باشد در این فیلد یک ذخیره میکنید و رکوردهای مربوط به کتاب دوم در این فیلد مقدار ۲ را میریزید
دراینجا هم میتوانید از گروپ بای برای گروه بندی کردن رکوردهای مربوط به هر کتاب استفاده کنید


امیدوارم به شما و دوستانتون کمکی کرده باشم
سلام ممنون از راهنمائی تون
اما
بنده یه دیتابیس دارم شامل 4 جدول ک در هرجدول تعدای فصل دارم و شماره صفحه های هرفصل
بله اگ 1 جدول ب تنها بود حرف شما صدق میکرد اما وقتی میخواستم تعداد صفحه هر فصل را در 4 جدول بیرون بیارم نباید گروپ می کردم؟
الان بنده از هر جدول فصل ها و تعداد صفحه های هرفصل مربوطه را دارم یعنی اون چیزی ک میخواسم

nargesjooon
جمعه 11 دی 1394, 17:21 عصر
مطمینید این دستوری که نوشتید درسته؟! مگر اینکه چیز دیگری مدنظرتون باشد؟!
در اینجا و درمورد مثال شما گذاشتن group by منطقی نیست و کار اضافی است
حتی میتوان به این نکته اشاره کرد که id هرداستان منحصربفرد است و id تکراری در جدول ندارید پس دلیلی برای گروه بندی آنها هم ندارید
مگراینکه فیلدی بنام کدفصول داشته باشید یا همان نام فصول و بخواهید لیستی براساس تعداد داستانهای هر فصل را بگیرید که در آنصورت میتوانید از گروپ بای استفاده کنید

شما تعداد داستانهای فصل خاص را میخواهید، درسته؟!
Select * from table where season='faslexxx'
این دستور sql را در بالا بنویسید و یا همانطور که گفتم بخش گروپ بای نوشته خودتون را حذف کنید!
با کپی کردن دستورات به نتیجه نمیرسید و یادگیریتون کند میشود ویا حداقل اگر از جای کپی میکنید و یا الگوبرداری میکنید سعی کنید دستورات را بدرستی بفهمید
در تاپیک دیگری سوال کرده بودید که در اونجا برای همین دیتابیس ۴ جدول درست کرده بودید نمیدانم فکر میکنم برای هرکتاب جدول جداگانه درست کرده بودید این مورد جواب میدهد ولی شاید میزان کدنویسی شما را زیاد کند حجم برنامه بالا برود و خیلی ایرادهای دیگر
درحالی که اگر مفاهیم پایگاه داده ها را مطالعه کنید طراحی صحیح دیتابیس را یادمیگیرید چون برنامه نویسی فقط نوشتن کد و دستور نیست!
دراینجا پیشنهاد میدم در همان جدول اول یک فیلد بنام book اضافه کنید به این ترتیب رکوردهایی که مربوط به کتاب اول باشد در این فیلد یک ذخیره میکنید و رکوردهای مربوط به کتاب دوم در این فیلد مقدار ۲ را میریزید
دراینجا هم میتوانید از گروپ بای برای گروه بندی کردن رکوردهای مربوط به هر کتاب استفاده کنید


امیدوارم به شما و دوستانتون کمکی کرده باشم
من تعداد داستان های همه فصل هام را میخوام
اونوقت باید از چه دستور sql استفاده کنم خوب؟

pbm_soy
چهارشنبه 16 دی 1394, 00:52 صبح
من در پست بالا گفتم بجای ۴ جدول یک جدول استفاده کنید!
در هر صورت حالا شما یک لیست میخواهید که تعداد داستانهای هر فصل را بگه؟ مثل همون تصویری که در پست اول گذاشتید؟
نام فصل و جلوش تعداد؟
دراین صورت دستور sql بصورت زیر میشود
Select season,count(*) from table group by season
نتیجه این دستور یک لیست با دو ستون است که ستون اول نام فصلها و ستون دوم تعداد تکرار آن فصل است فقط باید بتوانید آنرا بدرستی در صفحه نمایش دهید

فصل اول ۲
فصل دوم. ۱
فصل سوم. ۳

البته اگر عنوان فصلها از لحاظ املایی دقیقا شبیه هم باشند در غیراینصورت در شمارش اشتباه میکند برای همین درپستهای بالا گفتم یک فیلد برای شماره فصلها از نوع عددی اضافه کنید و از آن فیلد برای گروه بندی و یا جستجو و یا فیلتر کردن براساس شماره فصل استفاده کمید

برای اطمینان میتوانید دستور فوق را بروی دیتابیس در محیط خود sqlite اجرا کنید و خروجی بگیرید و پس از آن در سورس کد برنامه بگنجانید

nargesjooon
چهارشنبه 16 دی 1394, 13:32 عصر
من در پست بالا گفتم بجای ۴ جدول یک جدول استفاده کنید!
در هر صورت حالا شما یک لیست میخواهید که تعداد داستانهای هر فصل را بگه؟ مثل همون تصویری که در پست اول گذاشتید؟
نام فصل و جلوش تعداد؟
دراین صورت دستور sql بصورت زیر میشود
Select season,count(*) from table group by season
نتیجه این دستور یک لیست با دو ستون است که ستون اول نام فصلها و ستون دوم تعداد تکرار آن فصل است فقط باید بتوانید آنرا بدرستی در صفحه نمایش دهید

فصل اول ۲
فصل دوم. ۱
فصل سوم. ۳

البته اگر عنوان فصلها از لحاظ املایی دقیقا شبیه هم باشند در غیراینصورت در شمارش اشتباه میکند برای همین درپستهای بالا گفتم یک فیلد برای شماره فصلها از نوع عددی اضافه کنید و از آن فیلد برای گروه بندی و یا جستجو و یا فیلتر کردن براساس شماره فصل استفاده کمید

برای اطمینان میتوانید دستور فوق را بروی دیتابیس در محیط خود sqlite اجرا کنید و خروجی بگیرید و پس از آن در سورس کد برنامه بگنجانید
کدی ک دادین رو امتحان کردم
اما همه را 4 میاره
فصل اول 4
فصل دوم 4
و...

pbm_soy
چهارشنبه 16 دی 1394, 20:19 عصر
کدی نوشتید را اینجا بگذارید

pbm_soy
چهارشنبه 16 دی 1394, 20:20 عصر
کد sql را تو sqlite expert امتحان کردید؟

nargesjooon
چهارشنبه 16 دی 1394, 20:59 عصر
کدی نوشتید را اینجا بگذارید

این کد رو نوشتم


public Integer shomaresh_dastan(String table , String season){


Cursor Cursor = mydb.rawQuery("Select season,count(*) from "+table+" group by season", null);

int s = Cursor.getCount();
return s;

}

nargesjooon
چهارشنبه 16 دی 1394, 22:34 عصر
کدی نوشتید را اینجا بگذارید
چی شد؟!
الان باید چه کدی بزنم؟

pbm_soy
چهارشنبه 16 دی 1394, 22:48 عصر
اول از همه این برنامه ای که اینجا نوشتید فقط یک عدد برمیگرداند آنهم باتوجه به دستور sql نوشته شده تعداد گروه ها را برمیگرداند!

اگر توجه کرده باشید گفته بودم این دستور sql یک لیست با دو ستون برمیگرداند پس شما باید آن جدول را باید نمایش میدادید اینجا شما خروجی دستور sql را گرفتید و بعد تعداد رکوردهای آنرا از این تابعی که نوشتید برگرداندید!

nargesjooon
چهارشنبه 16 دی 1394, 22:53 عصر
اول از همه این برنامه ای که اینجا نوشتید فقط یک عدد برمیگرداند آنهم باتوجه به دستور sql نوشته شده تعداد گروه ها را برمیگرداند!

اگر توجه کرده باشید گفته بودم این دستور sql یک لیست با دو ستون برمیگرداند پس شما باید آن جدول را باید نمایش میدادید اینجا شما خروجی دستور sql را گرفتید و بعد تعداد رکوردهای آنرا از این تابعی که نوشتید برگرداندید!
من میدونم فقط عدد بر میگردونه
کدهای دیگه ای هم نوشتم برای نمایش فصل ها
این کد رو نوشتم برای اینکه تعداد داستان های هرفصل را بهم بده

pbm_soy
چهارشنبه 16 دی 1394, 23:12 عصر
در ضمن به شما گفتم که دستور sql را اول در sqlite expert امتحان کنید!

اول از همه شما یک لیست میخواهید که تعداد داستانهای هر فصل را دربیارید یا تعداد رکوردهای هر سطر پس تابعی که برای اینکار مینویسید هیچ آرگومان ورودی ندارد حالا اگر کار نمایش را درهمان تابع انجام دهید پس مقداری برگشتی هم ندارد ولی اگر کار نمایش را بخواهید در جای دیگر انجام بدهید میتوانید یک رشته یا cursorی که توش لیست واکشی شده قرار دارد را برگردانید بصورت زیر
Void list_season()
یا
Cursor list_season()

بایک حلقه ساده میتوانید لیستی که در cursor موجود است را نمایش دهید البته در یک textview !

pbm_soy
چهارشنبه 16 دی 1394, 23:31 عصر
من میدونم فقط عدد بر میگردونه
کدهای دیگه ای هم نوشتم برای نمایش فصل ها
این کد رو نوشتم برای اینکه تعداد داستان های هرفصل را بهم بده

عجب میگید میدونید فقط عدد برمیگردونه پس چطور انتظار دارید تعداد داستانهای هر فصل را بدهد؟!!! قاعدتا چندتا عدد به همراه نام هر فصل باید برگرداند!
پس این تابع را باید طوری مینوشتید که بتواند اینکار را انجام دهد!
دلیل اینکه گفتم دستور sql را در sqlite expert امتحان کنید این بود که خروجی دستور را ببینید ومطمین شوید از اجرای صحیح و نتیجه صحیح آن و همینطور بادیدن خروجی آن میتوانستید برنامه ریزی کنید برای استفاده از آن در برنامه خودتان!