MySQL

順位を取得。※但し参照するレコードが増えるとクソ重い

pointフィールドを元に、降順で自分の順位を求める。※存在しないidでも_rank_が1になるので要注意 ▼pointが同値の場合、タイ扱い SELECT count(*)+1 AS _rank_ FROM HOGE_TABLE WHERE point > (select point FROM HOGE_TABLE WHERE id = ?); ▼pointが同値の…

条件に当てはまるレコードをランダムで、1レコードのみLEFT JOINしたい

ORDER BY RAND()後にGROUP BYできないので大変。 ORDER BY RAND()状態で一時テーブルを作る LEFT JOIN時にGROUP BYする でOK。 テーブル place 場所テーブル place_comment 場所へのコメント情報テーブル image_pathを持ち、nullでないレコードをJOINしたい …

クロス集計(複数のカウントを取る)

クロス集計とか言っておきながらCOUNT()は使わない。 place::場所テーブル id lat::緯度 lng::経度 name::名称 comment::コメントテーブル id:: id__place::関連するplaceテーブルのID body::コメント本文 wannago_or_beenthere::w(行きた…

PDOのプレースフォルダでLIKE検索

プレースフォルダに入れる値を"%hoge%"の様に予め%つけてぶち込めばおk

UPDATEでBOOLフィールドを反転

UPDATE hoge SET fuga = if(fuga = 1, 0, 1) WHERE piyo = ?

BINARYなフィールドにLIKE検索を掛ける際に大文字小文字を無視

SELECT * FROM hoge WHERE fuga COLLATE utf8_unicode_ci LIKE '%piyo%'

バックアップファイルからリストアする

DBを作成(あるなら中のテーブルを全削除) Character set:utg8(UTF-8 Unicode) Collation order:utf8_bin(UTF-8 Unicode) DB選択 SQLを実行 Run SQL from file バックアップファイルを選択して実行

文法の違い

項目 MySQL SQLite PostgreSQL オートインクリメント AUTO_INCREMENT AUTOINCREMENT 未調査 ランダム RAND() RANDOM() 未調査 文字コード設定 SET NAMES utf8 未調査 SET NAMES 'utf8' UNSIGNED ○ × 未調査

フィールドの型なんかを変更

ALTER TABLE hogetable MODIFY hoge VARCHAR(255) BINARY; ALTER TABLE hogetable MODIFY huga INT UNSIGNED NOT NULL;

文字数を取得

SQLite SELECT artist, LENGTH(artist) FROM music ORDER BY LENGTH(artist) DESC MySQLでも使えるが、文字数ではなくバイト数が返ってくる。 MySQL SELECT no, artist, CHAR_LENGTH(artist) FROM music ORDER BY CHAR_LENGTH(artist) DESC

バキューム

OPTIMIZE TABLE [table name]