我希望有人可以帮我解决这个问题。
我有2张桌子:
--resolve <host:port:address>
+------------+--------------+
| Field | Type |
+------------+--------------+
| id | int(11) |
| name | varchar(255) |
+------------+--------------+
我想要的代码返回一个二维PHP数组,如:
+------------+--------------+
| Field | Type |
+------------+--------------+
| id | int(11) |
| course_id | int(11) |
| name | varchar(255) |
+------------+--------------+
我使用php PDO。我有以下代码:
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
)
)
)
)
但它将这个数组归还给我:
$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);
我也有以下正确的代码:
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
)
)
它返回正确的结果但我想从我的代码中删除for循环。实际上,我想用单个查询从Mysql中检索数据 有谁可以帮助我?
答案 0 :(得分:1)
您需要再次格式化数组。 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();
$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']
);
}
答案 1 :(得分:-1)
SELECT *
FROM files AS f
JOIN courses AS c ON c.id = f.course_id
WHERE course_id IN (Select id from courses)"
如果您没有课程条件,则最后一行没有意义 只需在子选择中添加WHERE即可。