从以下查询中,哪一个是最优化和最快使用的?哪一个检查行时存在的最快方法?
[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;
}
OR [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;
}
OR [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
@ CD001问题是,在一个查询中,我想检查行是否存在,如果存在,我定义并使用它。 – Toleo