解決済み:国とOSのテーブルのデータ型がVARCHARに設定されていたため、ここで=0を='0'に変更しました。これを指摘してくれたraina77owに感謝します!感謝します。
このクエリの書き方がよくわかりません。基本的に、2つの列(OSとcountry_code)を持つテーブルを作成します。さらに多くの列がありますが、これらは条件付きのものです。これらは、すべての場合は0に設定されるか、特定の場合はコンマで区切られて設定されます。
今、私が達成しようとしているのは、OSとcountry_code = 0の場合、または一致するデータ(コンマで区切られている)が含まれている場合に、テーブルからデータをプルすることです。
次に、時間の列があります。列time_tがfalseに設定されていない限り、時間が時間列よりも大きい行を選択したいと思います。この場合、これは問題ではありません。
私はそれを正しく説明したと思いますか?
これは私がこれまでに持っているものです:
$get = $db->prepare("SELECT * FROM commands
WHERE country_code = 0 OR country_code LIKE :country_code
AND OS = 0 OR OS LIKE :OS
AND IF (time_t = 1, expiry > NOW())
");
$get->execute(array(
':country_code' => "%{$data['country_code']}%",
':OS' => "%{$data['OS']}%"
));
編集:これは私が現在使用しているコードですが、それでもOSとCountry_codeの部分を機能させることができないようです:
$get = $db->prepare("SELECT * FROM commands
WHERE (country_code = 0 OR country_code LIKE :country_code)
AND (OS = 0 OR OS LIKE :OS)
AND (time_t <> 1 OR expiry > NOW())
");
$get->execute(array(
':country_code' => "%{$data['country_code']}%",
':OS' => "%{$data['OS']}%"
));
DBに送信されるデータは次のようになります。OS=>Windows7 country_code => GB 1つだけが送信され、1つだけが送信されます。私が今抱えている問題は、それがOSで、そして当面は機能しているということですが、国では機能していません。テーブルのデータが「FR、SA」で、LIKE'%GB%'を実行した場合でも、生のクエリを試しましたが、それでも行が返されました。