從以下查詢中,哪一個是最優化和最快使用的?哪一個檢查行時存在的最快方法?
[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