There is a way to do this in sql, its ugly but it will work.
To get the address as 1 row:
SELECT user_id, GROUP_CONCAT(a) AS Address, GROUP_CONCAT(c) AS City, GROUP_CONCAT(s) AS State, GROUP_CONCAT(z) AS ZIP
FROM
(SELECT user_id, value AS a, NULL AS c, NULL AS s, NULL AS z
FROM field_values WHERE field_id = 45
UNION
SELECT user_id, NULL, value, NULL, NULL
FROM field_values WHERE field_id = 46
UNION
SELECT user_id, NULL, NULL, value, NULL
FROM field_values WHERE field_id = 47
UNION
SELECT user_id, NULL, NULL, NULL, value
FROM field_values WHERE field_id = 48)
AS q
GROUP BY user_id
That will return the address for each user_id, integrate it with your other tables for the other data.