mysql:8297
From: "Tatsuya Kondo" <"Tatsuya Kondo" <konet@xxxxxxxxxx>>
Date: Mon, 20 Oct 2003 05:22:03 +0900
Subject: [mysql 08297] SELECT でローテーション出力したい
お世話になっております。
近藤といいます。
【環境】
FreeBSD 4.8-RELEASE
Apache 1.3.27
PHP 4.3.1
MySQL 3.23.56
【DB構造】
CREATE TABLE text_tb (
text_id BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
text_1 CHAR(100) NOT NULL,
text_2 CHAR(100) NOT NULL,
text_3 CHAR(100) NOT NULL,
text_4 CHAR(100) NOT NULL,
INDEX(text_id)
);
INSERT INTO text_tb (text_tb, text_1, text_2, text_3, text_4) VALUES(,
'1-1', '1-2', '1-3', '1-4');
INSERT INTO text_tb (text_tb, text_1, text_2, text_3, text_4) VALUES(,
'2-1', '2-2', '2-3', '2-4');
INSERT INTO text_tb (text_tb, text_1, text_2, text_3, text_4) VALUES(,
'3-1', '3-2', '3-3', '3-4');
INSERT INTO text_tb (text_tb, text_1, text_2, text_3, text_4) VALUES(,
'4-1', '4-2', '4-3', '4-4');
INSERT INTO text_tb (text_tb, text_1, text_2, text_3, text_4) VALUES(,
'5-1', '5-2', '5-3', '5-4');
・・・
【目的】
1回のアクセス事に、順番に1レコードをブラウザに出力したい。
また、「text_*」の部分もローテーション表示されたい。
1回目:1-1
2回目:2-1
3回目:3-1
4回目:4-1
5回目:5-1
6回目:1-2
7回目:2-2
8回目:3-2
9回目:4-2
・・・・
と言ったように。
【現在の対処方法】
SELECT count(*) as text_num FROM text_tb;
してから、
$fp = fopen("num.dat", "r");
flock($fp, LOCK_EX);
$num = fgets($fp, 4096);
flock($fp, LOCK_UN);
fclose($fp);
$new_num = $num + 1;
if($new_num >= $text_num){
$new_num = 0;
}
$fp = fopen("num.dat", "w");
flock($fp, LOCK_EX);
fputs($fp, $new_num);
flock($fp, LOCK_UN);
fclose($fp);
ってやって、
SELECT * FROM text_tb ORDER BY text_id LIMIT $num, 1;
です。
----------
DBを使ってるんだから有効活用出来ないものかと模索してますが、
ML、マニュアル等を参照してもかなかな良い情報がありません。
お力をお借りしたく宜しくお願いいたします。
-> 8297 2003-10-20 05:22 ["Tatsuya Kondo" <kon] SELECT でローテーション出力したい 8300 2003-10-20 13:46 ┗["Kawaji, Shinya" <ka] 8301 2003-10-20 14:11 ┗[<lavlav@xxxxxxxxxx> ]