2

それは私のコードではなく、テーブルの構造を変更せずに完了する必要があるものです。日付をMySQL日付形式として保存するのは非常に簡単だと思いますが、それはできません。

シリアル化された配列を文字列として格納するテーブルに列があります。ここで、「日付」が今日より前のすべての行を選択する必要があります。

この日付は、シリアル化された配列文字列内にあります。

mysqlクエリで比較する方法はありますか? 文字列の例は次のとおりです。

a:3:{s:4:"test";b:1;s:2:"se";i:1;s:4:"date";s:10:"2013-05-23";}

次のクエリを使用して、この文字列の「日付」を mysql の日付と比較する必要があります。

"date" BETWEEN 2013-01-01 AND 2013-05-23
4

3 に答える 3

4

"date";s:10ネストされたSUBSTRING_INDEX呼び出しを使用して、日付値を抽出できます (常に によって設定されていると仮定します)。内側のものはその後のすべてを返し"date";s:10"、外側のものは最後の引用符とそれに続くものを切り捨てます:

SUBSTRING_INDEX(SUBSTRING_INDEX(val, '"date";s:10:"', -1), '"', 1)

valあなたの例のようであればa:3:{s:4:"test";b:1;s:2:"se";i:1;s:4:"date";s:10:"2013-05-23";}、これは を返し2013-05-23ます。次に、クエリは次のようになります。

...
WHERE SUBSTRING_INDEX(SUBSTRING_INDEX(val, '"date";s:10:"', -1), '"', 1) BETWEEN 2013-01-01 AND 2013-05-23

きれいではありませんが、ここではかなり期待できません:)

于 2013-05-23T17:59:19.270 に答える
0

select * from postmeta where meta_key = 'your_meta_key' and meta_value REGEXP ('6')

于 2014-11-24T08:02:07.413 に答える