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> ]