pagination on data fetched using SQL query

<?php
global $wpdb;
// QUERY HERE TO COUNT TOTAL RECORDS FOR PAGINATION 
$total = $wpdb->get_var("SELECT COUNT(*) FROM (SELECT * FROM muslim LIMIT 0,431) AS a");
$post_per_page = 10;
$page = isset( $_GET['cpage'] ) ? abs( (int) $_GET['cpage'] ) : 1;
$offset = ( $page * $post_per_page ) - $post_per_page;

// QUERY HERE TO GET OUR RESULTS 
$results = $wpdb->get_results("SELECT hadith_no, content FROM muslim LIMIT $post_per_page OFFSET $offset");

// PHP FOR EACH LOOP HERE TO DISPLAY OUR RESULTS
foreach($results as $row)
 {
 echo $row->hadith_no."  ".$row->content."<br>"; 
 }
// END OUR FOR EACH LOOP

?>
<?php 
echo '<div class="pagination">';
echo paginate_links( array(
'base' => add_query_arg( 'cpage', '%#%' ),
'format' => '',
'prev_text' => __('&laquo;'),
'next_text' => __('&raquo;'),
'total' => ceil($total / $post_per_page),
'current' => $page,
'type' => 'list'
));
echo '</div>';
?>

Just edit the sql query according to your needs and this will work sweetly.