[wp-hackers] Sorting queries by values in custom array?
Mike Schinkel
mikeschinkel at newclarity.net
Thu Aug 19 15:35:24 UTC 2010
I was working on almost this exact problem yesterday.
How many total cities do you have?
-Mike
Sent from my iPad
On Aug 19, 2010, at 11:25 AM, Nathaniel Taintor <goldenapplesdesign at gmail.com> wrote:
> Hi all,
>
> I'm working on a project that's basically a craigslist clone. Visitors
> choose their city on first visiting the site, which is stored in a cookie.
> On browsing the site, they see posts from their own city first, then from
> other cities, sorted by proximity.
>
> I have 'City' set up as a custom post type, with custom fields for latitude
> and longitude. This post type is mirrored in a custom taxonomy, kind of the
> same way Mike S. was talking about recently on the list. My problem is in
> figuring out an efficient way of generating the queries to show posts. As it
> is now, my "find nearby cities" looks like this:
>
> function sort_nearest_cities() {
> global $wpdb;
> $thiscity = $wpdb->get_var("SELECT id FROM wp_posts WHERE
> post_title='".BCD_CITY."'"); // BCD_CITY is the value of the cookie
> $thislat = get_post_meta($thiscity,'lat',true);
> $thislon = get_post_meta($thiscity,'lon',true);
> $othercities = $wpdb->get_results("SELECT `ID`,`post_title` FROM
> `wp_posts` WHERE `post_type`='city'",ARRAY_A);
> $othercities_sorted = array();
> foreach ($othercities as $othercity) {
> if ($othercity['post_title'] != BCD_CITY) {
> $otherlat=get_post_meta($othercity['ID'],'lat',true);
> $otherlon=get_post_meta($othercity['ID'],'lon',true);
> $othercities_sorted[$othercity['post_title']] = (int) sqrt(
> pow((69.1*($otherlat-$thislat)),2) +
> pow((69.1*($otherlon-$thislon)*cos($thislat/57.3)),2) ) ;
> }
> }
> asort ($othercities_sorted);
> return array_keys($othercities_sorted);
> }
>
> and then I loop through each of the results returned with a get_posts query
> for each. It works, but its a stupid brute-force approach that won't scale
> well at all.
>
> What I'd like to do, given an array of nearby cities sorted, is somehow pass
> that to the get_posts query as a sort order field. But I'm drawing a
> complete blank. Is there a smart way of doing this? Maybe hooking into
> posts_where or posts_join?
>
> Sorry if this is outside the scope of this list.
>
> Thanks,
> Than
> _______________________________________________
> wp-hackers mailing list
> wp-hackers at lists.automattic.com
> http://lists.automattic.com/mailman/listinfo/wp-hackers
More information about the wp-hackers
mailing list