• پایان فعالیت بخشهای انجمن: امکان ایجاد موضوع یا نوشته جدید برای عموم کاربران غیرفعال شده است

آیا چنین query ای ممکن است؟

wickietetsu

Registered User
تاریخ عضویت
29 می 2007
نوشته‌ها
198
لایک‌ها
3
سلام و خسته نباشید.

فرض کنید هر پست متعلق به گروهی خاص است.
ما می خواهیم 10 پست از هر گروه رو استخراج کنیم.
آیا با یک کوری چنین درخواستی ممکن است؟ یا باید برای هر گروه یک درخواست به دیتابیس داشته باشیم؟
ممنون از همه دوستانی که کمک خواهند کرد.
 

narcis.agh

کاربر تازه وارد
تاریخ عضویت
10 جولای 2014
نوشته‌ها
8
لایک‌ها
5
سن
35
پست های هر گروه در یک table جداگانه درج شده اند یا اینکه پست ها در یک table واحد ؟
اگه پست های هر گروه در table های جداگانه درج شده اند، آیا column های این table ها با یکدیگر یکسان هستن ؟
 
Last edited:

us12

Registered User
تاریخ عضویت
7 آگوست 2012
نوشته‌ها
406
لایک‌ها
410
نام ستون های تیبل های بگو تا ببینیم میشه کاری کرد یا خیر ;)
 

A.GH.N

Registered User
تاریخ عضویت
13 ژانویه 2007
نوشته‌ها
558
لایک‌ها
115
محل سکونت
USENET
بله. اگر جدول عضویت دانشجوها در درس‌ها به صورت زیر باشد:
کد:
desc course_membership;
+--------------+-----------------------+------+-----+---------+----------------+
| Field  | Type  | Null | Key | Default | Extra  |
+--------------+-----------------------+------+-----+---------+----------------+
| id  | int(10) unsigned  | NO  | PRI | NULL  | auto_increment |
| student  | int(10) unsigned  | NO  | MUL | NULL  |  |
| course  | tinyint(3) unsigned  | NO  | MUL | NULL  |  |
| gradeSum  | int(11)  | NO  |  | 0  |  |
| gradeAverage | tinyint(3)  | NO  |  | 0  |  |
+--------------+-----------------------+------+-----+---------+----------------+

می‌توانیم ده دانشجوی برتر هر درس را به این صورت بگیریم:
کد:
SELECT * FROM
(SELECT course, student, @std_in_crs_rnk:=CASE WHEN @cur_class = course THEN @std_in_crs_rnk+1 ELSE 0 END AS rank, @cur_class:=course
   FROM (SELECT @cur_class = -1) AS c, (SELECT @std_in_crs_rnk = -1) AS s, (SELECT * FROM course_membership ORDER BY course, gradeSum DESC) AS m) AS RST
WHERE RST.rank < 10

SQLServer و Oracle توابع و سینتکسی دارند که کار Window counting یا Partition counting، یعنی همین‌کاری که با متغیر cur_class انجام دادیم، را ممکن می‌کنند. SQLite هم سینتکسی برای ساخت حلقه دارد.
 

desiner_web

Registered User
تاریخ عضویت
24 نوامبر 2013
نوشته‌ها
534
لایک‌ها
97
اگر از دیتابیس و تیبل های یکپارچه استفاده کنید میشه .
 

Mr.Ansari

Registered User
تاریخ عضویت
20 نوامبر 2013
نوشته‌ها
1,591
لایک‌ها
1,996
محل سکونت
Qom - Tehran
در موردِ سوالت حرفی ندارم ولی آواتارت رو دیدم بازم منُ یادش انداختی آتیش گرفتم :(
 
بالا