簡體   English   中英

如何將一個表的行與另一個表的鍵和值聯接

[英]How to JOIN row from one table with key and value from another table

我有2個表,一個(團隊)包含基本的團隊信息,另一個(團隊)包含所有其他信息,這些信息構造為鍵和值。 我想,其中一個查詢teams.id具有匹配teammeta.team_id和輸出結果在期望的結果給定的鍵和值的形式。

表格: 團隊

| 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
        )
)

抱歉,是第一次誤讀。 怎么樣:

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'
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']];
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM