這是我的complex (atleast i think it is complex)
條件從匹配時間表中查找競爭對手並與事件相關。CakePHP多JOIN查找所有條件問題
現在我有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轉儲:
選擇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
FROM 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
)LEFT JOIN countries
AS Country
ON(Competitor
。country_id
= Country
。id
)LEFT JOIN states
AS State
ON(Competitor
。state_id
= State
。id
)LEFT JOIN degrees
AS Degree
ON(Competitor
。degree_id
= Degree
。id
)LEFT JOIN schools
AS School
ON(Competitor
。school_id
= School
。id
)LEFT JOIN transactions
AS Transaction
ON(Transaction
。 competitor_id
= Competitor
。 id
)其中Competitor
。 status
= 1 AND Competitor
。 payment_completed
= 1 AND Competitor
。 weightgroup_id
= 13 AND Competitor
。 rank_id
= 11 AND Competitor
。 degree_id
='0'和Competitor
。 gender
='女'GROUP BY Competitor
。 id
這裏是從左邊上面的查詢的連接條件參考:
left JOIN event_competitors AS EventCompetitor ON (EventCompetitor.event_id = 3 AND EventCompetitor.is_black = 0 AND EventCompetitor.is_adult = 0)
請格式化您的代碼,並從調試中複製SQL轉儲。 – Headshota 2011-04-08 08:11:41
當然,給我幾分鐘... – 2011-04-08 08:57:35