- 投稿日:2019-07-11T21:31:49+09:00
UdemyのPHP+MySQL(Byたにぐちまこと)をまとめてみた
はじめに
Udemyの講座を受けながら、まとめた自分なりのアウトプットです!
同じ講座を受ける際には参考にしてみてください!!!!!!
セクション1はセットアップのため飛ばして、2からになっています。
セクション2:PHPの基本を学ぼう
・HTMLタグのname属性がformタグで送信する際の、識別子になる
・inputタグは閉じタグが必要ない=単独タグ
・input type = submitタグのvalueタグはボタンの表面に表示する文字列
・htmlspecialchars($REQUEST[my_name],ENT_QUOTES)
→$_REQUESTmy_nameをENT_QUOTESの型にエスケープさせるメソッド
※特殊な場合以外は基本的にENTQUOTES・$_REQUESTはPOSTでもGETでもどちらでも受け取ることができる
→GETかPOSTどちらが受け取れてるのかわからないため、基本的にわかっている場合は指定したほうがいい・ラジオボタンはvalue属性が送信される(textfieldも一緒でvalue属性を送っている)
フォームで送られるものはvalue属性に設定されているものが送信される
チェックボックス、セレクトタグ、etc・チェックボックスで複数の値を送信する場合はname属性にブレケッツ[]をつける必要がある
→配列の形式で送信されるため
→そのため受け取る時は配列で受け取り、foreach($_POST['reserve'] as $reserve)などで取り出す!・変数はその画面で終わる
セッションは画面間を移動してもブラウザを閉じるまでは保存されている
(サーバーにsession IDが保存されていて
、ブラウザ側のクッキーにsession IDを持たせてそれと付き合わせて照合する)
クッキーは画面を閉じても有効期限までは保存されている(ブラウザ側に保存 パスワード等は入れちゃダメ!)
→保存期間がそれぞれ違うから区別して使う!セクション3 データベースの基本を学ぼう
・UPDATEとDELETEのSQLはWHERE句で指定しないと全ての値が対象になるから気をつけて実行する必要がある
・PHPMyadminでは主キーの設定が上手くいかないことがある
→SQLで実行する!・PHPMyadminはもともと英語のシステムを日本語で割り当ててるから文法とかおかしいのがたまにある
ex)カラムの追加・主キーは一意の値のカラムになる(idとか)
・AUTO_INCREAMENTした状態で何か値を削除したらそこの採番は永久欠番になる
・基本DBで一度削除した値と同じ採番は実装しない!
・WHEREのあいまい検索はLIKE %~% で行う
・TIMESTAMPという型はデータの変更時間を自動的に入れてくれる
・LEFT JOIN
SELECT item_name,SUM(COUNT) FROM my_items LEFT JOIN carts ON my_item.id=carts.item_id GROUP BY carts.item_idmy_itemsに属する形でcartsに結合させるからcartsにないものもmy_itemsにあればそれに紐づいて表示される
ON以降にテーブルを繋げる条件を記述・DISTICNTで値を重複させず取得できる
・BETWEEN 50 AND 149
でWHERE price > 50 AND price < 150と同じ・WHERE id IN(1,3)
複数の条件を記述できる・LIMIT 2,3(2個目から3つ取得)
第一パラメータがどこから第二パラメータで何件かを取得するという記述・半角空白を書くとそのテーブル名などのオブジェクトをエイリアスで記述できる
SELECT item_name,SUM(COUNT) FROM my_items i LEFT JOIN
carts ON i .id=carts.item_id GROUP BY carts.item_id・SQLが集まったものとしてエクスポートでバックアップを取れる
・復元はDBを作成したあとにインポートでバックアップしたSQLを取り込む
セクション4: PHP+MySQL(MariaDB)を組み合わせて、Webシステムを作ろう
・$db = new PDO('mysql:dbname=mydb;host=127.0.0.1';charset=utf8,'root','root');
でアクセス host=127.0.0.1は自分自身を表すIPアドレス・exec()メソッドは影響を与えた行の数を返す
query()メソッドはSQLの結果の値を返す
execute()メソッドはプリペアードステートメントを実行する・queryはオブジェクトなのでそこから値を取得するにはfetch()する
$record = $records -> fetch();の$recordは連想配列になっている・$statement = $db->prepare('INSERT INTO memos SET memo = ?,created_at = NOW()');
$statement -> execute(array($_POST['memo'])));
で?の部分にexecuteで値を入れる・bindparamで複数の?にSQLを代入できる
・Session以外で次のページに値を受け渡す方法として、
inputタグのhidden属性を使ってPOSTでそのvalueを渡してやるといった方法もある・PHPではCRUDはデータベースに直接SQLを発行して行う
セクション5: 「Twitter風ひとこと掲示板」を作成しよう
・varchar型は文字数を制限したtext型のこと
・header('Location:check.php')でcheck.phpにリダイレクトできる
その後路にはexitが必要・formタグでファイルをアップロードする場合は
が決まり文句
・$image = date('YmdHis'). $_FILES['image']['name'];
でファイル名がアップロードされた時に日付を付加してファイル名が重複するのを防ぐ・ move_uploaded_file($FILE['image']['tmp_name'],'../member_picture/' . $image);
$_FILEがinput type = fileであげたものが入っているグローバル変数
['image']['tmp_name']は一時的に上がっている場所
moveuploaded_file(ファイル、ファイルの移動先../member_picture/' . $image)・substr($fileName, -3)でファイルの拡張子を得る(後ろから3文字を切り取る)
・セッションは使い終わったらすぐに破棄するようにする
unset($_SESSION['join']);・textareaのformパーツはvalueタグがなく、その代わりにに囲まれた部分がvalueになる
最後に
Evernoteにまとめたやつを貼り付けただけなので、こっちが元になっています
見づらかったら以下を参考にしてください!
https://www.evernote.com/shard/s625/sh/d81568ef-475c-4c15-b3c6-ae9da198f15c/0573994a5c161bb9cbdb23f85cd37ba9
- 投稿日:2019-07-11T12:31:44+09:00
Rails6 のちょい足しな新機能を試す51(MySQL default編)
はじめに
Rails 6 に追加されそうな新機能を試す第51段。 今回は、
MySQL default
編です。
Rails 6 では、 MySQL 8.0.13 以降のデータベースの場合に マイグレーションのカラムを追加するときに default オプションで式を指定できるようになりました。
言い換えると、MySQL 8.0.13 以降で カラムの default に式が使えるようになったことに、Rails が対応したということになります。Ruby 2.6.3, Rails 6.0.0.rc1, MySQL 8.0.16 で確認しました。Rails 6.0.0.rc1 は
gem install rails --prerelease
でインストールできます。$ rails --version Rails 6.0.0.rc1今回は、IPアドレスをソートして表示する機能を作ってみたいと思います。
rails プロジェクトを作る
$ rails new rails6_0_0rc1 $ cd rails6_0_0rc1scaffold で CRUD の機能を作る
scaffold で Host の CRUD を作成します。
カラムaton
は、IPアドレスを数値に変換した値を保存します。$ bin/rails g scaffold Host ip aton:integermigration ファイルを編集する
migration ファイルを編集します。
ip
カラムにnull: false
を指定します。
aton
のデフォルト値は、MySQL の関数INET_ATON()
を使ってip
のカラムを変換した値にします。
aton
にlimit: 5
を指定しているのは、255.255.255
を数値に変換した時に正しい値が保存されるようにするためです。db/migrate/20190706063437_create_hosts.rbclass CreateHosts < ActiveRecord::Migration[6.0] def change create_table :hosts do |t| t.string :ip, null: false t.integer :aton, limit: 5, default: -> { '(inet_aton(ip))' } t.timestamps end end end
HostController#index
を変更するIPアドレスをソートして表示するために、
order
を追加します。
ソートのキーはaton
にします。app/controllers/hosts_controller.rbclass HostsController < ApplicationController ... def index @hosts = Host.all.order(:aton) end ... endseed データを作る
1件ずつブラウザでデータを登録するのは面倒なので、seed データを作っておきます。
db/seeds.rbHost.create( [ { ip: '192.168.1.1' }, { ip: '192.168.2.1' }, { ip: '192.168.9.1' }, { ip: '192.168.10.1' }, { ip: '192.168.20.1' }, { ip: '192.168.99.1' }, { ip: '192.168.120.1' } ] )データベースを作る
データベースを作って seed データを登録します。
$ bin/rails db:create db:migrate db:seed
rails server を実行して Host の一覧を表示する
rails server を実行します。
$ bin/rails s
http://localhost:3000/hosts で一覧画面を表示します。
IPアドレスの順番にソートされています。
ちなみに
order
で:ip
を指定すると文字列としてソートされてしまいます。
その他
ツッコミどころの多いソースかも知れませんが、今回は、あくまで default で式が使えることを確認する目的ですので見逃してください。
あと、今回は試してませんが、インデックスでも式を使うことができるようになっています。試したソース
試したソースは以下にあります。
https://github.com/suketa/rails6_0_0rc1/tree/try051_mysql_default_expression参考情報
- 投稿日:2019-07-11T06:07:20+09:00
MySQLの初期パスワードが/var/log/mysqld.logに出力されないときの対応(CentOS7 + MySQL8.0におけるパスワードリセット)
AzureのCentOS7.5にMySQL8.0をインストールした際、/var/log/mysqld.logに初期パスワードが出力されなかったので(パーミッションの問題?)、その際の対応をメモ。
結論
- パスワードをリセットするしかない
やり方
とりあえずmysqldを停止させる。
sudo systemctl stop mysqld
mysqldをセーフモード?で起動させる。
CentOS7環境ではmysqld_safeコマンドは使えないみたいなので環境変数で起動オプションを設定。sudo systemctl set-environment MYSQLD_OPTS="--skip-grant-tables"mysqldを起動させる。
sudo systemctl start mysqld &コンソールが戻ってくるよう&をつけている。
rootでログイン
mysql -u rootパスワードを一度nullでリセット。
use mysql; UPDATE mysql.user SET authentication_string=null WHERE User='root';一応反映。
FLUSH PRIVILEGES;mysqlを抜けて、mysqldを停止させる。
sudo systemctl stop mysqld環境変数をリセット。
sudo systemctl unset-environment MYSQLD_OPTSmysqldを起動。
systemctl start mysqldパスワード無しで入れることを確認。
sudo mysql -u root -pあとは、初期状態ならmysql_secure_installation等でパスワードを設定するか、
mysql_secure_installationAlterでパスワードを変更する。
ALTER USER 'root'@'localhost' identified BY 'hogehoge';以上。
- 投稿日:2019-07-11T01:04:22+09:00
MariaDB (MySQL) の select 時に等間隔で間引く
前提
- insert_on に insert 時のタイムスタンプが入っている (他にもカラムはあるが省略)
- "select * from atable;" で全て持ってきた上でスクリプト側で処理していたが、(VPS スペックが負けるようになったのか) スクリプトが OOM Killer の標的になり始めたので、select 時点で間引いておきたい
- レコードは基本的に 10 分毎
- なので、20 分毎, 40 分毎といったような間隔でレコード情報を取得したい
MariaDB [adb]> select id,insert_on from atable limit 10; +----+---------------------+ | id | insert_on | +----+---------------------+ | 1 | 2011-08-12 19:49:24 | | 2 | 2011-08-12 19:51:04 | | 3 | 2011-08-12 20:01:04 | | 4 | 2011-08-12 20:11:06 | | 5 | 2011-08-12 20:21:08 | | 6 | 2011-08-12 20:31:06 | | 7 | 2011-08-12 20:41:04 | | 8 | 2011-08-12 20:51:06 | | 9 | 2011-08-12 21:01:04 | | 10 | 2011-08-12 21:11:08 | +----+---------------------+ MariaDB [adb]> select id,insert_on from atable order by id desc limit 10; +--------+---------------------+ | id | insert_on | +--------+---------------------+ | 409279 | 2019-07-11 00:34:28 | | 409278 | 2019-07-11 00:24:26 | | 409277 | 2019-07-11 00:14:28 | | 409276 | 2019-07-11 00:04:29 | | 409275 | 2019-07-10 23:54:43 | | 409274 | 2019-07-10 23:44:29 | | 409273 | 2019-07-10 23:34:27 | | 409272 | 2019-07-10 23:24:27 | | 409271 | 2019-07-10 23:14:29 | | 409270 | 2019-07-10 23:04:27 | +--------+---------------------+本題
insert_on の値を unixtime に変換した上で剰余演算して n 分間隔に均す
MariaDB [adb]> select id,insert_on -interval UNIX_TIMESTAMP(insert_on)%(60*20) second -> from atable limit 10; +----+-----------------------------------------------------------+ | id | insert_on -interval UNIX_TIMESTAMP(insert_on)%1200 second | +----+-----------------------------------------------------------+ | 1 | 2011-08-12 19:40:00 | | 2 | 2011-08-12 19:40:00 | | 3 | 2011-08-12 20:00:00 | | 4 | 2011-08-12 20:00:00 | | 5 | 2011-08-12 20:20:00 | | 6 | 2011-08-12 20:20:00 | | 7 | 2011-08-12 20:40:00 | | 8 | 2011-08-12 20:40:00 | | 9 | 2011-08-12 21:00:00 | | 10 | 2011-08-12 21:00:00 | +----+-----------------------------------------------------------+ MariaDB [adb]> select id,insert_on -interval UNIX_TIMESTAMP(insert_on)%(60*40) second -> from atable limit 10; +----+-----------------------------------------------------------+ | id | insert_on -interval UNIX_TIMESTAMP(insert_on)%2400 second | +----+-----------------------------------------------------------+ | 1 | 2011-08-12 19:40:00 | | 2 | 2011-08-12 19:40:00 | | 3 | 2011-08-12 19:40:00 | | 4 | 2011-08-12 19:40:00 | | 5 | 2011-08-12 20:20:00 | | 6 | 2011-08-12 20:20:00 | | 7 | 2011-08-12 20:20:00 | | 8 | 2011-08-12 20:20:00 | | 9 | 2011-08-12 21:00:00 | | 10 | 2011-08-12 21:00:00 | +----+-----------------------------------------------------------+grouo by で間引く
MariaDB [adb]> select id,insert_on,insert_on -interval UNIX_TIMESTAMP(insert_on)%(60*20) second as dit20 -> from atable group by dit20 limit 10; +----+---------------------+---------------------+ | id | insert_on | dit20 | +----+---------------------+---------------------+ | 1 | 2011-08-12 19:49:24 | 2011-08-12 19:40:00 | | 3 | 2011-08-12 20:01:04 | 2011-08-12 20:00:00 | | 5 | 2011-08-12 20:21:08 | 2011-08-12 20:20:00 | | 7 | 2011-08-12 20:41:04 | 2011-08-12 20:40:00 | | 9 | 2011-08-12 21:01:04 | 2011-08-12 21:00:00 | | 11 | 2011-08-12 21:21:07 | 2011-08-12 21:20:00 | | 13 | 2011-08-12 21:51:06 | 2011-08-12 21:40:00 | | 14 | 2011-08-12 22:01:23 | 2011-08-12 22:00:00 | | 16 | 2011-08-12 22:31:30 | 2011-08-12 22:20:00 | | 17 | 2011-08-12 22:41:06 | 2011-08-12 22:40:00 | +----+---------------------+---------------------+ MariaDB [adb]> select id,insert_on,insert_on -interval UNIX_TIMESTAMP(insert_on)%(60*40) second as dit40 -> from atable group by dit40 limit 10; +----+---------------------+---------------------+ | id | insert_on | dit40 | +----+---------------------+---------------------+ | 1 | 2011-08-12 19:49:24 | 2011-08-12 19:40:00 | | 5 | 2011-08-12 20:21:08 | 2011-08-12 20:20:00 | | 9 | 2011-08-12 21:01:04 | 2011-08-12 21:00:00 | | 13 | 2011-08-12 21:51:06 | 2011-08-12 21:40:00 | | 16 | 2011-08-12 22:31:30 | 2011-08-12 22:20:00 | | 19 | 2011-08-12 23:01:31 | 2011-08-12 23:00:00 | | 23 | 2011-08-12 23:41:06 | 2011-08-12 23:40:00 | | 27 | 2011-08-13 00:21:10 | 2011-08-13 00:20:00 | | 31 | 2011-08-13 01:01:08 | 2011-08-13 01:00:00 | | 35 | 2011-08-13 01:41:05 | 2011-08-13 01:40:00 | +----+---------------------+---------------------+間引いた結果の id と一致するレコードを他テーブルから引っ張る
- テーブルが一つだけなので元テーブルを使うけど、たぶんこんな感じ
MariaDB [adb]> select id,insert_on from atable as tmp where exists ( -> select id,insert_on -interval UNIX_TIMESTAMP(insert_on)%(60*40) second as dit -> from atable group by dit having id=tmp.id -> ) limit 10; +----+---------------------+ | id | insert_on | +----+---------------------+ | 1 | 2011-08-12 19:49:24 | | 5 | 2011-08-12 20:21:08 | | 9 | 2011-08-12 21:01:04 | | 13 | 2011-08-12 21:51:06 | | 16 | 2011-08-12 22:31:30 | | 19 | 2011-08-12 23:01:31 | | 23 | 2011-08-12 23:41:06 | | 27 | 2011-08-13 00:21:10 | | 31 | 2011-08-13 01:01:08 | | 35 | 2011-08-13 01:41:05 | +----+---------------------+ MariaDB [adb]> select id,insert_on from atable as tmp where exists ( -> select id,insert_on -interval UNIX_TIMESTAMP(insert_on)%(60*40) second as dit -> from atable group by dit having id=tmp.id -> ) order by id desc limit 10; +--------+---------------------+ | id | insert_on | +--------+---------------------+ | 409278 | 2019-07-11 00:24:26 | | 409274 | 2019-07-10 23:44:29 | | 409270 | 2019-07-10 23:04:27 | | 409266 | 2019-07-10 22:24:27 | | 409262 | 2019-07-10 21:44:27 | | 409258 | 2019-07-10 21:04:28 | | 409254 | 2019-07-10 20:24:28 | | 409250 | 2019-07-10 19:44:28 | | 409246 | 2019-07-10 19:04:26 | | 409242 | 2019-07-10 18:24:27 | +--------+---------------------+
- 投稿日:2019-07-11T01:04:22+09:00
MariaDB (MySQL) の select 時で等間隔にデータを間引く
前提
- insert_on に insert 時のタイムスタンプが入っている (他にもカラムはあるが省略)
- "select * from atable;" で全て持ってきた上でスクリプト側で処理していたが、(VPS スペックが負けるようになったのか) スクリプトが OOM Killer の標的になり始めたので、select 時点で間引いておきたい
- レコードは基本的に 10 分毎
- なので、20 分毎, 40 分毎といったような間隔でレコード情報を取得したい
MariaDB [adb]> select id,insert_on from atable limit 10; +----+---------------------+ | id | insert_on | +----+---------------------+ | 1 | 2011-08-12 19:49:24 | | 2 | 2011-08-12 19:51:04 | | 3 | 2011-08-12 20:01:04 | | 4 | 2011-08-12 20:11:06 | | 5 | 2011-08-12 20:21:08 | | 6 | 2011-08-12 20:31:06 | | 7 | 2011-08-12 20:41:04 | | 8 | 2011-08-12 20:51:06 | | 9 | 2011-08-12 21:01:04 | | 10 | 2011-08-12 21:11:08 | +----+---------------------+ MariaDB [adb]> select id,insert_on from atable order by id desc limit 10; +--------+---------------------+ | id | insert_on | +--------+---------------------+ | 409279 | 2019-07-11 00:34:28 | | 409278 | 2019-07-11 00:24:26 | | 409277 | 2019-07-11 00:14:28 | | 409276 | 2019-07-11 00:04:29 | | 409275 | 2019-07-10 23:54:43 | | 409274 | 2019-07-10 23:44:29 | | 409273 | 2019-07-10 23:34:27 | | 409272 | 2019-07-10 23:24:27 | | 409271 | 2019-07-10 23:14:29 | | 409270 | 2019-07-10 23:04:27 | +--------+---------------------+本題
insert_on の値を unixtime に変換した上で剰余演算して n 分間隔に均す
MariaDB [adb]> select id,insert_on -interval UNIX_TIMESTAMP(insert_on)%(60*20) second -> from atable limit 10; +----+-----------------------------------------------------------+ | id | insert_on -interval UNIX_TIMESTAMP(insert_on)%1200 second | +----+-----------------------------------------------------------+ | 1 | 2011-08-12 19:40:00 | | 2 | 2011-08-12 19:40:00 | | 3 | 2011-08-12 20:00:00 | | 4 | 2011-08-12 20:00:00 | | 5 | 2011-08-12 20:20:00 | | 6 | 2011-08-12 20:20:00 | | 7 | 2011-08-12 20:40:00 | | 8 | 2011-08-12 20:40:00 | | 9 | 2011-08-12 21:00:00 | | 10 | 2011-08-12 21:00:00 | +----+-----------------------------------------------------------+ MariaDB [adb]> select id,insert_on -interval UNIX_TIMESTAMP(insert_on)%(60*40) second -> from atable limit 10; +----+-----------------------------------------------------------+ | id | insert_on -interval UNIX_TIMESTAMP(insert_on)%2400 second | +----+-----------------------------------------------------------+ | 1 | 2011-08-12 19:40:00 | | 2 | 2011-08-12 19:40:00 | | 3 | 2011-08-12 19:40:00 | | 4 | 2011-08-12 19:40:00 | | 5 | 2011-08-12 20:20:00 | | 6 | 2011-08-12 20:20:00 | | 7 | 2011-08-12 20:20:00 | | 8 | 2011-08-12 20:20:00 | | 9 | 2011-08-12 21:00:00 | | 10 | 2011-08-12 21:00:00 | +----+-----------------------------------------------------------+grouo by で間引く
MariaDB [adb]> select id,insert_on,insert_on -interval UNIX_TIMESTAMP(insert_on)%(60*20) second as dit20 -> from atable group by dit20 limit 10; +----+---------------------+---------------------+ | id | insert_on | dit20 | +----+---------------------+---------------------+ | 1 | 2011-08-12 19:49:24 | 2011-08-12 19:40:00 | | 3 | 2011-08-12 20:01:04 | 2011-08-12 20:00:00 | | 5 | 2011-08-12 20:21:08 | 2011-08-12 20:20:00 | | 7 | 2011-08-12 20:41:04 | 2011-08-12 20:40:00 | | 9 | 2011-08-12 21:01:04 | 2011-08-12 21:00:00 | | 11 | 2011-08-12 21:21:07 | 2011-08-12 21:20:00 | | 13 | 2011-08-12 21:51:06 | 2011-08-12 21:40:00 | | 14 | 2011-08-12 22:01:23 | 2011-08-12 22:00:00 | | 16 | 2011-08-12 22:31:30 | 2011-08-12 22:20:00 | | 17 | 2011-08-12 22:41:06 | 2011-08-12 22:40:00 | +----+---------------------+---------------------+ MariaDB [adb]> select id,insert_on,insert_on -interval UNIX_TIMESTAMP(insert_on)%(60*40) second as dit40 -> from atable group by dit40 limit 10; +----+---------------------+---------------------+ | id | insert_on | dit40 | +----+---------------------+---------------------+ | 1 | 2011-08-12 19:49:24 | 2011-08-12 19:40:00 | | 5 | 2011-08-12 20:21:08 | 2011-08-12 20:20:00 | | 9 | 2011-08-12 21:01:04 | 2011-08-12 21:00:00 | | 13 | 2011-08-12 21:51:06 | 2011-08-12 21:40:00 | | 16 | 2011-08-12 22:31:30 | 2011-08-12 22:20:00 | | 19 | 2011-08-12 23:01:31 | 2011-08-12 23:00:00 | | 23 | 2011-08-12 23:41:06 | 2011-08-12 23:40:00 | | 27 | 2011-08-13 00:21:10 | 2011-08-13 00:20:00 | | 31 | 2011-08-13 01:01:08 | 2011-08-13 01:00:00 | | 35 | 2011-08-13 01:41:05 | 2011-08-13 01:40:00 | +----+---------------------+---------------------+間引いた結果の id と一致するレコードを他テーブルから引っ張る
- テーブルが一つだけなので元テーブルを使うけど、たぶんこんな感じ
MariaDB [adb]> select id,insert_on from atable as tmp where exists ( -> select id,insert_on -interval UNIX_TIMESTAMP(insert_on)%(60*40) second as dit -> from atable group by dit having id=tmp.id -> ) limit 10; +----+---------------------+ | id | insert_on | +----+---------------------+ | 1 | 2011-08-12 19:49:24 | | 5 | 2011-08-12 20:21:08 | | 9 | 2011-08-12 21:01:04 | | 13 | 2011-08-12 21:51:06 | | 16 | 2011-08-12 22:31:30 | | 19 | 2011-08-12 23:01:31 | | 23 | 2011-08-12 23:41:06 | | 27 | 2011-08-13 00:21:10 | | 31 | 2011-08-13 01:01:08 | | 35 | 2011-08-13 01:41:05 | +----+---------------------+ MariaDB [adb]> select id,insert_on from atable as tmp where exists ( -> select id,insert_on -interval UNIX_TIMESTAMP(insert_on)%(60*40) second as dit -> from atable group by dit having id=tmp.id -> ) order by id desc limit 10; +--------+---------------------+ | id | insert_on | +--------+---------------------+ | 409278 | 2019-07-11 00:24:26 | | 409274 | 2019-07-10 23:44:29 | | 409270 | 2019-07-10 23:04:27 | | 409266 | 2019-07-10 22:24:27 | | 409262 | 2019-07-10 21:44:27 | | 409258 | 2019-07-10 21:04:28 | | 409254 | 2019-07-10 20:24:28 | | 409250 | 2019-07-10 19:44:28 | | 409246 | 2019-07-10 19:04:26 | | 409242 | 2019-07-10 18:24:27 | +--------+---------------------+
- 投稿日:2019-07-11T00:57:45+09:00
SpringでMySQLエラー Unknown column ' 値1 ' in 'field list'
Spring Java の Entityで
Unknown column ' 値1 ' in 'field list'
が出てハマりました。
結論から言うと大文字が混ざっていたのが問題でした。
ターミナルからMySQLに直接SQLを流し込むと大文字でも正常に動作しますが、
Spring + Java のプログラムから呼び出そうとするとカラムがないというエラーになります。field がない と特定の列名を指定してくる場合はカラムに日本語や大文字などが混ざっていないか注意しましょう。