PDA

View Full Version : نتایج جستجو با اولویت شروط



scorpion_man
یک شنبه 18 آذر 1386, 17:41 عصر
با سلام و خسته نیاشید به همه دوستان عزیز
من میخوام یه query ساده با تعدادی شروط جستجو از دیتابیس بگیرم با این تفاوت که اولویت نمایش اطلاعات بر اساس شروط از چپ به راست باشه یعنی نتیجه چپ ترین شرط در اول نتایج و بقیه به همین ترتیب پایین تر از اون قرار بگیرن
در ضمن این کار بر روی وب انجام میشه و db از نو innodb بوده بنابراین سرعت و گرفتن حداقل زمان سرور اهمیت ویژه ای داره و باید از دستورات limit برای کاهش حجم انتقال داده هم استفاده کرد بنابراین اولویت نمایش خیلی مهمه و در ضمن این اولویت باید هنگام query گرفتن اعمال بشه چون sort مجدد با برنامه های web server زمان server رو خواهد گرفت

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

tabib_m
یک شنبه 18 آذر 1386, 18:11 عصر
سلام
خوب چرا کوئری ها رو جدا نمیکنی؟

scorpion_man
دوشنبه 19 آذر 1386, 00:29 صبح
سلام
خوب چرا کوئری ها رو جدا نمیکنی؟
با تشکر از دوست عزیز من گفتم در مورد وب دارم صحبت میکنم و در اینجا زمان از اهمیت ویژهای برخورداره ثانیا جدا کردن چند شرط به صورت query های جدا جایی که از یه table انجام میشه کار حرفه ای نیست

AminSobati
دوشنبه 19 آذر 1386, 13:48 عصر
شاید این بتونه سرنخی باشه:


use northwind
go

select
case
when country='spain' and city='madrid' then 2
when country='spain' then 1
end as Rank,
*
from customers
where country='spain' or city='madrid'
order by Rank desc

tabib_m
دوشنبه 19 آذر 1386, 16:36 عصر
شاید این بتونه سرنخی باشه:
فکر نمیکنم ربطی داشته باشه
کار case (تا جایی که من میدونم) تغییر نتیجه بر اساس شروطی که ما میذاریم هست. مثلا اگر بخوایم فیلد ماه رو سلکت کنیم و میخوایم به جایی که مقدار واقعی فیلد ماه (که اعداد هست) به ما برگردونده بشه، نام ماهها برگردونده بشه، میتونیم از case استفاده کنیم. طبق مثالی که اینجا (http://mysql-tips.blogspot.com/2005/04/mysql-select-case-example.html) زده.
و این هم منبع (http://dev.mysql.com/doc/refman/5.0/en/control-flow-functions.html#operator_case) برای معلومات دقیق در مورد select case.


با تشکر از دوست عزیز من گفتم در مورد وب دارم صحبت میکنم و در اینجا زمان از اهمیت ویژهای برخورداره ثانیا جدا کردن چند شرط به صورت query های جدا جایی که از یه table انجام میشه کار حرفه ای نیست
راستش من که راهی پیدا نکردم.
در هر صورت، اگر جای شما بودم از چند تا کوئری استفاده می کردم.

scorpion_man
دوشنبه 19 آذر 1386, 17:13 عصر
شاید این بتونه سرنخی باشه:


use northwind
go

select
case
when country='spain' and city='madrid' then 2
when country='spain' then 1
end as Rank,
*
from customers
where country='spain' or city='madrid'
order by Rank desc

با تشکر از شما دوست عزیز و کد جالبتون فقط باید ببینم تو mysql چطوری کار میکنه
راستی سایت بسیار زیبایی دارید خیلی لذت بردم موفق باشید

scorpion_man
دوشنبه 19 آذر 1386, 17:20 عصر
فکر نمیکنم ربطی داشته باشه
کار case (تا جایی که من میدونم) تغییر نتیجه بر اساس شروطی که ما میذاریم هست. مثلا اگر بخوایم فیلد ماه رو سلکت کنیم و میخوایم به جایی که مقدار واقعی فیلد ماه (که اعداد هست) به ما برگردونده بشه، نام ماهها برگردونده بشه، میتونیم از case استفاده کنیم. طبق مثالی که اینجا (http://mysql-tips.blogspot.com/2005/04/mysql-select-case-example.html) زده.
و این هم منبع (http://dev.mysql.com/doc/refman/5.0/en/control-flow-functions.html#operator_case) برای معلومات دقیق در مورد select case.


راستش من که راهی پیدا نکردم.
در هر صورت، اگر جای شما بودم از چند تا کوئری استفاده می کردم.
با تشکر از دوست عزیز سید محسن حائری (طبیب زاده)
البته من اومدم query ها رو طبقه بندی کردم و هر طبقه رو با یه query جدا نوشتم و الان کار میکنه ولی واقعا این یه شرطی هست که خیلی نیاز میشه فکر میکنم sql باید یه ترفندی خاص داشته باشه و من دنبال اونم سایت my sql رو زیرو رو کردم ولی فعلا چیزی پیدا نکردم

tabib_m
دوشنبه 19 آذر 1386, 19:13 عصر
ولی واقعا این یه شرطی هست که خیلی نیاز میشه فکر میکنم sql باید یه ترفندی خاص داشته باشه و من دنبال اونم سایت my sql رو زیرو رو کردم ولی فعلا چیزی پیدا نکردم
قبول دارم
خود من هم یه بار میخواستم همین کار رو بکنم و سایت mysql رو هم زیر رو رو کردم و ... :)
ولی خوب به نتیجه نرسیدم و مجبور شدم از چند تا کوئری استفاده کنم.

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

خلاصه اگر چیزی پیدا کردی، ممنون میشم که اینجا هم بذاری که ما هم استفاده کنیم :)

ممنون
موفق باشید.

scorpion_man
دوشنبه 19 آذر 1386, 23:38 عصر
قبول دارم
خود من هم یه بار میخواستم همین کار رو بکنم و سایت mysql رو هم زیر رو رو کردم و ... :)
ولی خوب به نتیجه نرسیدم و مجبور شدم از چند تا کوئری استفاده کنم.

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

خلاصه اگر چیزی پیدا کردی، ممنون میشم که اینجا هم بذاری که ما هم استفاده کنیم :)

ممنون
موفق باشید.
سلام به همه دوستان
حتما عزیز هرچی پیدا کنم اول اینجا میزارم
آره همین مرچ کردن چندتا result خیلی خوبه و به نتیجه میرسونه
البته یه کاره دیگه هم میشه کرد داشتم بهش فکر میکردم اما امتحانش نکردم
میشه یه store_procedur نوشت فرضا با سه تا select و query ها رو طبقه بندی کرده و گذاشت تو هر کدوم از select ها بعد تو داخل همون procedure یه شرط ایجاد کرد و گفت مثلا اگه نتیجه شرط اول مثلا 3 تا بود برو به شرط دوم اگه نتیجه شرط دوم مثلا 4 تا بود برو بقیشو با شرط سوم پر کن و نتیجه رو export کن من فکر میکنم این جواب بده البته اون کد دوست عزیزم خیلی جالب بود و میشه بیشتر بهش فکر کرد میشه یه فیلد مجازی به نتایج اضافه کرد
و با یافتن هر شرط اولویت اون شرط و بهش اضافه کرد بعدش یه sort کرد و نتیجه رو export کرد اینم جواب میده یکی از این دو راه حتما جواب میده ولی باید دید کدوم سرعتش بهتره

oxygenws
سه شنبه 20 آذر 1386, 20:17 عصر
از union استفاده کن! (البته اگه منظور سوالت رو درست فهمیده باشم!!)

scorpion_man
سه شنبه 20 آذر 1386, 23:50 عصر
از union استفاده کن! (البته اگه منظور سوالت رو درست فهمیده باشم!!)
با تشکر از دوست عزیز
بسیار عالی بود آب در کوزه و ما تشنه لبان میگردیم
درسته با اون کاری که من می خواستم انجام بدم کمی متفاوت هست چون کار من یه حالت شرطی داره یعنی اگه فرض بر مثال نتیجه شرط اول کمتر از 10 تا شد بره شرط 2 رو بررسی کنه ولی بازم این دستورم خیلی به درد میخوره و تا حدود زیادی کارمونو را میندازه
با اجازه دوست عزیز 2 لینک مربوطه رو هم اینجا میذارم تا دوستای دیگه search نکنن
http://www.mysql.com/search/?q=union&charset=&x=11&y=6
http://www.mysql.com/news-and-events/newsletter/2002-09/a0000000060.html
تو لینک دوم مرتب سازی بر اساس تصادفی هم گذاشته شده که خیلی جالب بود دوستانی که مایل هستند برن ببینن
بازم تشکر از دوست عزیز از جواب مختصر و کاملشون

oxygenws
سه شنبه 20 آذر 1386, 23:59 عصر
درسته با اون کاری که من می خواستم انجام بدم کمی متفاوت هست چون کار من یه حالت شرطی داره یعنی اگه فرض بر مثال نتیجه شرط اول کمتر از 10 تا شد بره شرط 2 رو بررسی کنه ولی بازم این دستورم خیلی به درد میخوره و تا حدود زیادی کارمونو را میندازه
اگر باز هم تناقضاتش رو با چیزی که می خوای بگی و بیشتر شرح بدی، شاید بشه راه حلی پیدا کرد.


تو لینک دوم مرتب سازی بر اساس تصادفی هم گذاشته شده که خیلی جالب بود دوستانی که مایل هستند برن ببینن
ظاهرا تازه با MySQL آشنا شدی، پایگاه دادهء خیلی خوب و راحتی است :) به هر حال خوش اومدی.

tabib_m
چهارشنبه 21 آذر 1386, 16:54 عصر
با اجازه این لینک رو هم اضافه میکنم:
http://dev.mysql.com/doc/refman/5.1/en/union.html
-----------------------

از union استفاده کن!
خیلی خیلی ممنون، ایشالله خدا بهت mysql بهشتی بده :لبخند:
نتونستم به یک کلید تشکر ساده کفایت کنم :)

scorpion_man
چهارشنبه 21 آذر 1386, 18:05 عصر
ظاهرا تازه با MySQL آشنا شدی، پایگاه دادهء خیلی خوب و راحتی است :) به هر حال خوش اومدی.
آره 1 ماهی دارم با هاش کار میکنم قبلا با sql server کار میکردم
درست sql server خیلی قدرتمنده ولی تو web به درد نمی خوره چون نسبت به my sql خیلی گرونه و کار باهاشم تقریبا سختتر از my sql هست
با اینکه 1 ماهه با mysql کار میکنم ولی واقعا یه دیتابیس خوب و با قدرتی هست

یه سوالی هم از همین دوستایی که اینجا هستن همینجا می پرسم
من تا حالا نوع database ها رو از نوع myisam انتخاب کردم
البته فرقهای Myisam و innodb رو می دونم تا حالا 20 تا مقاله خوندم
ولی از لحاظ تجربی یعنی دوستای با تجربه که اینجا حضور دارن تو web کدومش بهتر از اون یکی کار میکنه کلا می پرسم تنها جستجو و نوشتنو نمیگم فقط لطف کنید نظرتونو تجربی بگین
ممنون میشم

oxygenws
چهارشنبه 21 آذر 1386, 19:14 عصر
لطفا سوال مجزا در تاپیک مجزا و البته قبلش «جستجو» :)