رفتن به مطلب
  • 0

مرتب کردن خاص cur برای نمایش در لیست ویو


arastooms

سوال

سلام به همه عزیزان و اساتید و سلاطین دیتابیس ((:hi: اصلا منظورم استاد اسکندی نبود :hi:))

من یک سورس سمپل برای جستجو در دیتابیس تهیه کردم که به خوبی کار میکنه و عزیزان مبتدی هم میتونند استفاده کنند
ولی در این سمپل قصد دارم

بعد از سرچ کلمه " علی " در ستونی از جدول tbl1 که اسمش jomle هست بیام همه رو لیست ویو نمایش بدم ولی مرتب شده 

خوبدستوراتی داریم برای مرتب کردن cursor ها در مبحث دیتابیس که به ترتیب حروف الفبا و به ترتیب حروف الفبا از آخر به اول مرتب میکنه که شبیه به این هست 

SELECT * FROM tbl ORDER BY id ASC|DESC

ولی من قصد ندارم براساس حروف الفبا مرتب کنم 
بلکه قصد دارم برحسب 

اولویت  مکانی (( کلمه سرچ شده = علی)) در جمله مرتب کنم  

با ذکر مثال براتون شرح میدم 

ما اومدیم و در یک دیتابیس 100 سطری که در اسمش database.db هست
در جدولی به اسم tbl2

در ستونی به اسم jomle 

دنبال جملاتی گشتیم که داخلش   کلمه (علی ) داره

با این دستور 

cur1=SQL1.ExecQuery("SELECT * FROM tbl1 WHERE jomle LIKE '%"&EditText1.Text&"%'LIMIT 40 OFFSET 0") 

و حالا در این دیتابیس 39 سطر پیدا میکنه که داخلش کلمه " علی " هست.. (( داخل ادیت تکس علی تایپ شده))
ولی وقتی با دستور زیر در لیست ویو نمایش میدیم میبینم که به ترتیبی که در دیتابیس بوده نمایش میده 
 

For i = 0 To cur1.RowCount-1
	cur1.Position=i
	ListView_sort.AddSingleLine(cur1.GetString("jomle"))
Next

خوب حالا می بینیم که یه لیست ویو 39 خطی داریم که داخل همه خط ها کلمه " علی " هست ولی به ترتیب نیست
یعنی یکی کلمه علی " وسطش هست "
یکی کلمه علی "آخرش هست "
یکی کلمه علی جایگاه دم هست
و ....
 به اینصورت 

 

** Service (starter) Create **
** Service (starter) Start **
** Activity (main) Create, isFirst = true **
** Activity (main) Resume **
جستجو برای ==علی
خط 0=ررررعلیمحمد
خط 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=رعلیعلی
خط 31=ررر علی ر علی رر
خط 32=ررعلی علی
خط 33=ررر علی ر علی 
خط 34=رعلی علی
خط 35=علی
خط 36=علی
خط 37=علی علی
خط 38=ر علی ر علی ر علی ر علی
خط 39=رعلیرعلیرعلیرعلی

 خوب ما می خواهیم که مثلا خط سوم در بالا ترین مکان دیده بشه چون کلمه علی اولین کلمه در جمله هست
یا همینطور خط 35 و 26 در مکانهای دوم و سوم باشند
در واقع چه طور میتونم لیست رو به این صورت در بیارم؟


چه طور میتونیم cur های گرفته شده رو برحسب جایگاه کلمه علی مرتب کنیم و نمایش دهیم 

علی
علی
علی ر
علی رر
علی ررررررررررر
رعلی
رعلی ر
ررعلی
ر علی
ر علی ر
رر علی رررر علی  ررر علی   
رر علی
رر علی رررر
رررعلی علی
رر علی رررررررررررررررر
رررعلی
ررررعلیمحمد
ررر علی
ررر علی ر علی رررر
رررر علی
رررر علی ر
رررررر علی
رررررررر علی رررررررررر
رررررررررررررررررررررررررررعلی
رررررررررررررررررررررررررررررر علی
ررررررررررررررررررررررررررررررررررررررررررررررررررعلی

با تشکر از دوستان و سلاطین دیتابیس

سورت لیست ویو.zip

لینک ارسال
به اشتراک گذاری در سایت های دیگر

8 پاسخ به این سوال تاکنون داده شده است

ارسال‌های توصیه شده

سلام ویژه به عزیزان ( بامپ بعد از یک و روز  اندی طبق قوانین )
:hi:

 

لینک ارسال
به اشتراک گذاری در سایت های دیگر

ارسطووو

دیتابیست رو بده
من این سوالت واقعا ذهنمو گرفته

یه توضیح هم بده که میخوای برای چی این کارو بکنی

من احتمالا شب ساعت 8 به بعد بتونم بشینم پای سیستم

بفرست برام بانکتو

 

لینک ارسال
به اشتراک گذاری در سایت های دیگر

سلام دستوری که خودتون نوشتید باید کار کنه چون میاد بر حسب id از اول به آخر یا برعکس مقادیر رو میگیره حالا میخواید کد زیر رو دوباره امتحان کنید...

SELECT * FROM tblname ORDER BY id ASC
لینک ارسال
به اشتراک گذاری در سایت های دیگر

یا به این صورت تست کنید...

cur1=SQL1.ExecQuery("SELECT * FROM tbl1 WHERE jomle LIKE '%"&EditText1.Text&"%'LIMIT 40 OFFSET 0 ORDER BY id ASC") 

 

لینک ارسال
به اشتراک گذاری در سایت های دیگر

ارسطو سلام

والا سوالت اصلا مربوط به دیتابیس نیستش :))

این الگوریتمی که زیر برات گذاشتم ، مرتب سازی حبابی سی پلاس پلاس هست که پیادش کردم

نمیدونم درسته یا نه

نمیدونم کار میکنه یا نه

تست کن ببینیم چطوریاست

(قرایند ریختن مطالب در کورسور با خودت)

Dim cur As Cursor
Dim l As List
For i = 0 To cur.RowCount - 1
	Dim str222 As String = cur.GetString("name")
	l.InsertAt(str222.IndexOf(mySearch),str222)
Next

	
 Dim i , j As Int
 Dim str1,str2,str3 As String
     For i = l.Size - 2 To 0
     	For j = 0 To i
			str1 = l.Get( i )
			str2 = l.Get( i + 1 )
			If str1 > str2 Then
				str3 = l.Get(j)
				l.InsertAt(j , l.Get(j + 1))
				l.InsertAt(j + 1,str3)
			End If
		Next
	Next
       

 

لینک ارسال
به اشتراک گذاری در سایت های دیگر

l

در 1 ساعت قبل، shahab.es گفته است :

ارسطو سلام

والا سوالت اصلا مربوط به دیتابیس نیستش :))

این الگوریتمی که زیر برات گذاشتم ، مرتب سازی حبابی سی پلاس پلاس هست که پیادش کردم

نمیدونم درسته یا نه

نمیدونم کار میکنه یا نه

تست کن ببینیم چطوریاست

(قرایند ریختن مطالب در کورسور با خودت)


Dim cur As Cursor
Dim l As List
For i = 0 To cur.RowCount - 1
	Dim str222 As String = cur.GetString("name")
	l.InsertAt(str222.IndexOf(mySearch),str222)
Next

	
 Dim i , j As Int
 Dim str1,str2,str3 As String
     For i = l.Size - 2 To 0
     	For j = 0 To i
			str1 = l.Get( i )
			str2 = l.Get( i + 1 )
			If str1 > str2 Then
				str3 = l.Get(j)
				l.InsertAt(j , l.Get(j + 1))
				l.InsertAt(j + 1,str3)
			End If
		Next
	Next
       

 

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

این کد در این خط خطا میده 
وقتی میخاد موقعیت کلمه " علی " رو بگیره و بریزه تو لیست 

	Dim string1 As String = cur1.GetString("jomle")
	list1.InsertAt(string1.IndexOf("علی"),string1)

 خطا هم مربوط به این هست

** Service (starter) Create **
** Service (starter) Start **
** Activity (main) Create, isFirst = true **
** Activity (main) Resume **
جستجو برای ==علی
Error occurred on line: 60 (Main)
java.lang.IndexOutOfBoundsException: Invalid index 4, size is 0
	at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:251)
	at java.util.ArrayList.add(ArrayList.java:143)
	at anywheresoftware.b4a.objects.collections.List.InsertAt(List.java:111)
	at java.lang.reflect.Method.invokeNative(Native Method)
	at java.lang.reflect.Method.invoke(Method.java:511)
	at anywheresoftware.b4a.shell.Shell.runVoidMethod(Shell.java:748)
	at anywheresoftware.b4a.shell.Shell.raiseEventImpl(Shell.java:343)
	at anywheresoftware.b4a.shell.Shell.raiseEvent(Shell.java:247)
	at java.lang.reflect.Method.invokeNative(Native Method)
	at java.lang.reflect.Method.invoke(Method.java:511)
	at anywheresoftware.b4a.ShellBA.raiseEvent2(ShellBA.java:134)
	at anywheresoftware.b4a.BA.raiseEvent2(BA.java:157)
	at anywheresoftware.b4a.BA.raiseEvent(BA.java:153)
	at anywheresoftware.b4a.objects.ViewWrapper$1.onClick(ViewWrapper.java:78)
	at android.view.View.performClick(View.java:4084)
	at android.view.View$PerformClick.run(View.java:16966)
	at android.os.Handler.handleCallback(Handler.java:615)
	at android.os.Handler.dispatchMessage(Handler.java:92)
	at android.os.Looper.loop(Looper.java:137)
	at android.app.ActivityThread.main(ActivityThread.java:4745)
	at java.lang.reflect.Method.invokeNative(Native Method)
	at java.lang.reflect.Method.invoke(Method.java:511)
	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
	at dalvik.system.NativeStart.main(Native Method)
** Activity (main) Pause, UserClosed = true **
** Service (starter) Destroy **

 فکر کنم یه جایی باید ظرفیت لیست تعریف بشه ؟؟

 

اومدم این دستور رو عوض کردم و ایندکس ها رو نگرفتم فقط با  i گرفتم ببینم محتوا چی هست
و این جواب رو میده

For i = 0 To cur1.RowCount-1
	cur1.Position=i
	
	Dim string1 As String = cur1.GetString("jomle")
	list1.InsertAt(i,string1)
	
Next	

Log(list1)

 

جواب داخل لیست

** Service (starter) Create **
** Service (starter) Start **
** Activity (main) Create, isFirst = true **
** Activity (main) Resume **
جستجو برای ==علی
(ArrayList) [ررررعلیمحمد, رررررر علی, ررررررررررررررررررررررررررررررررررررررررررررررررررعلی, رعلی, علی ررررررررررر, رررررررر علی رررررررررر, رررررررررررررررررررررررررررررر علی, رر علی رررر علی  ررر علی   , رر علی, رررر علی, رررررررررررررررررررررررررررعلی, علی رر, ررعلی, ر علی, ر علی ر, رعلی ر, رررر علی ر, رررر علی, ررر علی, ررعلی, علی ر, رر علی رررر, رعلی, رررعلی علی, رر علی رررررررررررررررر, رررعلی, ررر علی ر علی رررر, ررعلیعلی, ررر علی رررررررر, رررعلیعلی, رعلیعلی, ررر علی ر علی رر, ررعلی علی, ررر علی ر علی , رعلی علی, علی, علی, علی علی, ر علی ر علی ر علی ر علی, رعلیرعلیرعلیرعلی]

 

 

 

ممنون میشم کمک کنی تا به نتیجه برسم شهاب جان 
البته اگر وقت داری و لطفت شامل حال من میشه
مرسی 
مرسی 
مرسی

لینک ارسال
به اشتراک گذاری در سایت های دیگر

سلام ارسطوی عزیز

والا کار که نشد نداره

من اطلاعی در باره انجام این کار با دیتابیس ندارم

کد خودمم الان دارم بررسی میکنم ، هنگ کردم :))))

بازم برات میگردم اما اگر تونستی هدفت از این الگوریتمی که داری رو بگو

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

♥

 

لینک ارسال
به اشتراک گذاری در سایت های دیگر

فکر کنم شهاب جان 4 تا " علی " داریم با ایندکس مساوی ( 1 یا 0 یا ..)
که خطا میده به ما 
این مشکل رو چه طور برطرف کنیم؟
فکر میکنم با map کار کنیم روش بهتر نیست؟

 

من خروجی موقعیت های " علی " رو گرفتم در سطر ها می بینی که 5 تا اولی یکی هست
 

** Service (starter) Create **
** Service (starter) Start **
** Activity (main) Create, isFirst = true **
** Activity (main) Resume **
علی
Count = 0, word = علی ررررررررررر
Count = 0, word = علی رر
Count = 0, word = علی ر
Count = 0, word = علی
Count = 0, word = علی علی
Count = 1, word = رعلی
Count = 1, word = رعلی ر
Count = 1, word = رعلیعلی
Count = 1, word = رعلی علی
Count = 1, word = رعلیرعلیرعلیرعلی
Count = 2, word = ررعلی
Count = 2, word = ر علی
Count = 2, word = ر علی ر
Count = 2, word = ررعلیعلی
Count = 2, word = ررعلی علی
Count = 2, word = ر علی ر علی ر علی ر علی
Count = 3, word = رر علی رررر علی  ررر علی   
Count = 3, word = رر علی
Count = 3, word = رر علی رررر
Count = 3, word = رررعلی علی
Count = 3, word = رر علی رررررررررررررررر
Count = 3, word = رررعلی
Count = 3, word = رررعلیعلی
Count = 4, word = ررررعلیمحمد
Count = 4, word = ررر علی
Count = 4, word = ررر علی ر علی رررر
Count = 4, word = ررر علی رررررررر
Count = 4, word = ررر علی ر علی رر
Count = 4, word = ررر علی ر علی 
Count = 5, word = رررر علی
Count = 5, word = رررر علی ر
Count = 7, word = رررررر علی
Count = 9, word = رررررررر علی رررررررررر
Count = 27, word = رررررررررررررررررررررررررررعلی
Count = 31, word = رررررررررررررررررررررررررررررر علی
Count = 50, word = ررررررررررررررررررررررررررررررررررررررررررررررررررعلی

 

لینک ارسال
به اشتراک گذاری در سایت های دیگر

بایگانی شده

این موضوع بایگانی و قفل شده و دیگر امکان ارسال پاسخ نیست.

  • کاربران آنلاین در این صفحه   0 کاربر

    • هیچ کاربر عضوی،در حال مشاهده این صفحه نیست.
×
×
  • اضافه کردن...