2008年9月30日火曜日

php csvダウンロードで画面が真っ白

ユーザデータ(3000件くらい)をダウンロードしようと思ったら

Firefoxで画面が真っ白になった。

IE7では、「つながりません」エラー。

条件を絞って200件くらいにすると、問題なく出来る。

ローカルでは問題なかったので、サーバ環境のメモリーがおかしそう。

そこで、サーバに

<?php phpinfo() ?>

と書いたファイルを置いて、メモリーを見てみる。

サーバ:memory_limit = 16M

開発:memory_limit = 128M

これが原因ですね。

このサーバは、専用なので、直接php.iniを書き換え。

memory_limit = 128M

Aapcheを再起動して、ダウンロードできることを確認。

ふ~やれやれでした。

2008年9月27日土曜日

MySQL 複数の結果を1行にまとめる

各ショップに毎に設備が入った複数レコードがあるとする

shop_id, setsubi_id

1           ,1

1           ,2

1           ,3

みたいなデータがある場合

SELECT shop_id, GROUP_CONCAT(setsubi_id) FROM テーブル

とすることで、コンマ区切りの文字列で

1 (1,2,3)

といった1行のレコードが取得できる。

GROUP_CONCATの引数で、コンマじゃなくて、セパレータは変えれるみたい。

http://dev.mysql.com/doc/refman/4.1/ja/group-by-functions.html

さらに、こいつ(=strとする)を

LOCATE関数にかけて

IF(LOCATE((str),1) > 0, 1,0)とかすると、IDが存在するかチェックできる

のかな?

2008年9月12日金曜日

SELECTの集計結果を UPDATE

Mysql で二つのテーブルがあって、一方のテーブルで集計したものを

もう一方のデータにいれたい場合、

KeyがユーザーIDで結びついてるとすると

UPDATE user AS u
SET total = (
SELECT SUM(s.score) FROM score s
WHERE s.user_id = u.id
GROUP BY s.user_id
);

となる。

WHERE 書いてからGroup by 構文を書くんだね。

まーそうなんだろうけど、ややはまった。