2017-11-02 7 views
-1

私はデータベースにフィールドをテキストとして持っています(私は日付を使用すべきですが、このフィールドは日付以外の値を持つ可能性があります)。彼らはほんのわずかなので、パフォーマンスを離さないでしょう。MySQL検索はdate_formatとして動作しません。

いつも値を返さないので、私の問題はクエリです。しかし、私は手動でそれをうまく動作するクエリを作成します。私はそれが準備されたステートメントの中で何かでなければならないと思うが、それを得ることはできない。

$date = date("d/m/Y"); 
$query = "SELECT * FROM projects WHERE DATE_FORMAT(expiredate, '%d/%m/%Y') >= DATE_FORMAT(?, '%d/%m/%Y') && id >= (SELECT FLOOR(MAX(id) * RAND()) FROM adsfixed) ORDER BY id LIMIT 1"; 

クエリーが列EXPIREDATEを大きくまたはd/M/Y形式で今日より等しいプロジェクトテーブルでランダムな行を取得することになっている(ロジックがOKであれば知っているので、私はしようとしないでください私が必要とするものを説明する)。

+0

(日付の)文字列を比較しないでください。あなたは日付を比較する必要があります – Jens

+0

そして、フィールドは文字列であり、日付として検索する必要があるので、どうすればいいですか? – Tiago

+0

私の答えを参照してください – Jens

答えて

1

文字列に日付にない日付にパラメータを変換します

$query = "SELECT * FROM projects WHERE Date(expiredate) >= str_to_date(?, '%d/%m/%Y') && id >= (SELECT FLOOR(MAX(id) * RAND()) FROM adsfixed) ORDER BY id LIMIT 1"; 
+0

これは機能しません。手動で入力します。 – Tiago

+0

*動作しません。*は意味ですか?エラーメッセージや間違ったデータはありますか? – Jens

+0

それは値を返しませんが、expiredateが05/11/2017のテーブルにレコードがあるので、これを行う必要があります。 – Tiago

関連する問題