从 MySQL 个链接表创建 PHP 二维数组
Create PHP two dimensional array from MySQL linked tables
我希望有人能帮我解决这个问题。
我有2个table:
课程
+------------+--------------+
| Field | Type |
+------------+--------------+
| id | int(11) |
| name | varchar(255) |
+------------+--------------+
文件
+------------+--------------+
| Field | Type |
+------------+--------------+
| id | int(11) |
| course_id | int(11) |
| name | varchar(255) |
+------------+--------------+
我想要的代码 return 是一个二维 PHP 数组,类似于:
Array
(
[0] => Array
(
[id] => 3
[name] => Digital image processing
[files] => Array
(
[0] => Array
(
[id] => 6
[name] => DIP-ch02-93-1.pdf
)
[1] => Array
(
[id] => 9
[name] => A_brief_introduction_to_matlab.pdf
)
)
)
[1] => Array
(
[id] => 1
[name] => Artificial intelligence
[files] => Array
(
[0] => Array
(
[id] => 12
[name] => DIP-ch02-93-1.pdf
)
[1] => Array
(
[id] => 1
[name] => AI-ch03-922.pdf
)
[2] => Array
(
[id] => 2
[name] => AI-ch04-932.pdf
)
)
)
)
我使用 php PDO。我有以下代码:
$conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
$stmt = $conn->prepare("SELECT c.id, c.name, f.id as fid, f.name as fname FROM courses c left outer join files f on c.id=f.course_id");
$stmt->execute();
// set the resulting array to associative
$result = $stmt->setFetchMode(PDO::FETCH_ASSOC);
$courses = $stmt->fetchAll();
print_r($courses);
但它 return 我这个数组:
Array
(
[0] => Array
(
[id] => 1
[name] => Artificial intelligence
[fid] => 1
[fname] => AI-ch03-922.pdf
)
[1] => Array
(
[id] => 1
[name] => Artificial intelligence
[fid] => 2
[fname] => AI-ch04-932.pdf
)
[4] => Array
(
[id] => 3
[name] => Digital image processing
[fid] => 6
[fname] => DIP-ch02-93-1.pdf
)
[5] => Array
(
[id] => 3
[name] => Digital image processing
[fid] => 9
[fname] => A_brief_introduction_to_matlab.pdf
)
[6] => Array
(
[id] => 1
[name] => Artificial intelligence
[fid] => 12
[fname] => DIP-ch02-93-1.pdf
)
)
我也有以下正确代码:
$conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
$stmt = $conn->prepare("SELECT id, name FROM courses");
$stmt->execute();
// set the resulting array to associative
$result = $stmt->setFetchMode(PDO::FETCH_ASSOC);
$courses = $stmt->fetchAll();
for($i = 0; $i < count($courses); $i++){
$stmt = $conn->prepare("SELECT id, name FROM files where course_id=".$courses[$i]['id']);
$stmt->execute();
// set the resulting array to associative
$result = $stmt->setFetchMode(PDO::FETCH_ASSOC);
$result = $stmt->fetchAll();
$courses[$i]['files'] = $result;
}
print_r($courses);
它 return 是正确的结果但是我想从我的代码中删除那个 for 循环。事实上,我想通过单个查询从 Mysql 中检索数据。
谁能帮帮我?
SELECT *
FROM files AS f
JOIN courses AS c ON c.id = f.course_id
WHERE course_id IN (Select id from courses)"
如果您没有课程条件,最后一行没有意义
只需在子选择中添加一个 WHERE。
您需要重新格式化数组。 PDO 查询 return 按行显示结果。
$conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
$stmt = $conn->prepare("SELECT c.id, c.name, f.id as fid, f.name as fname FROM courses c left outer join files f on c.id=f.course_id");
$stmt->execute();
// set the resulting array to associative
$result = $stmt->setFetchMode(PDO::FETCH_ASSOC);
$courses = $stmt->fetchAll();
$formattedcourses = array();
foreach($courses as $course){
$formattedcourses[$course['id']]['id'] = $course['id'];
$formattedcourses[$course['id']]['name'] = $course['name'];
$formattedcourses[$course['id']]['files'][] = array(
'id' => $course['fid'],
'name' => $course['fname']
);
}
我希望有人能帮我解决这个问题。
我有2个table:
课程
+------------+--------------+
| Field | Type |
+------------+--------------+
| id | int(11) |
| name | varchar(255) |
+------------+--------------+
文件
+------------+--------------+
| Field | Type |
+------------+--------------+
| id | int(11) |
| course_id | int(11) |
| name | varchar(255) |
+------------+--------------+
我想要的代码 return 是一个二维 PHP 数组,类似于:
Array
(
[0] => Array
(
[id] => 3
[name] => Digital image processing
[files] => Array
(
[0] => Array
(
[id] => 6
[name] => DIP-ch02-93-1.pdf
)
[1] => Array
(
[id] => 9
[name] => A_brief_introduction_to_matlab.pdf
)
)
)
[1] => Array
(
[id] => 1
[name] => Artificial intelligence
[files] => Array
(
[0] => Array
(
[id] => 12
[name] => DIP-ch02-93-1.pdf
)
[1] => Array
(
[id] => 1
[name] => AI-ch03-922.pdf
)
[2] => Array
(
[id] => 2
[name] => AI-ch04-932.pdf
)
)
)
)
我使用 php PDO。我有以下代码:
$conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
$stmt = $conn->prepare("SELECT c.id, c.name, f.id as fid, f.name as fname FROM courses c left outer join files f on c.id=f.course_id");
$stmt->execute();
// set the resulting array to associative
$result = $stmt->setFetchMode(PDO::FETCH_ASSOC);
$courses = $stmt->fetchAll();
print_r($courses);
但它 return 我这个数组:
Array
(
[0] => Array
(
[id] => 1
[name] => Artificial intelligence
[fid] => 1
[fname] => AI-ch03-922.pdf
)
[1] => Array
(
[id] => 1
[name] => Artificial intelligence
[fid] => 2
[fname] => AI-ch04-932.pdf
)
[4] => Array
(
[id] => 3
[name] => Digital image processing
[fid] => 6
[fname] => DIP-ch02-93-1.pdf
)
[5] => Array
(
[id] => 3
[name] => Digital image processing
[fid] => 9
[fname] => A_brief_introduction_to_matlab.pdf
)
[6] => Array
(
[id] => 1
[name] => Artificial intelligence
[fid] => 12
[fname] => DIP-ch02-93-1.pdf
)
)
我也有以下正确代码:
$conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
$stmt = $conn->prepare("SELECT id, name FROM courses");
$stmt->execute();
// set the resulting array to associative
$result = $stmt->setFetchMode(PDO::FETCH_ASSOC);
$courses = $stmt->fetchAll();
for($i = 0; $i < count($courses); $i++){
$stmt = $conn->prepare("SELECT id, name FROM files where course_id=".$courses[$i]['id']);
$stmt->execute();
// set the resulting array to associative
$result = $stmt->setFetchMode(PDO::FETCH_ASSOC);
$result = $stmt->fetchAll();
$courses[$i]['files'] = $result;
}
print_r($courses);
它 return 是正确的结果但是我想从我的代码中删除那个 for 循环。事实上,我想通过单个查询从 Mysql 中检索数据。
谁能帮帮我?
SELECT *
FROM files AS f
JOIN courses AS c ON c.id = f.course_id
WHERE course_id IN (Select id from courses)"
如果您没有课程条件,最后一行没有意义 只需在子选择中添加一个 WHERE。
您需要重新格式化数组。 PDO 查询 return 按行显示结果。
$conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
$stmt = $conn->prepare("SELECT c.id, c.name, f.id as fid, f.name as fname FROM courses c left outer join files f on c.id=f.course_id");
$stmt->execute();
// set the resulting array to associative
$result = $stmt->setFetchMode(PDO::FETCH_ASSOC);
$courses = $stmt->fetchAll();
$formattedcourses = array();
foreach($courses as $course){
$formattedcourses[$course['id']]['id'] = $course['id'];
$formattedcourses[$course['id']]['name'] = $course['name'];
$formattedcourses[$course['id']]['files'][] = array(
'id' => $course['fid'],
'name' => $course['fname']
);
}