SQL查询

时间:2016-03-12 04:30:25

标签: php mysql sql multidimensional-array

我有一个网站,其中包含由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);

1 个答案:

答案 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子句准备语句的更好方法的建议。但老实说,人们有一点信仰。