web-dev-qa-db-ja.com

日時列を全文検索するにはどうすればよいですか?

私が作成したのはDATETIME列です。また、そのテーブルのすべての照合順序を同じutf8タイプに変更しようとしましたが、固定されません。 DATETIME列でFULLTEXT検索を実行することは可能ですか? (%like%は遅すぎる)。

私が得るエラーは:

1283-「作成された」列をFULLTEXTインデックスの一部にすることはできません

-編集:

$add_24 = $i + 1440;

$format_second = date("Y-m-d H:i", strtotime('-'.$add_24.' minutes'));

$p_price = mysqli_fetch_array(mysqli_query($con, "SELECT created FROM products WHERE created LIKE '$format_second%'"));
2
Marc Alexander

FULLTEXTは、VARCHARTEXTなどの文字列データ型にのみ適用されます。結局、それは「言葉」を探しています。

テーブルの文字セット/照合順序は、新しく追加された列のデフォルトのみです。

_ALTER TABLE ... CONVERT TO ..._を使用して、テーブルのすべての列を変更できます。ただし、その前に、なぜそれを行っているのか、また表に英語以外のテキストがすでにあるかどうかを教えてください。そのALTERを使用すると、状況がさらに悪化する可能性があります。

特に、DATETIMEで何を検索していますか? mayインデックスで効率的に実行されるmay「範囲」クエリに変更することが可能です。試行されたクエリと_SHOW CREATE TABLE_を見てみましょう。

その他

_WHERE created = '2018-01-11 20:49:01'
_

特定の秒をチェックします

または

_WHERE created >= '2018-01-11'
  AND created  < '2018-01-11' + INTERVAL 1 DAY
_

特定の日のcreatedをチェックします。

等。

これらの例のいずれかは、INDEXを含むFULLTEXTcreatedではなく)を使用できます。他に問題がある可能性があるので、「はい」と言います。 SELECTおよび_SHOW CREATE TABLE_を入力してください。

mysqliなどのAPIは質問には関係ありません。)

さらに

この定式化を見て...

_SELECT  symbol,created
    FROM  products
    WHERE  symbol='".$ccc['symbol']."'
      AND  created LIKE '%".$date_format."%'
    ORDER BY  id DESC
    limit  0,48
_

INDEX(symbol)が役立つ可能性が高いと思いますが、createdとは関係なく何も役に立ちません。これは、LIKE、およびleadingワイルドカードが原因です。インデックスは、 DATETIMEおよびLIKE。インデックスを介してパフォーマンスを取得する方法は、前述のとおりです(範囲を使用)。

3
Rick James

DATETIMEを文字列として比較しないでください。

最初のリック・ジェームズ、答えは正しく、受け入れられるべきです。 MySQLには、基本的に3つのタイプのカテゴリがあります ここで確認できます 。 (おそらく将来的には、実際のJSONタイプになるでしょう。)

  • 数値
  • 日付時刻
  • ストリング

それぞれにタイプがあります。これらの各タイプには、独自の演算子と関数のセットがあります。 常にその型の演算子と関数を使用する必要があります。DATETIMEを文字列として考えないでください。デフォルトで文字列化されるオブジェクトと考えてください。あなたのユースケースでは、

0
Evan Carroll