Automattic\WooCommerce\Internal\ProductAttributesLookup

TaxQuery::get_sql_for_clause │ public │ WC 10.9.0

Generates SQL JOIN and WHERE clauses for a "first-order" query clause.

Метод класса: TaxQuery{}

Хуков нет.

Возвращает

array. Array containing JOIN and WHERE SQL clauses to append to a first-order query.

Использование

$TaxQuery = new TaxQuery();
$TaxQuery->get_sql_for_clause( $clause, $parent_query );
$clause(массив) (обязательный) (передается по ссылке — &)
Query clause (passed by reference).
$parent_query(массив) (обязательный)
Parent query array.

Список изменений

С версии 10.9.0 Введена.

Код TaxQuery::get_sql_for_clause() WC 11.2.2

public function get_sql_for_clause( &$clause, $parent_query ) {
	global $wpdb;

	// Optimization note: targeting only the 'IN' operator, where the default 'LEFT JOIN' causes performance issues.
	if ( 'IN' !== $clause['operator'] ) {
		return parent::get_sql_for_clause( $clause, $parent_query );
	}

	// Call the parent method so it does necessary cleanup with its private APIs.
	$fallback = parent::get_sql_for_clause( $clause, $parent_query );
	if ( array( '' ) === $fallback['join'] && array( '0 = 1' ) === $fallback['where'] ) {
		return $fallback;
	}

	// Optimization note: 'fan-out LEFT JOIN' -> 'pre-materialized subquery' transition for better SQL performance.
	$terms = implode( ',', array_map( 'absint', $clause['terms'] ) );
	return array(
		'join'  => array( '' ),
		'where' => array( "$this->primary_table.$this->primary_id_column IN ( SELECT object_id FROM $wpdb->term_relationships WHERE term_taxonomy_id IN ( $terms ) )" ),
	);
}