2つのテーブルを連結して記述するSQL
アクセスログを取る時に、userテーブルとlogのテーブルを連携してアクセスログを取得する必要があった。
かなりハマったのでメモ
前提としてuserテーブルのスキーマ
id int AUTO_INCREMENT
user_no varchar(10) utf8mb4_bin
password varchar(255) utf8mb4_bin
last_name varchar(255) utf8mb4_bin
first_name varchar(255) utf8mb4_bin
email varchar(255) utf8mb4_bin
comment text utf8mb4_binはいNULL
auth_type int
login_logのスキーマ
id int AUTO_INCREMENT
user_id int
login_time datetime CURRENT_TIMESTAMPDEFAULT_GENERATED
ip_address varchar(255) utf8mb4_bin
user_agent varchar(255) utf8mb4_bin
この内容からログインした人の名前と、ログインした日時、IPアドレスを取得する
$sql = "SELECT ll.*, u.last_name, u.first_name
FROM login_log ll
JOIN user u ON ll.user_id = u.id
ORDER BY ll.login_time DESC
LIMIT :limit OFFSET :offset";
FROM login_log llでlogin_logをllに改名⇒演算子に見えるため、ここで混乱した。(命名ミス)
SELECT ll.*としてlogin_logのカラム全てを取得
JOIN user uでuserをuに改名
SELECT u.last_name, u.first_nameとして2つのカラムを取得(姓・名)
ON ll.user_id = u.idとしてlogin_logのuser_idとuserのidを関連付ける⇒結合法則に従っているだけなので、プレースホルダーは不要と考える。
ORDER BY ll.login_time DESCは取得した情報をlogin_timeを軸として降順に並び替える。
とりあえず参考になれば幸いです。