我有3个表 - 用户,项目和关系(每个用户有超过1个项目):
USERS:
user_id | user_name
1 | Alex
2 | John
3 | Louis
ITEMS:
item_id | item_name
1 | Item 1
2 | Item 2
3 | Item 3
关系:
item_id | user_id
1 | 1
2 | 1
1 | 2
3 | 2
2 | 3
3 | 3
3 | 1
等。
所以我需要一个查询,我可以让所有用户(这很容易)包含每个用户的所有项目(这更疯狂)。
因此,我需要这样的事情:
[1] => (
'name' => Alex,
'items' => (
[1] => (
'name' => 'item 1'
)
[2] => (
'name' => 'item 2'
)
)
)
[2] => (
'name' => John,
'items' => (
[1] => (
'name' => 'item 1'
)
[2] => (
'name' => 'item 3'
)
)
)
我一直在玩JOIN几个小时,但仍然无法进入。
感谢您的帮助!
答案 0 :(得分:1)
为了获得你想要的结果,你必须在PHP中对数据进行一些操作,因为MySQL不会返回多维数组。您可以使用联接来获取您之后的数据:
SELECT
users.user_name,
items.item_name
FROM users
LEFT JOIN relations
ON relations.user_id = users.user_id
LEFT JOIN items
ON relations.item_id = items.item_id
这应该会返回如下结果:
user_name | item_name
Alex Item 1
Alex Item 2
Alex Item 3
等。然后使用PHP将其分组:
$grouped = array();
foreach($your_database_results as $row) {
$username = $row['user_name'];
if(!array_key_exists($username, $grouped))
$grouped[$username] = array();
$grouped[$username][] = $row['item_name'];
}
然后你的print_r($grouped)
应该看起来与你的示例类似(我已经将名称用作数组键而不是第一个数组条目,其中包含以下值 - 很容易转换)。