باستخدام MySQL، كيف يمكنني تحديد نتيجة الاستعلام رتبة صف معين؟
سؤال
لقد أمضيت الكثير من الوقت اليوم في محاولة أشياء مختلفة، لكن لا يبدو أي منهم يعمل. ها هو وضعي، أود أن أكون قادرا على تحديد رتبة صف بناء على معرف هو من صف فرز خصيصا
على سبيل المثال، إذا كان الاستعلام الخاص بي شيء مثل:
SELECT id, name FROM people ORDER BY name ASC
مع نتائج مثل:
اسم الهوية 3 أندرو 1 بوب 5 جو 4 جون 2 ستيف
أود الحصول على رتبة (ما هو الصف الذي ينتهي به في النتائج) دون إرجاع جميع الصفوف واللحلقة رميها حتى أصل إلى واحد أريد (في PHP).
على سبيل المثال، أود تحديد "رتبة" ستيف "بحيث إرجاعها - في هذه الحالة - 5 (ليس هويته، ولكن" رتبة "اسمه في الاستعلام أعلاه).
وبالمثل، أود أن أكون قادرا على تحديد رتبة أيا كان الصف يحتوي على معرف 1. لهذا المثال، أود إرجاع "رتبة" من 2 (لأن هذا في أي صف يؤدي هناك معرف 1) ولا شيء آخر.
لقد جوجد من جوجل بقدر ما أستطيع بنتائج متفاوتة ... إما أن تبطأ باستتاحات حقا للجداول الأكبر أو الاضطرار إلى إنشاء جميع أنواع الجداول المؤقتة ومتغيرات المستخدم (الأول الذي أود حقا تجنبه، هذا الأخير أفترض أنني أستطيع العيش مع).
أي مساعدة أو نظرة ثاقبة ستكون موضع تقدير كبير.
المحلول
من artfulsoftware.:
SELECT p1.id, p1.name, COUNT( p2.name ) AS Rank
FROM people p1
JOIN people p2
ON p1.name < p2.name
OR (
p1.name = p2.name
AND p1.id = p2.id
)
GROUP BY p1.id, p1.name
ORDER BY p1.name DESC , p1.id DESC
LIMIT 4,1
نصائح أخرى
شيء من هذا القبيل؟
SELECT Row, id, name
FROM (SELECT @row := @row + 1 AS Row, id, name
FROM people
ORDER BY name ASC)
WHERE Row = @SomeRowNumber
إذا كنت ترغب في الذهاب بالمعرف، فقط قم بتغيير جملة WHERE.
جرب هذا:
SELECT @rownum:=@rownum+1 `rank`, p.id, p.name
FROM people p, (SELECT @rownum:=0) r
ORDER BY name ASC
أحاول ذلك هذا الرمز ... قد يساعد الآخر في الحصول على النتيجة من المستخدمين وتحميل جدول الموافقة المسبقة عن علم ملف تعريف المستخدم والانضمام إليها من بعد حساب نقاط المستخدم والفرز عليها. في النهاية AM تحقق وإضافة رقم صف للتصنيف للمستخدمين ... artoy it. شكرا
set @row_num = 0;
set @calp =0;
select if(@calp=(@calp:=user.cal_points), @row_num, @row_num := @row_num + 1) as row_number,user.* from
(select user_skills.*,users.username,upload.file_name from user_skills join users on user_skills.user_id=users.id join upload on upload.upload_id=users.profile_pic order by user_skills.cal_points desc) as user
WHERE user.skill_name LIKE '%ph%'