0

是否有可能做到这一点?

假设我有一张桌子:data

$id_1 = "checking";
$id_2 = "box";
$id_users = 1;

id    id_1        id_2         id_users
1     checking    box             1
2     checking    circle          1
3     box         checking        1
4     box         checking        1

$sql = $db->prepare("SELECT COUNT(*) FROM data WHERE ((id_1 = ? AND id_2= ?) OR (id_1 = ? AND id_2 = ?)) AND id_users = ?");
$sql -> execute(array($id_1, $id_2, $id_2, $id_1, $id_users));
echo count($sql);

有了这个,我只得到 1 的输出。从技术上讲,我应该得到 3 的输出,对吗?因为选中和框有 3 种可能性。

SQL 应该检查任一表的 和 的两种checking组合box

有人可以告诉我我在这里做错了什么吗?

谢谢

4

3 回答 3

3

看起来您正在count()使用已经计算过的 SQL COUNTed 行数。
刚刚怎么样echo $sql

$sql = $db->prepare("SELECT COUNT(*) FROM data WHERE ((id_1 = ? AND id_2= ?) OR (id_1 = ? AND id_2)) AND id_users = ?");
$sql->execute(array($id_1, $id_2, $id_2, $id_1, $id_users));
echo $sql->fetch();
于 2012-04-17T04:19:56.293 回答
2

MДΓΓ БДLL 说的没问题,但你也可以使用命名参数:

$sql = $db->prepare("SELECT COUNT(*) FROM data WHERE ((id_1 = :id1 AND id_2= :id2) OR (id_1 = :id2 AND id_2 = :id1)) AND id_users = :idusers");
$sql -> execute(array(':id1' => $id_1, ':id2' => $id_2, ':idusers' => $id_users));

你需要获取结果

$result = $sql->fetch();
echo $result[0];
于 2012-04-17T04:28:50.750 回答
1

在您的查询中,您似乎将 id_1 作为参数传递给 id_2 并将 id_2 参数作为 id_1 传递,因此根据您的查询,只有一种 and 的组合id_1 = checkingid_2 = box因此您将输出计数作为 1 而不是这个,以避免参数混淆使用

$sql -> execute(array(':id1' => $id_1, ':id2' => $id_2, ':idusers' => $id_users));
于 2012-04-17T04:30:22.427 回答