php - SQL 查询需要 3D 数组

标签 php mysql sql multidimensional-array

我有一个网站,其中的图表由 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/

相关文章:

php-serial 不工作

php - CS CART - 错误的 css 路径

javascript - 用于切换 sql 结果的 Jquery 按钮

mysql - 从 Azure 中国的虚拟机连接到 MySql 服务时出现问题

sql - 临时表整理冲突 - 错误 : Cannot resolve the collation conflict between Latin1* and SQL_Latin1*

sql - 对每 n 个和组上的 SQL 行求和

sql - 选择两列中两个日期之间的记录

php - 在 php 或 javascript 上自动打印 PDF 脚本

PHP/MongoDB : how does references work in php?

javascript - Highcharts ,类型错误: obj is null