View Full Version : قرار دادن شماره ردیف به ازای هر رکورد
php_love
دوشنبه 20 شهریور 1391, 20:20 عصر
سلام و خسته نباشید
دوستان من یه دستور مای اس کیو ال دارم می خواستم تو خروجیش یه ردیف هم خورده بشه مثلا این
نام امتیاز
یحیی 200
حسین 180
علی 300
بشه
ردیف نام امتیاز
1 یحیی 200
2 حسین 180
3 علی 300
دستوری که نوشتن اینه
Select SUM(Point) as Point From User group by User_Name order by Id
miladamirzadeh
دوشنبه 20 شهریور 1391, 20:38 عصر
دقت کن. شما باید یک جدول داشته باشی که آی دی و لیست کاربران داخل اون باشه. یه جدول هم داشته باشی که امتیازها رو در بر داشته باشه. اگر فرض کنیم اسم جداولت Users و Points باشه کوئری تو به شکل زیر خواهد بود:
SELECT SUM(`Point`) `Point`,`Points`.`Id`,`User_Name` FROM `Points`,`Users`
WHERE `Users`.`Id`=`Points`.`Id`
GROUP BY `Points`.`Id`;
php_love
دوشنبه 20 شهریور 1391, 20:59 عصر
دوست عزیز شما درست میگید
اصلا بی خیال کوئری . فقط بهم بگید من تو دستور مای اس کیو ال چطور میتونم شماره ردیف بزنم . طبق همون مثالی که بالا زدم .
SELECT itemID, COUNT(*) as ordercount
FROM orders
GROUP BY itemID ORDER BY itemID DESC;
این
+------+--------+------------+
|itemID | ordercount |
+------+--------+------------+
| 3459 | 1 |
| 3432 | 2 |
| 693 | 1 |
| 450 | 1 |
| 388 | 3 |
+------+--------+------------+
بشه
+------+--------+------------+
| R | itemID | ordercount |
+------+--------+------------+
| 1 | 3459 | 1 |
| 2 | 3432 | 2 |
| 3 | 693 | 1 |
| 4 | 450 | 1 |
| 5 | 388 | 3 |
+------+--------+------------+
سعید صابری
دوشنبه 20 شهریور 1391, 23:00 عصر
SET @row:=0;
SELECT @row:=@row + 1,... FROM
php_love
دوشنبه 20 شهریور 1391, 23:10 عصر
دوست عزیز
این کدی که گذاشتی ردیف واقعی رکورد در جدول رو نشون میده . فرض کن کابری بالاترین امتیاز رو داره ولی در رکورد 210 قرار گرفته , این کدی که گذاشته شماره 210 رو بر می گردونه , تو کوتری که من نوشتم ابتدا اومدم امتیاز تمام کاربران رو محاسبه کردم و بعد با دستور order by بر اساس بالاترین امتیاز رکوردها مرتب میشه , خوب همین کاربری که الان مثالش رو زدیم میاد تو رکورد 1 قرار میگیره و من می خوام که کنارش یک ستون دیگه اضافه بشه و بر اساس لیست مرتب شده ردیف بخوره .
php_love
سه شنبه 21 شهریور 1391, 01:46 صبح
دوستان این تاپیک نمی خواد به نتیجه برسه !!!
miladamirzadeh
سه شنبه 21 شهریور 1391, 13:20 عصر
آخه من هم فکر می کنم سعید صابری درست می گه.
php_love
سه شنبه 21 شهریور 1391, 14:14 عصر
دوست عزیز خروجی کوئری زیر :
SET @row:=0;
SELECT *,(SELECT @row:=@row + 1) as R
FROM users_table
ORDER BY Score DESC
میشه این :
+------+--------+
R |Score | User
+------+--------+
115 | 3459 | 117
5 | 3432 | 85
81 | 693 | 70
32 | 450 | 215
43 | 388 | 300
+------+--------+
من می خوام بشه این :
+------+--------+
R |Score | User |
+------+--------+
1 | 3459 | 117 |
2 | 3432 | 85 |
3 | 693 | 70 |
4 | 450 | 215 |
5 | 388 | 300 |
+------+--------+
به شماره ردیف دقت کنید
سعید صابری
سه شنبه 21 شهریور 1391, 15:17 عصر
من هم هر جور استفاده می کنم درسته.فکر کنم اشکال کارتون جای دیگه است عقلا هم حساب کنی می بینی که درسته
چون به هر ردیف یکی اضاف می کنه دلیلی نداره اینجوری نمایش بده.@row هنگام نمایش حساب میشه نباید اینجوری حساب کنه!
php_love
سه شنبه 21 شهریور 1391, 16:21 عصر
دوست عزیز فکر می کنم شما درست میگید
اشکال کار اینجاست که چون مسابقات در هفته های مختلف برگزار میشه . بنده مجبور شدم از دستور group by که بر اساس شماره کاربر مرتب میشه استفاده کنم . ذر واقع این دستوره که باعث شده اون اتفاق بیافته
select SUM(s.Point) as Point,r.UserId_Fk as User_Id
from user as u,rigist as r
u.Id = r.UserId_Fk and
group by r.UserId_Fk
order by Point DESC
اگه دستور @row رو تو این کوئری بزاری مشکل به وجود میاد اما اگر دستور group by برداشته بشه مشکلش حل میشه , راهه بهتری وجود نداره ؟؟؟
:اشتباه:
miladamirzadeh
سه شنبه 21 شهریور 1391, 18:13 عصر
می تونی یه View از Group By بسازی و بعد با جدول اسامی Join اش کنی؟
php_love
سه شنبه 21 شهریور 1391, 22:23 عصر
نه می تونی یه توضیح کامل بدی . ممنون:قلب:
miladamirzadeh
چهارشنبه 22 شهریور 1391, 11:23 صبح
یه زحمت بکش. یه دامپ از جداولی که باهاشون کار می کنی برامون بذار. ممنون. با داده های نمونه.
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.