2012-04-17 5 views
0

これは可能ですか?これによりdataPDOと同じmysql文で 'AND'と 'OR'を使用する

$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は、checkingboxの2つの組み合わせについてどちらかのテーブルをチェックすることになっています。

誰かが私がここで間違っていることを教えてもらえますか?あなたが行の既に数えSQL COUNT ED番号をINGのcount()ているように見えます

おかげ

+0

'(id_1 =? (id_1 =?AND id_2 =?) ' –

+0

申し訳ありませんが、それは誤字です。それはid_2 =ですか? – hellomello

答えて

2

$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]; 
+0

ありがとうございました! – hellomello

+0

あなたのステートメントの問題は、$ id_1がid_1に等しくなることです。 – hellomello

+0

私の悪い、すぐに朝とcofeeまだ:)、それを切り替えるつもり –

3


ちょうどecho $sqlはどうですか?

MДΓΓБДLLはOKですが、あなたはまた、名前付きパラメータを使用することができると言いました何
$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(); 
+0

エラーが発生しました: 'catchable fatal error:クラスPDOStatementのオブジェクトを文字列に変換できませんでした... ' – hellomello

+1

'echo $ sql'は正しくありません。' $ sql-> fetch() ' –

+0

@Uriel_SVKありがとう、 –

1

を引き起こすフェッチする必要があり、あなたがしているようですid_1をid_2、id_2パラメータにid_1をid_1として渡すと、id_1 = checkingid_2 = box、 の組み合わせが1つしかないので、あなたはoutpになりますパラメータの混乱を避けるために、この代わりに1 とカウントしてください。

$sql -> execute(array(':id1' => $id_1, ':id2' => $id_2, ':idusers' => $id_users)); 
関連する問題