I am trying to build a product comparison page. I have the following MySQL table. Think of item_id column as product_id
+---------+------------------+-------------------------+
| item_id | field_name       | field_value             |
+---------+------------------+-------------------------+
|       1 | Operating System | Windows 7               |
|       1 | Processor        | Core i3                 |
|       1 | Brand            | HP                      |
|       2 | Operating System | Windows 10              |
|       2 | Processor        | Core i7                 |
|       2 | Brand            | Dell                    |
+---------+------------------+-------------------------+
I am trying to get a result where i can compare values for Brand, Operating System and Processor for item1 (item_id=1) and item2 (item_id=2) side by side as a single row. The number of products to be compared (i.e:- columns) are a minimum of two and a maximum of four.
I have seen the answer found here -> MySQL pivot row into dynamic number of columns but the difference is my dynamic columns are based on the the value of item_id while the field_name values will be used on one column. The values of field_value will be added to the dynamic columns based on item_id. Based on the answer, I tried the following case based statement but it created some unnecessary null values
SELECT 
    field_name,
    CASE
        WHEN price_fid = 1 THEN field_value
    END AS item1,
    CASE
        WHEN price_fid = 2 THEN field_value
    END AS item2
FROM
    custom_fields;
Result:
+------------------+-----------+-------------------------+
| field_name       | item1     | item2                   |
+------------------+-----------+-------------------------+
| Operating System | Windows 7 | NULL                    |
| Processor        | Core i3   | NULL                    |
| Brand            | HP        | NULL                    |
| Operating System | NULL      | Windows 10              |
| Processor        | NULL      | Core i7                 |
| Brand            | NULL      | Dell                    |
+------------------+-----------+-------------------------+
As you can see the Brand, Operating System and processor are found twice in the field_name column and there are null values for both item1 and item2. I also took a look at the following answers -> Pivot values on column based on grouped columns in SQL but there still is a problem with either null values or repeated field_names.
What i am trying to get is the value for both items (products) on a single row. Here is the result i am looking for.
+------------------+-----------+------------+
| field_name       | item1     | item2      |
+------------------+-----------+------------+
| Brand            | HP        | Dell       |
| Operating System | Windows 7 | Windows 10 |
| Processor        | Core i3   | Core i7    |
+------------------+-----------+------------+
Is it possible to run a MySQL query to get output like the above? If so, is there a way to easily add a third and fourth item_id (i.e:- columns) to it. I am looking for a case based or other type of query which i can implement easily call from PHP. If it's not possible via a standard mysql query, i still wouldn't mind a t-sql statement or procedure. Thanks
 
     
    