如果在数据库中找到用户输入的键,我将尝试显示“表”中的数据。目前我已将其设置为让数据库检查 key 是否存在,如下所示:
//Select all from table if a key entry that matches the user specified key exists
$sql = 'SELECT * FROM `table` WHERE EXISTS(SELECT * FROM `keys` WHERE `key` = :key)';
//Prepare the SQL query
$query = $db->prepare($sql);
//Substitute the :key placeholder for the $key variable specified by the user
$query->execute(array(':key' => $key));
//While fetched data from the query exists. While $r is true
while($r = $query->fetch(PDO::FETCH_ASSOC)) {
//Debug: Display the data
echo $r['data'] . '
';
}
这些并不是程序中唯一需要的 SQL 语句。稍后,需要进行 INSERT
查询以及可能的另一个 SELECT
查询。
现在,根据我的理解,使用 WHERE EXISTS
并不总是有效的。但是,将查询拆分为两个单独的语句并让 PHP 在查找匹配键时检查是否返回任何行是否更有效?
我看了一下 similar question ,但是它在更大范围内比较多个语句,而不是单个语句与单个条件。
@MarkBaker Join
不必比 exists
语句快。如果查询优化器发现更好的方法来完成查询,它能够实时重写查询。 Exists
语句比 join
更具可读性。
直接在 PHP 中获取所有数据并进行过滤总是一个坏主意。如果您的表增长到数百万条记录怎么办? MySQL 将为您找到最佳执行计划。如果要提高性能,它将自动缓存查询。
换句话说,就我们现在看到的代码而言,您所做的一切都是正确的。为了进一步分析,向我们展示您的所有查询。
Tôi là một lập trình viên xuất sắc, rất giỏi!