Как присоединиться к строке из одной таблицы с ключом и значением из другой таблицы - PullRequest
0 голосов
/ 18 февраля 2019

У меня есть две таблицы одна (Команды) с основной информацией о команде и другая (Teammeta) со всей дополнительной информацией, структурированной как ключи и значения.Я хочу запрос, где teams.id соответствует teammeta.team_id и выводит результат в виде ключей и значений, заданных в желаемом результате.

TABLE: Команды

| id | Name       |
|----|------------|
| 1  | Glagiators |
| 2  | Sultans    |

ТАБЛИЦА: Teammeta

| tmeta_id | team_id | meta_key | meta_value |
|----------|---------|----------|------------|
| 1        | 1       | player1  | Joe        |
| 2        | 1       | player2  | Mark       |
| 3        | 2       | player1  | Smith      |
| 4        | 2       | player2  | Drake      |

ТАБЛИЦА: Желаемый результат

Array
(
    [0] => stdClass Object
        (
            [Name] => Glagiators 
            [player1] => Joe
            [player2] => Mark
        )
    [1] => stdClass Object
        (
            [Name] => Sultans
            [player1] => Smith
            [player2] => Drake
        )
)

Ответы [ 2 ]

0 голосов
/ 18 февраля 2019
SELECT Teams.Name, Teammeta.meta_key, Teammeta.meta_value FROM Teams INNER JOIN Teammeta ON Teams.id = Teammeta.team_id

вернет ваши результаты как

+-------------+-------------------+---------------------+
| Teams.Name  | Teammeta.meta_key | Teammeta.meta_value |
+-------------+-------------------+---------------------+
| Galligators | player1           | Joe                 |
| Galligators | player2           | Mark                |
| Sultans     | player1           | Smith               |
| Sultans     | player2           | Drake               |
+-------------+-------------------+---------------------+

После этого вам потребуется выполнить некоторый анализ, чтобы получить его в правильном формате.
Это также может помочь: https://stackoverflow.com/a/12808230/9919745
РЕДАКТИРОВАТЬ:
Код для преобразования данных

while($row = $result->fetch_assoc()){
  $name = $row['Teams.Name'];
  $data[$name][$row['Teammeta.meta_key']] = $data[$name][$row['Teammeta.meta_value']];
}
0 голосов
/ 18 февраля 2019

Извините, неправильно прочитал это в первый раз.Как насчет:

SELECT TeamsTable.Name, TeamMetaTableP1.meta_value AS player1, TeamMetaTableP2.meta_value AS player2
FROM teams AS TeamsTable
JOIN (SELECT * FROM teammeta) AS TeamMetaTableP1 ON TeamsTable.id = TeamMetaTableP1.team_id
JOIN (SELECT * FROM teammeta) AS TeamMetaTableP2 ON TeamsTable.id = TeamMetaTableP2.team_id
WHERE TeamMetaTableP1.meta_key = 'player1'
AND TeamMetaTableP2.meta_key = 'player2'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...