[wp-hackers] meta query crashing database

Michael Van Winkle mike at mikevanwinkle.com
Wed Aug 31 23:19:04 UTC 2011


You'd probably do better with the MySQL IN operator, since each meta
query is a join (an expensive MySQL operation).

$query['meta_query'] = array(
 array(
   'key'=>'slt_issues',
   'value'=>array(112,113,114,115,115),
   'compare'=>'IN'
 )
);


On Wed, Aug 31, 2011 at 4:10 PM, Steve Taylor <steve at sltaylor.co.uk> wrote:
> I'm trying to build a query. I have a CPT, "campaigns", which is
> related to one or more "issues" (also a CPT).
>
> The relationship is managed by a custom meta box on the campaigns edit
> screen, you select the issues. It stores one or more entries in the
> postmeta table, each having the ID of the issue.
>
> What I need to do is, for the single campaign template, grab a list of
> "related" campaigns. So I need to grab all other campaigns that are
> related to any of the issues that the campaign being viewed is related
> to. The dump of the WP_Query arguments, for campaign ID 851, with a
> bunch of related issues, is this:
>
> Array
> (
>    [post_type] => campaign
>    [posts_per_page] => -1
>    [post__not_in] => Array
>        (
>            [0] => 851
>        )
>    [meta_query] => Array
>        (
>            [relation] => OR
>            [0] => Array
>                (
>                    [key] => _slt_issues
>                    [value] => 185
>                )
>            [1] => Array
>                (
>                    [key] => _slt_issues
>                    [value] => 194
>                )
>            [2] => Array
>                (
>                    [key] => _slt_issues
>                    [value] => 193
>                )
>            [3] => Array
>                (
>                    [key] => _slt_issues
>                    [value] => 187
>                )
>            [4] => Array
>                (
>                    [key] => _slt_issues
>                    [value] => 191
>                )
>            [5] => Array
>                (
>                    [key] => _slt_issues
>                    [value] => 189
>                )
>            [6] => Array
>                (
>                    [key] => _slt_issues
>                    [value] => 186
>                )
>            [7] => Array
>                (
>                    [key] => _slt_issues
>                    [value] => 190
>                )
>            [8] => Array
>                (
>                    [key] => _slt_issues
>                    [value] => 188
>                )
>            [9] => Array
>                (
>                    [key] => _slt_issues
>                    [value] => 192
>                )
>        )
> )
>
> This crashes the database in quite a severe way, and I've bothered my
> sysadmin for a reboot one too many times now experimenting with it!
>
> Can anyone see anything obviously wrong? There's only ten or so
> campaigns in the system, and about the same amount of issues. Is it
> just the number of parts to the meta_query? Is it related to the fact
> that _slt_issues may have multiple entires in the postmeta table for
> the same campaign? Is there any feasible way of doing this query?
>
> Many thanks for any thoughts,
>
> Steve Taylor
> _______________________________________________
> wp-hackers mailing list
> wp-hackers at lists.automattic.com
> http://lists.automattic.com/mailman/listinfo/wp-hackers
>



-- 
Mike Van Winkle
708-289-3136
mike at mikevanwinkle.com
http://www.mikevanwinkle.com
http://www.twitter.com/mpvanwinkle
http://www.facebook.com/mpvanwinkle


"All excellent things are as difficult as they are rare." -Spinoza


More information about the wp-hackers mailing list