PHP PDO mysql按结果id获取行

时间:2014-12-04 01:39:33

标签: php mysql sql pdo

我有一个奇怪的问题。让我们说我有一系列这样的数字:

$positions = array(1, 2, 5, 9, 25, 68, 130);

然后我在一个表上运行数据库查询,让我们说300条记录

$stmt = dbpdo::$conn->query("SELECT * FROM table"); // 300 rows/records

有没有办法我只能根据我的位置数组获取某些行(结果)?例如

$stmt->fetch(row #1);
$stmt->fetch(row #9);
$stmt->fetch(row #68);

1 个答案:

答案 0 :(得分:0)

您希望编写查询以最小化返回的数据量。类似的东西:

SELECT *
FROM table
WHERE id IN (1, 2, 5, 9, 25, 68, 130)

否则,数据库将要在每个请求中向您发送100%的所有数据,而不仅仅是您感兴趣的7行。

您还可以使用LIMIT 1,$offset从结果集的开头获取单个记录$offset行。 然而,这效率要低得多。 MySQL仍会计算100%的结果集,然后只需遍历它直到它到达第N条记录。

理想情况下,您还希望将查询限制为仅返回有限的列集而不是*。这将减少您的应用程序的开销。

修改

回应@ serg的建议。 ORDER BY RAND()确实是魔鬼。 除非你确定整个结果集[无视 {1,000,000%,否则你永远不应该使用它{1}}条款,LIMIT对这有多糟糕没有任何影响!]永远不会超过几十行,你可以完全抛弃所有索引。

说真的,不要这样做。