【发布时间】:2017-12-18 14:39:18
【问题描述】:
从以下查询中,哪一个是最优化且使用最快的?
[COUNT(id)]
$SQL = "SELECT name, COUNT(id) as Count FROM names WHERE name = :name";
$row = $stmt->fetch();
if ($data['count'] > 0) {
while ($row) {
$name = $row['name'];
}
} else {
return;
}
或[rowCount()]
$SQL = "SELECT name FROM names WHERE name = :name";
if ($stmt->rowCount() > 0) {
while ($row = $stmt->fetch()) {
$name = $row['name'];
}
} else {
return;
}
或[EXISTS]
$SQLEX = "SELECT EXISTS (SELECT name FROM names WHERE name = :name LIMIT 1)";
if ($stmt->fetchColumn == 1) {
$SQL = "SELECT name FROM names WHERE name = :name";
while (row = $stmt->fetch()){
$name = $row['name'];
}
} else {
return;
}
或[RAW]
$SQL = "SELECT name FROM names WHERE name = :name";
$row = $stmt->fetch();
if ($row) {
while($row) {
$name = $row['name'];
}
} else {
return;
}
我也想知道,为什么使用$stmt->fetch() 和$stmt->rowCount() 可以获取数据,但使用$stmt->fetchColumn 不能?
【问题讨论】:
-
他们做的事情都略有不同,因此询问哪个最佳或最快是无效的。除此之外,由于它们各自返回一行,最佳或最快实际上是无关紧要的。
-
SELECT 1 FROM names WHERE name = :name...如果您只关心它的存在,为什么还要选择name。实际上,尽管这都是非常学术的。由于这是 PDO,您应该仅将rowCount与 INSERT、UPDATE 或 DELETE 查询一起使用不 SELECT。 -
@CD001 问题是在一个查询中我想检查行是否存在,如果存在,我定义并使用它。
-
这个问题的标题具有误导性。从代码中可以明显看出,您不仅需要检查,还需要获取。这是一个不同的故事。
-
你为什么要在你的例子中添加一个完全没有意义的while?