我正在编写一个复杂的MySQL查询,并使用多个LEFT JOIN
来组合来自多个不同表的数据。MySQL将某些结果分组到一个数组中
$public_query =
"SELECT * FROM `wsat_ib`
LEFT JOIN wp_usermeta ON wsat_ib.user_id = wp_usermeta.user_id
LEFT JOIN wpjb_resume ON wsat_ib.user_id = wpjb_resume.user_id
LEFT JOIN wpjb_field_value ON wpjb_resume.id=wpjb_field_value.job_id
LEFT JOIN wpjb_application ON wpjb_application.user_id = wsat_ib.user_id
WHERE wp_usermeta.meta_key = 'target_employer'
AND wp_usermeta.meta_value = 'public'
AND wpjb_resume.is_active =1
";
我的问题:表wp_usermeta可以有多个行对同一USER_ID。例如,用户(具有user_id = 5)可能在表wp_usermeta中具有多于一行,而字段meta_key是'target_employer'。如果不清楚,行可能看起来像这样。
id user_id meta_key meta_value
1 5 target_employer 13
2 5 target_employer 53
3 79 target_employer 21
我的问题:有什么办法,我可以从wp_usermeta返回每个匹配的行作为我的结果的一个对象的数组?所以var_dump()
会是这个样子:
object(stdClass)#2906 (14) {
["user_id"]=>
string(4) "5"
["firstname"]=>
string(6) "Bilbo"
["lastname"]=>
string(3) "Baggins"
...
["target_employer"]=>
array(2) {
[0]=>13,
[1]=>53
}
}
UPDATE: @bpanulla:这里是真正的(查询繁体字)...
"SELECT wsat_ib.user_id, wpjb_resume.firstname, wpjb_resume.lastname, wsat_ib.overall_score, wsat_ib.account_score, wsat_ib.econ_score, wsat_ib.math_score, wsat_ib.logic_score, wsat_ib.fsanaly_score, wsat_ib.corpval_score, wsat_ib.end_time, GROUP_CONCAT(wp_usermeta.meta_value) AS target_employers, wpjb_field_value.value AS school, wpjb_application.job_id
FROM `wsat_ib`
LEFT JOIN wp_usermeta ON wsat_ib.user_id = wp_usermeta.user_id
LEFT JOIN wpjb_resume ON wsat_ib.user_id = wpjb_resume.user_id
LEFT JOIN wpjb_field_value ON wpjb_resume.id=wpjb_field_value.job_id
LEFT JOIN wpjb_application ON wpjb_application.user_id = wsat_ib.user_id AND wpjb_application.field_id=3
WHERE (wp_usermeta.meta_key = 'target_employer'
AND wp_usermeta.meta_value = 'public'
AND wpjb_resume.is_active =1)
GROUP BY user_id
";
“有没有什么方法可以将wp_usermeta中的每个匹配行作为我的结果对象中的数组返回?”不,SQL要求结果单元是原子的。没有阵列。您可以使用user_id作为关键字将相同用户的值累加到数组中。 – user4035
@ user4035你能举一个例子说明你如何描述你所描述的?这听起来像我想要做的。 – emersonthis