[英]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.