value . ':' . $id; if ( isset( self::$memo[ $key ] ) ) { return self::$memo[ $key ]; } global $wpdb; $links = Db::table( 'faq_links' ); $faqs = Db::table( 'faqs' ); $sql = SqlPart::of( '( ' )->add( SqlPart::of( 'SELECT f.*, l.position AS l_pos, l.kind AS l_kind, l.ref_id AS l_ref FROM %i l JOIN %i f ON f.id = l.ref_id WHERE l.target_type = %d AND l.target_id = %d AND l.kind = %d AND f.state = %d', $links, $faqs, $target->value, $id, FaqLinks::KIND_FAQ, Faq::PUBLISHED ) )->add( ' ) UNION ALL ( ' )->add( SqlPart::of( 'SELECT f.*, l.position, l.kind, l.ref_id FROM %i l JOIN %i g ON g.id = l.ref_id AND g.state = %d JOIN %i f ON f.group_id = g.id AND f.state = %d WHERE l.target_type = %d AND l.target_id = %d AND l.kind = %d', $links, Db::table( 'faq_groups' ), FaqGroup::ACTIVE, $faqs, Faq::PUBLISHED, $target->value, $id, FaqLinks::KIND_GROUP ) )->add( ' ) ORDER BY l_pos, l_kind, l_ref, position, id' ); $out = array(); $seen = array(); foreach ( Db::rows( $sql ) as $row ) { $faq = Faq::from_row( $row ); if ( ! isset( $seen[ $faq->id ] ) ) { $seen[ $faq->id ] = true; $out[] = $faq; } } self::$memo[ $key ] = $out; return $out; } public static function forget(): void { self::$memo = array(); } }