アクセスカウンタ
読者登録
メールアドレスを入力して登録する事で、このブログの新着エントリーをメールでお届けいたします。 解除は→こちら
現在の読者数 0人
プロフィール
月読☆彡
オーナーへメッセージ
QRコード
QRCODE
※カテゴリー別のRSSです。

2007年08月07日

トータル件数取得

MySQLを使い掲示板などを作成してると、現在の表示件数とトータルの件数を取得したい場合がある。

仮に100件近くレコードがあるとして、21件目から10件分を取得するとする。

SELECT code, name, subject, body, date
FROM bbs_data ORDER BY code
LIMIT 10 OFFSET 20;

そうすると普通にレコードが返ってくる。その後に全体のカウントを取得する。

SELECT COUNT(code) as count
FROM bbs_data;

上記のようにする事でもトータル件数を取得する事が出来るが、下記の方法を使えばもっと簡単にトータル件数を取得できる。

SELECT SQL_CALC_FOUND_ROWS code, name, subject, body, date
FROM bbs_data
ORDER BY code
LIMIT 10 OFFSET 20;

SELECT文にSQL_CALC_FOUND_ROWSキーワードを追加するだけ

そのあとに

SELECT FOUND_ROWS() as count;

を実行するとLIMIT(OFFSET)を無視した件数が取得できる。
ここで直前のQueryのSQL_CALC_FOUND_ROWSを抜くとLIMITが反映されたレコード数を返す。

ちなみにFOUND_ROWS()は直前に実行したQueryの結果のレコード数を返す。  
Posted by 月読☆彡 at 13:33Comments(0)TrackBack(0)MySQL

2007年08月07日

addslashesによるエスケープ処理

PHP+MySQLで簡易掲示板を作っている際にフォームのコメント部分をaddslashesでエスケープしていたが、英数字を書き込んだ際に'(シングルクオート)などが使われていると\にて再度エスケープされてしまった。英数字だけかと思っていると日本語を入力した場合も突然エスケープされる時があった。困っているとこんな記事を発見。

『addslashesによるエスケープ処理はやめましょう』

mysql_real_escape_string()やpg_escape_string()等のデータベース専用のエスケープ関数を使えとある。
ちなみにSQLiteを使っている場合はaddslashesでエスケープ処理はNG。SQLiteではMS SQL Server, Sybaseと同様「'」は「''」とシングルクオートでエスケープする。

そこでaddslashesからpg_escape_string()に書き換えた所、今までエスケープ処理がうまくいかなかった英数字も問題なく書き込みできるようになった。

【参考URL】
yohgaki's blog  
Posted by 月読☆彡 at 13:19Comments(0)TrackBack(0)MySQL

2007年06月23日

日付の比較

※今日の日付とテーブル上のDATE型との日付データの比較
テーブル上の日付データが格納されているのはdateとする。

今日の日付は、current_dateでMySQLから取得できる。

$sql = "SELECT * FROM テーブル名 WHERE date > current_date;";

↑上記で今日の日付より大きい日付のデータを表示する事ができる。

参考URL:http://q.hatena.ne.jp/1173995418  
Posted by 月読☆彡 at 12:38Comments(0)TrackBack(0)MySQL

2007年03月30日

フィールドタイプの説明

■項目タイプ(フィールドタイプ)

・MySQL 項目型

int / integer 4 バイト整数
smailint 2 バイト整数
bigint / int8 8 バイト整数
float 浮動小数点
double / real 倍精度浮動小数点
date 日付
time 時間
timestamp 日付時間
char(文字数) 固定長文字列 (最大 256 文字)
varchar(文字数) 可変長文字列 (最大 256 文字)
text ラージ文字列 (最大 65535 文字)
mediumtext ラージ文字列 (最大 1677215 文字)
largetext ラージ文字列 (最大 4294967295 文字)
blob ラージバイナリ(最大 65535 bytes)
mediumblob ラージバイナリ(最大 1677215 bytes)
largeblob ラージバイナリ(最大 4294967295 bytes)

■順序作成(オートナンバー)

・順序は、auto_increment と定義することで利用できる。キー指定しないとエラーが発生する。  
Posted by 月読☆彡 at 13:42Comments(0)TrackBack(0)MySQL