I have two tables with the following structure:
|=================|
| posts           |
|=================|
| ID | Title      |
|-----------------|
| 1  | Title #1   |
|-----------------|
| 2  | Title #1   |
|-----------------|
| 3  | Title #1   |
|-----------------|
| 4  | Title #1   |
|-----------------|
| 5  | Title #1   |
|-----------------|
and
|==========================================|
| meta                                     |
|==========================================|
| id | post_id | meta_key   | meta_value   |
|------------------------------------------|
| 1  | 1       | key_one    | value for #1 |
|------------------------------------------|
| 2  | 1       | key_two    | value for #1 |
|------------------------------------------|
| 3  | 1       | key_three  | value for #1 |
|------------------------------------------|
| 4  | 2       | key_one    | value for #2 |
|------------------------------------------|
| 5  | 2       | key_three  | value for #2 |
|------------------------------------------|
| 6  | 3       | key_one    | value for #3 |
|------------------------------------------|
| 7  | 3       | key_three  | value for #3 |
|------------------------------------------|
and I need to get the following single result:
|----------------------------------------------------------------|
| ID | Post Title | Meta Key One | Meta Key Two | Meta Key Three |
|----------------------------------------------------------------|
| 1  | Title #1   | value for #1 | value for #1 | value for #1   |
|----------------------------------------------------------------|
| 2  | Title #2   | value for #2 | null         | value for #2   |
|----------------------------------------------------------------|
| 3  | Title #3   | value for #3 | null         | value for #3   |
|----------------------------------------------------------------|
But I don't know how to do this.
The SQL Query I have build until now is this:
SELECT
   `p`.`ID` AS `ID`,
   `p`.`Title` AS `Post Title`,
   `mt1`.`meta_value` AS `Meta Key One`,
   `mt2`.`meta_value` AS `Meta Key One`,
FROM
    posts AS `p`
    LEFT JOIN `meta` AS `mt1` ON ( `p`.`ID` = `mt1`.`post_id` )
    LEFT JOIN `meta` AS `mt2` ON ( `p`.`ID` = `mt2`.`post_id` )
WHERE
    1 = 1
    AND `mt1`.`meta_key` = 'key_one'
    AND `mt2`.`meta_key` = 'key_three';
The problem is that if I add a third LEFT JOIN in meta table to use it later on in WHERE clause and say mt1.meta_key = 'key_two' I get only one record instead of three.
Does anyone know how can I achieve this with a single query ?
I don't know if that helps, but I have create an SQL Fiddle here : http://sqlfiddle.com/#!9/af591f/1
Note that the column names in fiddle doesn't meet the ones in my example, but the problem remains the same.
 
     
     
     
    