باستخدام MySQL، كيف يمكنني تحديد نتيجة الاستعلام رتبة صف معين؟

StackOverflow https://stackoverflow.com/questions/1262448

  •  12-09-2019
  •  | 
  •  

سؤال

لقد أمضيت الكثير من الوقت اليوم في محاولة أشياء مختلفة، لكن لا يبدو أي منهم يعمل. ها هو وضعي، أود أن أكون قادرا على تحديد رتبة صف بناء على معرف هو من صف فرز خصيصا

على سبيل المثال، إذا كان الاستعلام الخاص بي شيء مثل:

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%'
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top