Sto scrivendo una query MySQL complessa con più LEFT JOIN
s per combinare i dati da diverse tabelle diverse.MySQL raggruppa determinati risultati in un array
$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
";
Il mio problema: La wp_usermeta tabella può avere più righe per lo stesso user_id. Ad esempio un utente (con user_id = 5) può avere più di una riga nella tabella wp_usermeta con il campo: meta_key che è 'target_employer'. Nel caso in cui non è chiaro, le righe potrebbero apparire come questo.
id user_id meta_key meta_value
1 5 target_employer 13
2 5 target_employer 53
3 79 target_employer 21
mia domanda: C'è un modo che io possa tornare ogni riga corrispondente da wp_usermeta come una matrice in uno dei miei oggetti risultato? Così il var_dump()
sarebbe simile a questa:
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: Ecco il vero e proprio (query non semplificata) ...
"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
";
"C'è un modo in cui posso restituire ogni riga corrispondente da wp_usermeta come una matrice in uno dei miei oggetti risultato?" No, SQL richiede che le celle dei risultati siano atomiche. Nessun array. È possibile accumulare i valori per lo stesso utente in una matrice, utilizzando user_id come chiave. – user4035
@ user4035 Puoi fare un esempio su come fare ciò che hai descritto? Sembra quello che voglio fare. – emersonthis