我对数据库很陌生,所以我的问题是:
假设我们有两个表:用户和订单
是否可以(以及如何操作)在一个查询中列出所有用户的数据(名字和姓氏,生日等)和相关订单?所以结果应该是这样的:
|------------------------------|
| John Doe | Order 1 details |
| | Order 2 details |
| | Order 3 details |
|------------------------------|
| Janny Hoe | Order x details |
| | Order y details |
|------------------------------|
所以你明白了吗? table1中的每一行都有一个包含table2多行的字段?我听说MySQL没有返回多维数组,那么它是如何返回这样的呢?
非常感谢任何帮助!
修改
表结构可能是这样的:
TABLE users:
id | name
TABLE orders:
id | user_id | date_ordered | other unrelevant data...
我知道这对于连接是可行的,但是什么让我感到困惑的是它会返回什么? 将得到的字段顺序是包含订单行数据的数组,如$ result [0] ['orders'] [0] ['date_ordered']或类似的东西?
答案 0 :(得分:2)
进行LEFT连接(如果用户可能没有任何订单),然后根据用户ID将结果收集到一个数组中:
SELECT Users.id, Users.name, Order.detail
FROM Users
LEFT JOIN Order
ON Users.id= Order.user;
例如:
$userOrders = array();
$sql = 'SELECT Users.id, Users.name, Order.detail
FROM Users
LEFT JOIN Order
ON Users.id= Order.user';
foreach ($pdo->query($sql) as $row) {
$userOrders[$row['user_id']][] = $row;
}