人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

SELECT実行で 「500 Internal Server Error」
下記構成でm_sysテーブルのレコード数が多くなるにつれSELECT実行で 「500 Internal Server Error」が出るようになってしましました。対策ありましたらよろしくお願いいたします。

CREATE TABLE m_sys (
id MEDIUMINT NOT NULL AUTO_INCREMENT,
mon_am1 smallint(1),
mon_am2 smallint(1),
中略
fri_am1 smallint(1),
fri_am2 smallint(1),
PRIMARY KEY (id)
);

INSERT INTO m_sys (mon_am1,mon_am2,tue_am1,tue_am2,wed_am1,wed_am2,thu_am1,thu_am2,fri_am1,fri_am2) VALUES('1','2','3','4','5','6','7','8','9','10');

CREATE TABLE m_schedule_a (
id MEDIUMINT NOT NULL AUTO_INCREMENT,
schedule CHAR(6),
PRIMARY KEY (id)
);

INSERT INTO m_schedule_a (schedule) VALUES('1:00');
中略
INSERT INTO m_schedule_a (schedule) VALUES('10:00');


SELECT
msa1.schedule as mon_am1,
msa2.schedule as mon_am2,
中略
msa9.schedule as fri_am1,
msa10.schedule as fri_am2

from
m_sys m,
m_schedule_a msa1,
中略
m_schedule_a msa10

where
m.mon_am1 = msa1.id
AND
m.mon_am2 = msa2.id
AND
中略
AND
m.fri_am1 = msa9.id
AND
m.fri_am2 = msa10.id

●質問者: wm107p
●カテゴリ:ウェブ制作
✍キーワード:.fr 00 as Char Internal Server Error
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● km1967
●17ポイント

まずはお願いなのですが、

お使いのOS、アプリケーションサーバ、RDBMSの名称とバージョンなど、

何も判らないと原因の特定は難しくなりますので、必須だとご記憶ください。

不適当な回答が集まっても混乱をきたしますから、私への返信欄か、

あるいは、コメント欄を開く設定に変更してコメント欄に、

書き加えておくことを勧めます。


一般論としては、AND式が長すぎるためのエラーと思われます。

その他、まったく正規化がなされていないので

テーブル設計から見直す必要があります。

http://www.mirai.ne.jp/~suehiro/am/kihonyougo/normal.htm


2 ● GreenStar
●53ポイント ベストアンサー

総当りでぶつけてWHEREで絞り込む方法ではメモリも時間も大量に使ってしまう! 必要なものだけ搾り出すように変更する!!

例えば、スカラー副問い合わせを用いれば以下のような感じ!!

SELECT 
 (SELECT b.schedule FROM m_schedule_a b WHERE b.id = a.mon_am1 OFFSET 0 LIMIT 1) mon_am1,
 (SELECT b.schedule FROM m_schedule_a b WHERE b.id = a.mon_am2 OFFSET 0 LIMIT 1) mon_am2,
 中略
 (SELECT b.schedule FROM m_schedule_a b WHERE b.id = a.fri_am2 OFFSET 0 LIMIT 1) fri_am2
FROM m_sys a

http://dev.mysql.com/doc/refman/4.1/ja/scalar-subqueries.html

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ