[前][次][番号順一覧][スレッド一覧]

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