PHP PDO mysql 按结果 ID 获取行

标签 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);

最佳答案

您希望编写查询以最大程度地减少返回的数据量。像这样的东西:

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% 确定整个结果集 [忽略 LIMIT 子句,LIMIT 对这有多糟糕没有影响!] 永远不会大于几十行,并且您可以完全丢弃所有索引。

说真的,不要这样做。

关于PHP PDO mysql 按结果 ID 获取行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27284830/

相关文章:

sql - 自动递增表列

c# - 在 C# 中调用 SQL 定义的函数

php - 即使使用请求中定义的格式也获取 "Invalid datetime format"

c# - DataGridView 在 C# 中获取行索引获取超出范围的异常

javascript - querySelectorAll 或任何其他返回多个元素的方法 - 不起作用

MySQL:通过字符串比较使用其他表中的id更新表列

php - PHP如何查找上一条SQL语句中创建的所有表的名称?

sql - Rails 查询中的 `<>` 是什么意思?

php - 基本的 ssl 和 php

php - symfony 3 应用程序在 DebugClassLoader 中默默地失败了 require_once