私が作成したのは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%'"));
FULLTEXT
は、VARCHAR
やTEXT
などの文字列データ型にのみ適用されます。結局、それは「言葉」を探しています。
テーブルの文字セット/照合順序は、新しく追加された列のデフォルトのみです。
_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
を含むFULLTEXT
(created
ではなく)を使用できます。他に問題がある可能性があるので、「はい」と言います。 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
。インデックスを介してパフォーマンスを取得する方法は、前述のとおりです(範囲を使用)。
DATETIME
を文字列として比較しないでください。最初のリック・ジェームズ、答えは正しく、受け入れられるべきです。 MySQLには、基本的に3つのタイプのカテゴリがあります ここで確認できます 。 (おそらく将来的には、実際のJSONタイプになるでしょう。)
それぞれにタイプがあります。これらの各タイプには、独自の演算子と関数のセットがあります。 常にその型の演算子と関数を使用する必要があります。DATETIME
を文字列として考えないでください。デフォルトで文字列化されるオブジェクトと考えてください。あなたのユースケースでは、