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 は、 と の 2 つの組み合わせについていずれかのテーブルをチェックすることになってい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 として渡しているようです。そのため、クエリによるとid_1 = checking との組み合わせは 1 つしかないid_2 = boxため、パラメーターの混乱を避けるために、これの代わりに出力カウントを 1 として取得しています。

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