In my database, I have table `wp_postmeta`, example: | meta_key | meta_value | post_id | --------------------------------- points | 12 | 23 points | 2 | 18 lorem | ipsum | 92 points | 8 | 15 I want to order table by `points` and get the row number based on `meta_value`. Basically a rank system, with highest number at the top. For example, ordering `points` by `meta_value`: | meta_key | meta_value | post_id | --------------------------------- points | 12 | 23 points | 8 | 15 points | 2 | 18 `post_id` with value `15` will be **rank 2**. What SQL query can I run to achieve this *with* optimisation in mind? What I've tried so far ---------------------- I have achieved this via query: $query=" SELECT post_id,FIND_IN_SET( post_id,(SELECT GROUP_CONCAT( post_id ORDER BY meta_value * 1 DESC) FROM $wpdb->postmeta WHERE meta_key ='points') ) AS `rank` FROM $wpdb->postmeta WHERE meta_key ='points' AND post_id = '".$post_id."' "; $result = $wpdb->get_row($query); $rank = $result->rank; Works fine. *However*, this query is very slow. How can I make this query faster?