我有一个奇怪的问题。让我们说我有一系列这样的数字:
$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);
答案 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对这有多糟糕没有任何影响!]永远不会超过几十行,你可以完全抛弃所有索引。
说真的,不要这样做。