mysqlフィールドにスコアを保存する必要がありますが、このスコアは時間、整数、または浮動小数点数である可能性があります。これを行う最初の方法は、スコアタイプを識別し、それを3つのフィールドのいずれかに入力することでしたが、新しいスコアタイプを追加する必要が生じた場合は、データベースにフィールドを継続的に追加する必要はありません。どこかで誰かが私に、何かをvarcharとして格納すると、整数、浮動小数点数、さらには日付として読み取ることができないと言ったことを覚えています。私の質問は、これら3つすべてを1つの特定のタイプとして保存できますが、データベースから取得してphpコードで使用するときに必要な方法で読み取ることができますか?
3 に答える
私の意見では、格納されている変数の型について絶対に知る必要がある場合を除いて、フィールドを FLOAT としてモデル化できます。タイムスタンプに変換することで、時刻を整数値に変換できます。整数は、実際に設定された実数 (浮動小数点数) のサブセットであるため、そのようにしてすべてをカバーしたと思います。浮動小数点演算は、精度と等値のテストでいくつかの問題を引き起こす可能性がありますが、注意してください!
CAST 関数と CONVERT関数を使用して、文字列データ型を INT、FLOAT、DECIMAL、DATE、DATETIME などの別の MySQL データ型に変換できます。
いくつかの問題があります。行に格納されているデータ型をどのように知ることができますか? MySQL は RegExp をサポートしていますが、WHERE 句で使用することはお勧めしません。データ型を別の列に格納します。
また、クエリの where 句でキャスト関数を使用すると、実行が遅くなります。データを検索/並べ替える必要がある場合は、適切なデータ型を使用する必要があります。おそらく、データ型ごとに 1 つの列を追加する必要があります。行ごとに、対応する列のみを入力します。
テキストに対して数学演算を実行すると、mysql はテキストを適切なタイプの数値に喜んで変換します。ただし、数値以外のテキストもゼロに変換して同じ操作を実行するため、事前に適切なタイプのフィールドのみを取得していることを確認する必要があります。
このフォーラムの投稿では、クエリに正規表現条件を追加して、数値データを含むフィールドのみを取得する方法を示しています。ただし、別の列を使用して各レコードがどのタイプのスコアであるかを示し、それを使用して適切なものを取得する方がおそらく賢明だと思います。
テキストを日付に変換する方法がわかりません (それを通すことdate()
はできません)。ただし、mysql の日付形式 (2012-05-08 11:20:23) には、重要度の高い順に日付要素があることに注意してください。最高/最低の日付を検索したり、日付で並べ替えたりするだけの場合は、それらを文字列として扱っても問題ありません。