Вот мое complex (atleast i think it is complex)
условие поиска конкурентов по расписанию матчей и по событиям.
Теперь у меня есть HTBTM
отношения с таблицей events_competitors
, где несколько событий имеют несколько записей пользователей-конкурентов.
Здесь я использовал условие joins
для соединения и связывания events
с competitors
, которое отлично работает, но я также хочу применить дополнительные условия для is_black
(проверка на черный пояс) и is_adult
(проверка для взрослого человека)
'EventCompetitor.is_black' => 0,
'EventCompetitor.is_adult' => 0,
Здесь я хочу, чтобы только те участники, у которых есть оба условия (is_black / is_adult) 0, означают неприемлемые, но не применяют одно и то же, что приводит к неверным результатам конкурентов.
Ниже приведено мое условие поиска:
$matchdivisions = $this->Competitor->find("all" ,
array(
'conditions' =>
array(
'Competitor.status' => 1,
'Competitor.payment_completed' => 1,
'Competitor.weightgroup_id' => $current_matchsc['Matchschedule']['weightgroup_id'],
'Competitor.rank_id' => $current_matchsc['Matchschedule']['rank_id'],
'Competitor.degree_id' => $current_matchsc['Matchschedule']['degree_id'],
'Competitor.gender' => $current_matchsc['Matchschedule']['gender'],
),
'joins' =>
array(
array(
'table' => 'event_competitors',
'alias' => 'EventCompetitor',
'type' => 'left',
'conditions'=> array(
"AND" =>array(
'EventCompetitor.event_id = '.$current_matchsc['Event']['id'],
'EventCompetitor.is_black' => 0,
'EventCompetitor.is_adult' => 0,
)
),
)
),
'group' => 'Competitor.id'
)
);
Любая идея, как я могу применить эти вещи в условиях JOIN
, чтобы они применялись в результатах.
Спасибо!
Ниже приведен дамп SQL для вашей ссылки:
SELECT Competitor
. id
, Competitor
. first_name
, Competitor
. last_name
, Competitor
. parent_name
, Competitor
. gender
, Competitor
. date_of_birth
, Competitor
. email_address
, Competitor
. weight
, Competitor
. weightgroup_id
, Competitor
. height
, Competitor
. rank_id
, Competitor
. degree_id
, Competitor
. photo
, Competitor
. school_id
, Competitor
. years_of_experience
, Competitor
. age
, Competitor
. tournament_id
, Competitor
. total_registration_fees
, Competitor
. address1
, Competitor
. address2
, Competitor
. city
, Competitor
. zip_code
, Competitor
. country_id
, Competitor
. state_id
, Competitor
. phone_number
, Competitor
. mobile_number
, Competitor
. payment_mode
, Competitor
. email_sent
, Competitor
. payment_completed
, Competitor
. status
, Competitor
. created
, Competitor
. modified
, Rank
. id
, Rank
. name
, Rank
. status
, Rank
. created
, Rank
. modified
, Tournament
. id
, Tournament
. tournament_name
, Tournament
. tournament_type
, Tournament
. tournament_date
, Tournament
. venue_name
, Tournament
. address1
, Tournament
. address2
, Tournament
. city
, Tournament
. zip_code
, Tournament
. country_id
, Tournament
. state_id
, Tournament
. created
, Tournament
. modified
, Country
. id
, Country
. name
, Country
. status
, Country
. created
, Country
. modified
, State
. id
, State
. country_id
, State
. name
, State
. short_name
, State
. status
, State
. created
, State
. modified
, Degree
. id
, Degree
. rank_id
, Degree
. name
, Degree
. status
, Degree
. created
, School
. id
, School
. name
, School
. address1
, School
. address2
, School
. city
, School
. zip_code
, School
. country_id
, School
. state_id
, School
. phone_number
, School
. owner_name
, School
. establishment_date
, School
. total_competitors
, School
. status
, School
. created
, School
. modified
, Transaction
. id
, Transaction
. competitor_id
, Transaction
. noncompetitor_id
, Transaction
. created
, Transaction
. modified
, Transaction
. mc_gross
, Transaction
. address_status
, Transaction
. payer_id
, Transaction
. address_street
, Transaction
. payment_date
, Transaction
. payment_status
, Transaction
. address_zip
, Transaction
. first_name
, Transaction
. address_country_code
, Transaction
. address_name
, Transaction
. custom
, Transaction
. payer_status
, Transaction
. address_country
, Transaction
. address_city
, Transaction
. payer_email
, Transaction
. verify_sign
, Transaction
. txn_id
, Transaction
. payment_type
, Transaction
. last_name
, Transaction
. address_state
, Transaction
. receiver_email
, Transaction
. item_name
, Transaction
. mc_currency
, Transaction
. item_number
, Transaction
. residence_country
, Transaction
. transaction_subject
, Transaction
. payment_gross
, Transaction
. shipping
, Transaction
. test_ipn
, Transaction
. pending_reason
ОТ competitors
AS Competitor
оставлено JOIN. Event_competitors AS EventCompetitor
ON (EventCompetitor
. event_id
= 3 AND EventCompetitor
. is_black
= 0 AND EventCompetitor
. is_adult
= 0) LEFT JOIN ranks
AS Rank
ON (Competitor
. rank_id
= Rank
. id
) LEFT JOIN tournaments
AS Tournament
ON (Competitor
. tournament_id
= Tournament
. id
) ЛЕВОЕ СОЕДИНЕНИЕ countries
КАК Country
ВКЛ (Competitor
. country_id
= Country
. id
) ЛЕВОЕ СОЕДИНЕНИЕ states
КАК State
ВКЛ (Competitor
. state_id
= State
. id
) ЛЕВОЕ СОЕДИНЕНИЕ degrees
КАК Degree
ВКЛ (Competitor
. degree_id
= Degree
. id
) ЛЕВОЕ СОЕДИНЕНИЕ schools
КАК School
ВКЛ (Competitor
. school_id
= School
. id
) ВЛЕВО СОЕДИНЯЕТСЯ transactions
КАК Transaction
ВКЛ (Transaction
. competitor_id
= Competitor
. id
) ГДЕ Competitor
. status
= 1 И Competitor
. payment_completed
= 1 И Competitor
. weightgroup_id
= 13 И Competitor
. rank_id
= 11 И Competitor
. degree_id
= '0' И Competitor
. gender
= 'Женский' GROUP BY Competitor
. id
Вот условие левого соединения сверху для запроса ref:
left JOIN event_competitors AS EventCompetitor ON (EventCompetitor.event_id = 3 AND EventCompetitor.is_black = 0 AND EventCompetitor.is_adult = 0)