If field names (phone and address) are fixed, you could use this trick to pivot your data:
SELECT
users.user_id,
users.user_name,
MAX(CASE WHEN field_id=1 THEN field_value END) AS Phone,
MAX(CASE WHEN field_id=2 THEN field_value END) AS Address
FROM
users INNER JOIN field_values
ON users.user_id = field_values.user_id
GROUP BY
users.user_id,
users.user_name
but if your values are not fixed, you need to use a dynamic query:
SELECT
CONCAT(
'SELECT users.user_id,users.username,',
GROUP_CONCAT(CONCAT('MAX(CASE WHEN field_id=', field_id, ' THEN field_value END) AS `', field_name, '`')),
' FROM users INNER JOIN field_values ON users.user_id = field_values.user_id',
' GROUP BY users.user_id, users.username')
FROM `fields` INTO @sql;
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
Please see fiddle here.