相关疑难解决方法(0)

我可以将数组绑定到IN()条件吗?

我很想知道是否可以使用PDO将值数组绑定到占位符.这里的用例试图传递一个值数组以用于IN()条件.

我希望能够做到这样的事情:

<?php
$ids=array(1,2,3,7,8,9);
$db = new PDO(...);
$stmt = $db->prepare(
    'SELECT *
     FROM table
     WHERE id IN(:an_array)'
);
$stmt->bindParam('an_array',$ids);
$stmt->execute();
?>
Run Code Online (Sandbox Code Playgroud)

并让PDO绑定并引用数组中的所有值.

目前我正在做:

<?php
$ids = array(1,2,3,7,8,9);
$db = new PDO(...);
foreach($ids as &$val)
    $val=$db->quote($val); //iterate through array and quote
$in = implode(',',$ids); //create comma separated list
$stmt = $db->prepare(
    'SELECT *
     FROM table
     WHERE id IN('.$in.')'
);
$stmt->execute();
?>
Run Code Online (Sandbox Code Playgroud)

这当然能完成这项工作,但只是想知道是否有一个内置的解决方案我缺席了?

php arrays pdo prepared-statement where-in

549
推荐指数
17
解决办法
20万
查看次数

JOIN或WHERE中的条件

将条件放入JOIN子句与WHERE子句之间是否存在差异(性能,最佳实践等)?

例如...

-- Condition in JOIN
SELECT *
FROM dbo.Customers AS CUS
INNER JOIN dbo.Orders AS ORD 
ON CUS.CustomerID = ORD.CustomerID
AND CUS.FirstName = 'John'

-- Condition in WHERE
SELECT *
FROM dbo.Customers AS CUS
INNER JOIN dbo.Orders AS ORD 
ON CUS.CustomerID = ORD.CustomerID
WHERE CUS.FirstName = 'John'
Run Code Online (Sandbox Code Playgroud)

您更喜欢哪个(也许是为什么)?

sql performance

170
推荐指数
4
解决办法
20万
查看次数

WHERE子句或ON子句中的INNER JOIN条件?

我今天错误地输入了一个查询,但它仍然有效,并给出了预期的结果.我打算运行这个查询:

SELECT e.id FROM employees e JOIN users u ON u.email=e.email WHERE u.id='139840'
Run Code Online (Sandbox Code Playgroud)

但我不小心跑了这个查询

SELECT e.id FROM employees e JOIN users u ON u.email=e.email AND u.id='139840'
Run Code Online (Sandbox Code Playgroud)

(注意AND而不是WHERE在最后一个子句中)

并且都从用户ID返回了正确的员工ID.

这两个查询有什么区别?第二种形式是否只加入满足条件的2个表的成员,而第一个表是否会加入整个表,然后运行查询?一个比另一个更有效还是更低效?这是我缺少的其他东西吗?

谢谢!

mysql sql performance inner-join

6
推荐指数
1
解决办法
3704
查看次数

标签 统计

performance ×2

sql ×2

arrays ×1

inner-join ×1

mysql ×1

pdo ×1

php ×1

prepared-statement ×1

where-in ×1