我有一个网站,其中的图表由 SQL 查询返回的行填充:
SELECT * FROM datatable WHERE userId = $userId;
现在我的网站的一部分我希望在一个页面上显示许多图表。因此,给定一个 userId 列表,我需要在数据库中查询相应的行。
此响应将通过 JSON 发送回客户端并进行绘制。理想情况下,有一种方法可以从 mysql 获取某种形式的 3d 数组。这样我就不必手动解析行并将其分成数组。
即这是我不想要的:
SELECT * FROM datatable WHERE userId IN ($userIds);
-------------------------
| userId | data... |
-------------------------
| 1 | 11 |
| 1 | 12 |
| 1 | 13 |
| 2 | 21 |
| 2 | 22 |
-------------------------
因为这需要我在返回之前将所有 userId == ...
进一步处理到它们自己的数组中(这看起来又慢又糟糕)。
目前,我只是为每个 userId 运行上述查询,手动将它们推送到数组中,但我听说,一般来说,1 个大查询比许多小查询要快得多。
顺便说一句,我正在使用 Laravel 4.2 和 PHP 5.3,并使用以下方式获取结果:
$stmt = $this->DB->prepare($sql);
$stmt->execute();
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
最佳答案
我找不到真正的解决方案。最终不得不在代码中进行分组。
附注我明白为什么评论关心我准备好的语句,但在我的实际代码中它看起来像这样。
$userIDs = [1, 2, 3, 4, ...]
// $placeholder = "?,?,?,?"
$placeholder = create_placeholder($userIDs);
$sql = "SELECT * FROM table WHERE userID IN ($placeholder)";
$stmt = $this->db->prepare($sql);
$stmt->execute($userIDs);
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);
接受有关使用 IN
子句准备语句的更好方法的建议。但说实话,人们还是有一点信仰的。
关于php - SQL 查询需要 3D 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35953777/