Tribe__Repository::by_related_to_max( $by_meta_keys, $max, $keys = null, $values = null )
{@inheritdoc}
Source
File: src/Tribe/Repository.php
public function by_related_to_max( $by_meta_keys, $max, $keys = null, $values = null ) {
$max = $this->prepare_value( $max, '%d' );
/** @var wpdb $wpdb */
global $wpdb;
$join = '';
$and_where = '';
if ( ! empty( $keys ) || ! empty( $values ) ) {
$join = "\nJOIN {$wpdb->postmeta} pm2 ON pm1.post_id = pm2.post_id\n";
}
if ( ! empty( $keys ) ) {
$keys = $this->prepare_interval( $keys );
$and_where .= "\nAND pm2.meta_key IN {$keys}\n";
}
if ( ! empty( $values ) ) {
$values = $this->prepare_interval( $values );
$and_where .= "\nAND pm2.meta_value IN {$values}\n";
}
$by_meta_keys = $this->prepare_interval( $by_meta_keys );
$this->where_clause( "{$wpdb->posts}.ID IN (
SELECT pm1.meta_value
FROM {$wpdb->postmeta} pm1 {$join}
WHERE pm1.meta_key IN {$by_meta_keys} {$and_where}
GROUP BY( pm1.meta_value )
HAVING COUNT(DISTINCT pm1.post_id) <= {$max}
)" );
return $this;
}