Display posts by custom fields with $wpdb->get_results()
Example:
In this example I'm ordering the posts based on the custom field value (you can change that to whatever suits your needs).
This code has helped me in many projects.
$str = "
SELECT $wpdb->posts.*
FROM $wpdb->posts, $wpdb->postmeta
WHERE $wpdb->posts.ID = $wpdb->postmeta.post_id
AND $wpdb->postmeta.meta_key = 'custom-field-slug'
AND $wpdb->posts.post_status = 'publish'
AND $wpdb->posts.post_type = 'your_post_type'
AND $wpdb->postmeta.meta_value = 'desired_value'
ORDER BY $wpdb->postmeta.meta_value ASC
";
$result = $wpdb->get_results($str);
if ( $result ) {
foreach ( $result as $post ) {
setup_postdata ( $post );
// your code goes here
}
}