我有一个网站,其中包含由SQL查询返回的行填充的图表:
SELECT * FROM datatable WHERE userId = $userId;
现在我有一部分网站,我希望在一个页面上显示许多图表。因此,给定一个userId列表,我需要查询DB的相应行。
此响应将通过JSON发送回客户端并进行绘制。理想情况下,有一种方法可以从mysql中获取某种形式的3d数组。这样我就不必手动解析并将行分成数组。
即。这是我不想要的:
SELECT * FROM datatable WHERE userId IN ($userIds);
-------------------------
| userId | data... |
-------------------------
| 1 | 11 |
| 1 | 12 |
| 1 | 13 |
| 2 | 21 |
| 2 | 22 |
-------------------------
因为它需要我在返回之前将所有userId == ...
进一步处理到他们自己的数组中(这看起来很慢而且很糟糕)。
目前我只是为每个userId运行上面的查询,手动将它们推送到一个数组,但我听说一般来说,一个大查询比许多小查询快得多。
顺便说一句,我使用的是Laravel 4.2和PHP 5.3,并使用以下内容获取结果:
$stmt = $this->DB->prepare($sql);
$stmt->execute();
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
答案 0 :(得分:0)
我找不到真正的解决方案。最终不得不在代码中进行分组。
P.S。我明白了为什么注释关注我准备好的语句,但是在我的实际代码中看起来像这样。
$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
子句准备语句的更好方法的建议。但老实说,人们有一点信仰。