PHP + MySQL
レス数が900を超えています。1000を超えると表示できなくなるよ。
0001ECY
NGNG0869nobodyさん
03/06/07 01:48ID:???0870nobodyさん
03/06/07 10:54ID:???これって、テーブル(最大512個)をそのままメモリにぶち込んでくれるってこと?
ハードディスクの負担が軽くなると嬉しいけど。
0871863
03/06/07 18:02ID:???それがベストですね。
そんなにリアルタイム性が要求される種類のランキングでもないので、
1日一回更新にします。
さっき解析みたら11秒かかるソート処理が1分に6回くらい呼ばれていました。
プロセスが別だと思うので単純に足し算はできないですが、
多い時にはそれがもっとあったはずなので…。
>>868
3年くらい前に借りた鯖なのでスペック的には結構しょぼいかもしれません。
266MHZはいくらなんでもないと思いますが…。
>>869
一番上のint unsignedがプライマリキーになっています。
0873nobodyさん
03/06/07 23:09ID:???もっとメモリをのせれ
0874873
03/06/07 23:14ID:???インデックスの効果も薄いような・・・
データ取得途中でメモリの空き容量がなくなって、
スワップ起きてるんじゃないかな?
0875nobodyさん
03/06/09 17:12ID:7gQlaCxUmysql_query()でselectした場合、
その時点ですべてのデータが送受信されるのでしょうか?
それともその時点ではポインタのような情報のみ送られて、
mysql_fetch_row()などした時だけ、その分のデータが送られるのでしょうか?
0876nobodyさん
03/06/10 23:45ID:???php_mysql.c,v 1.174.2.12読んだ感じでは、そのままコンパイルすると
PHPのmysql_query()関数でクエリ実行が成功したら、
MySQL APIのmysql_store_result()してるみたいなんで
PHP-MySQL間では結果セット全てを取ってきてますな。
"他鯖"っても同じサーバで動いてようと、
PHPから見りゃMySQLは"別"なんで自/他だろうが変わんないよ
0877nobodyさん
03/06/11 11:09ID:eWSXWUXfSELECT * FROM hogetable WHERE hoge='mona'
としても
SELECT * FROM hogetable WHERE hoge='mona '
としても同じ結果が帰ってくるのですが,
語尾のスペースもちゃんとみるようにするにはどうしたらよいですか?
0878_
03/06/11 11:16ID:???0879nobodyさん
03/06/11 13:09ID:???アドレス帳を作るときに、
電話番号というフィールドを作るのですが、
電話番号を複数持っている場合がありますよね。
こういうときはどういった処理をさせればいいのでしょうか。
単純に電話番号1、電話番号2、電話番号3・・・・
とフィールドをいくつか作るしかないのでしょうか。
0880nobodyさん
03/06/11 13:15ID:eWSXWUXfhttp://www.google.co.jp/search?sourceid=navclient&hl=ja&ie=UTF-8&oe=UTF-8&q=rdb+%E6%AD%A3%E8%A6%8F%E5%8C%96
0881nobodyさん
03/06/11 13:16ID:???0882nobodyさん
03/06/11 13:20ID:???別のテーブルと関連づけてどうのこうのっていう
使い方だけじゃないんですか?
0884nobodyさん
03/06/11 14:02ID:???http://www.google.co.jp/search?hl=ja&ie=UTF-8&oe=UTF-8&q=rdb+%E6%AD%A3%E8%A6%8F%E5%8C%96+%E5%9F%BA%E7%A4%8E&lr=
0885nobodyさん
03/06/11 14:16ID:???0886nobodyさん
03/06/11 14:21ID:???キーを同じくしてオブジェクトを複数作る感じですか。
0887nobodyさん
03/06/11 14:31ID:???http://www.google.co.jp/search?hl=ja&ie=UTF-8&oe=UTF-8&q=%E6%80%A7%E5%99%A8%E5%8C%96&lr=
0888nobodyさん
03/06/12 01:26ID:???SQLの文字列型フィールドの扱いを考えたら判る。更にMySQLの場合VARCHAR型は
「後続の空白は値の格納時に取り除かれる(この空白の除去は ANSI SQL仕様とは違っています)」
という仕様があるので、バイナリ型(BLOB型やTEXT型)を使う形になる。
http://www.mysql.gr.jp/jpdoc/3.23.x/manual.ja_Reference.html#String_types
また、末尾の空白が入る可能性のある"特殊な"フィールドに対して
値の最後尾に必ず何らかの文字を1byte入れると決めておいて、
その1byteを入り/出しの際にハンドリングするようにプログラムを作る
という方法でもある程度はカバー可能かと思う。
0889nobodyさん
03/06/12 10:08ID:rhXQRsqYこれからySQL使おうとしてて、この間インストールしてパスワード設定までしたけど
パスワードを忘れてしまったので、もう一回設定しなおそうと思い、
アプリケーションの追加と削除で全部消してから、インストールしなおしたんだけど、
最初の起動の時って、ユーザー名とパスワード聞かれたのに、
今回は聞かれないんです・・・?
なぜ?アプリ削除しても、どっかに設定の履歴残っちゃってるのかなぁ・・・
検索かけてみたけど、それらしいファイル等は見つからず。。。
でも、パスワードわかんないから、入ろうとしても
ERROR 1045: Access denied for user: 'root@127.0.0.1' (Using password: YES)
ではじかれちゃうんです・・・(T-T)
どなたか、再設定のいい方法知ってますか?
0890nobodyさん
03/06/12 12:04ID:???まずySQLの再インストール
それでもだめだったらMySQLの再インストール
それでもだめだったらOSの再インストール
それでもだめだったら窓から投げ捨てる
それでもだめだったらとりあえずオナニーして帰宅
それでもだめだったら疥癬切手首釣って寝る
0891nobodyさん
03/06/12 14:59ID:???MySQLはユーザ管理情報をデータベース上に持っている。
これは再インストールしても削除/上書きされない
(上書きされるようならかえって困る)
パスワードを忘れたぐらいなら、下記の方法で再設定。
http://www.mysql.gr.jp/jpdoc/3.23.x/manual.ja_Problems.html#Resetting_permissions
読んで意味が判らんとか、Windowsでのやり方を手取り足取りなんて言うヤツは
「アンインストール→インストールディレクトリ削除→再インストール」の手順。
0892nobodyさん
03/06/13 02:22ID:pF2u1x3Jどこ探してもレプリケーション止まりで・・・。
0893879
03/06/13 06:31ID:???serial_idを導入し、
第2正規化までして表を分割することで解決できました。
ここでまた質問なのですが、
この分割した表を結合して表示すると
ID 名前 電話
01 はなこ 03-2222-2222
01 はなこ 00-0000-0000
02 あおき 00-3253-2123
03 なおこ 43-2342-2342
のようにIDが重複して表示されるのですが
コレを
ID 名前 電話
01 はなこ 03-2222-2222
00-0000-0000
02 あおき 00-3253-2123
03 なおこ 43-2342-2342
のように表示させるにはどうしたらよいのでしょうか。
何か便利な機能などあるのでしょうか?
0896nobodyさん
03/06/13 10:16ID:???クラスタリングは出来ない。その辺が必要ならOracleとかPostgresを採用。
マスタ−スレーブ・レプリケーションは可能。つまり検索の負荷分散はできる。
マスタ−スレーブの切り替えは自動では出来ない(スクリプト書きゃ簡易的には出来るのかな)ので
障害時にマスタが死んだ時に、スレーブ→マスタへクラスチェンジするにはちょっとだけ作業時間が時間が掛かる。
#Postgresのクラスタリングも障害対策としてじゃなくて負荷分散化の手法だったと思うけど。
つかDBのクラスタリングはOracleだと150万円ぐらいからの世界だし、元々MySQLが得意とする分野ではないな。
スピードが欲しければCPUの数と何よりも"DiskI/O"を上げた方が手っ取り早いです。
MySQLじゃなくても、Oracleであっても多くの場合そうしてるはず。
0897nobodyさん
03/06/13 10:24ID:???ちょっと違うかもしれないけど
http://www.softagency.co.jp/mysql/emic.html
0898ド素人
03/06/14 13:48ID:FXhQPxM8PHP + MySQLを利用したシステムの設計で悩んでいます。
コスト上の制約で、共有レンタルサーバーでの環境になりそうなのですが、
深夜の決められた時刻にバックアップを自動で行うような事は可能なので
しょうか?
スケジュールによる自動実行は、CRONが一般的なのでしょうけれど、それ
を許している共有レンタルサーバーは、少なそうなもので、CRON以外の実
行方法があれば、教えて頂きたいのですが。
宜しくお願いします。
0899nobodyさん
03/06/14 13:59ID:???MySQLにはMySQLDumpという便利なツールがついていて,
DBの内容をSQL文にしてダンプしてくれる。
これをシェルスクリプトかなんかで圧縮して保管したりftpで別ホストに投げたりするのを書いて,
crontabで時間を決めて実行させるようにすればできる
crontabが使えないのなら,crontabが使える別ホストから,上記のシェススクリプト
を起動するようなスクリプトを書けばよい
0901_
03/06/14 14:30ID:???0902ド素人
03/06/14 14:32ID:FXhQPxM8ご丁寧な返信、ありがとうございます。
やはり、CRON系になりますよネ..。
導入後は、極力メンテナンスフリーにしたいもので、別ホストからのキック
という行為も、避けたかったりなんです。
バックアップしたいのはDBだけなのですが、難しい環境ですよネ..。
PHPやMySQLに、スケジュール実行機能のようなものが用意されていれば、そ
れを使いたいのですけれど、無さそうですし..。
0903899
03/06/14 14:49ID:???たとえばデータの更新をする際にカウンタをとって,INSERTかUPDATEが25かい
行われたらMySQLdumpを起動してバックアップみたいなコードを書くのはどう?
「時間を決めて」にはならないけど
0904nobodyさん
03/06/14 14:49ID:???スケジュール実行つう時点でPHPにもMySQLにもそういった機能はない。
これはUNIX系ならcron,atとかWindowsならスケジュールなんやらの機能。
んでバックアップはdump以外には、SQLのSELECTによるベタ抽出、
DBファイル自体のバイナリーバックアップなんかがある。
>別ホストからのキックは避けたい
まず共有レンタルサーバーでMySQL/cronの両方が使えるところを探す
バックアップは先のバイナリーバックアップやdumpの方法は、共有サーバだと
手段が提供されていない可能性があるので、使えるか確認。
SSH等でコンソール操作が開放されているサーバが良い。
海外サーバだと該当するところで安いところ結構ありますよ。
(極端に安いところは避けること最低US$10/mth以上)
あとサービスにデイリーバックアップがあって、バックアップからの戻し作業に
比較的柔軟に対応してくれるところを探す。ハード障害時の戻しは普通にやってくれる
けどユーザの都合による戻しは、規定サービス外になるからね。
0905nobodyさん
03/06/15 00:16ID:???扱うデータにもよるけど・・・・
0906nobodyさん
03/06/15 00:27ID:???俺はシェル使えない時点で却下。
どんなに安くて良さげな鯖でも。
cron で実行するのはだいたいシェルスクリプトだと思うから
シェルがつかえないんじゃスクリプトの動作チェックもできやしない。
それに SSH 使えりゃ FTP は不要だし、通信路が暗号化されて
データ盗まれる心配もないし。
0907ド素人
03/06/15 19:30ID:ZJ3F1oWLhttp://www.atmarkit.co.jp/flinux/rensai/apache08/apache08a.html
共有レンタルサーバー、プライバシーのレベルで、同居人同士の干渉はシェル
レベルでも避けたいものです。UI上でも、他人の存在は一切知らない/気付か
ないでいたいものです。
負荷の部分でも、干渉を避けたいですけれど、これは借りてみないと分からな
いですし..。
ここまでのアドバイス、大変助かりました。感謝しております。
SQLもPHPもそれほど詳しくないもので、機能として存在するかがネックでした。
また何かありましたら、宜しくお願い致します。
0908nobodyさん
03/06/16 01:04ID:???シェルレベルでは案外きちんと干渉問題にはならない設定になってます。
元々そういう使い方を想定してるから>UNIX系
0909PerlでDBM
03/06/17 15:50ID:nJC3WMH6BSD DB(Berkeley DB)
の方がMySQLより早いのかなわからない。
ので教えてくださいませんか。
サンプル有り
http://www.ecopig.jp/comucale/dbm.htm
0910nobodyさん
03/06/17 16:17ID:???↑のnavicatってどうなん?
DLしてみたけど接続できない。。。
検証お願い〜つД`)
0912nobodyさん
03/06/17 22:16ID:???もう直ってる?
0913nobodyさん
03/06/18 17:23ID:ncBdk+QvDBでカウンタなどを作る場合、一度SELECTで呼び出さずに
UPDATEの時に数値を増やす事って出来ますか?
0914nobodyさん
03/06/19 00:01ID:KVEfyld0初心者で御免
0915nobodyさん
03/06/19 01:12ID:???UPDATE table SET count = count + 1 のように
SETの値に自身を含ませた算術式を用いることでカウントアップができる。
UPDATE文の基本的な使い方なのでマスターすべし。
0916nobodyさん
03/06/19 01:27ID:???有難うございます!
悩んでいたので、これですっきり眠れそうです。
0918nobodyさん
03/06/26 12:56ID:ruPp/IY2データベースの内容を修正しようとしています。
タイプがvarcharなのですが、そこに日本語を使おうとすると、
phpからそこを呼び出して、表示させる際に必ず文字化けしてしまいます。
(phpmyadmin上では文字化けせずにちゃんと表示されるのですが・・)
解決策がありましたら教えてください。
よろしくおねがいします。
0919nobodyさん
03/06/26 13:12ID:???表示させてるエンコードは?
かいてみ。
0920_
03/06/26 13:16ID:???0921nobodyさん
03/06/26 15:03ID:???mb_convertつかったらちゃんと表示されました。
>>919
どうもありがとうございました。
0922nobodyさん
03/06/28 00:23ID:aMKyXNMC大文字小文字を無関係とする検索は可能?
0923nobodyさん
03/06/28 01:52ID:???つかBINARY属性のつかない、普通のCHARとVARCHARフィールドの値はケース依存しない。
http://www.mysql.gr.jp/jpdoc/4.0/manual.ja_Reference.html#CHAR
0925nobodyさん
03/06/28 13:00ID:???数値型のワイルドカードというのはあるのでしょうか?
つまり
select * from table where int >= ○○○;
のような文で、○○○にワイルドカードを入れると常に結果が真になるようなものです。
ご教示願います。
0926nobodyさん
03/06/28 15:55ID:???MySQL以前に「数値型のワイルドカード」って何(数学の問題)?
常に結果が真が欲しいなら"1"とか"1 = 1"とでも書けば良い。
そもそもWHERE節を使う必要もない。
NULLを外したい(数値との条件)のなら、"IS NOT NULL"
○○○の部分だけを変えて動作を切り替えようとしてるから、どうして良いか
判らなくなってるんだと思うけど、普通WHERE以降の条件部分全てを変えるか、
WHERE節ごと変化(付けたり付けなかったり)させる。
0927925
03/06/28 16:24ID:???お返事ありがとうございます。
現在PHPの演習として、HTMLでフォームを作りそこのフォームから送られてきた数値を
SQL文に組み込んで検索させて結果を表示するWebDBを作っています。
で、
$sql = "select * from table1 where percentage >= ". $_POST["percentage1"] ." and percentage <= ". $_POST["percentage2"] ."";
のようなSQL文を作ったのですが、フォームから空白が送られてきた場合にすべてのデータが
HITするようなSQL文を変数の値のみを変更することによって作りたかったのです。
926さんの言うとおり
>○○○の部分だけを変えて動作を切り替えようとしてるから、どうして良いか
>判らなくなってる
ですね。
ご助言ありがとうございました。
とりあえず空白が送られてきたときに条件分岐させて別のSQL文を送るようにしようかと
思います。
0928nobodyさん
03/06/28 16:55ID:???演習だからまあ良いけど、公開しようがしまいが多少なりとも
外に繋がるところに置くなら、ユーザからの入力値をそのままSQLクエリに使っちゃ駄目。
最低でも数値ならPHPでintval関数などを通すとか、is_numeric関数で検証するなどして
期待している通りの値なのか確実にしてから使う。
http://jp.php.net/manual/ja/security.database.php#security.database.sql-injection
他にも"SQL セキュリティ"をキーに探すと参考になるページが見つかると思うので
調べて、危険性について理解しておくこと。
0929ショシンシャ
03/06/30 11:31ID:???select * from test where HOGEのあとになにをいれたらいいんでしょうか。
0930nobodyさん
03/06/30 12:31ID:???HOGE 内の一番右側の文字を取り出すの?
それとも一桁目の数字?
0931ショシンシャ
03/06/30 12:36ID:???レスさんくすでつ。
HOGE内にはユーザーIDをあらわす数字があって、
実はその数字に1をたして次に登録する人のID番号に
したいんでつ。おながいします。
0932ショシンシャ
03/06/30 12:40ID:???$id = $sql_id + 1;
$insert = mysql_query("INSERT INTO membertbl VALUES ($id,$passwd,....
みたいなかんじでつ。
0933ショシンシャ
03/06/30 12:42ID:???3行目
$insert = mysql_query("INSERT INTO test VALUES ($id,$passwd,....
でした。
0934nobodyさん
03/06/30 12:49ID:???0935nobodyさん
03/06/30 12:49ID:???したいんでつ
そのユーザーIDはユニークで、新規登録者に今まで使ってたID+1の
IDを使わせるってことだよね??
idフィールドをauto incrementにするんじゃだめなの?
0936nobodyさん
03/06/30 12:52ID:???今まで使ってた一番大きな数のID
0937nobodyさん
03/06/30 14:03ID:???0938ショシンシャ
03/06/30 14:57ID:???オートインクリメント!(・∀・)
さすがでつ。ありがとうごいますた。
0939nobodyさん
03/07/06 21:31ID:7NRYAhNqphpMyAdminからレコードの追加をすると、phpMyAdminのレコードが文字化けします。
mysql(dos窓)のselectで見ると正常です
色々しらべていじってみたけどわからないです。
↓関係ありそうなphp.iniの設定
mbstring.language = Japanese
mbstring.internal_encoding = EUC-JP
mbstring.http_input = auto
mbstring.http_output = SJIS
mbstring.encoding_translation = On
↓my.iniの設定
[mysqld]
default-character-set=ujis
[mysql]
default-character-set=ujis
[mysql-dump]
default-character-set=ujis
phpMyAdminは(ja-euc)で表示させてます。
0940nobodyさん
03/07/06 22:49ID:???0941nobodyさん
03/07/07 01:38ID:lhtnLc4PMySQLとPHPで基本としたい文字コードはなに?
0942939
03/07/07 23:18ID:???mbstring.http_output = SJIS
をコメントアウトしたらOKでした
>>941
とりあえず出来たみたいです
レスありがとうございました
0943山崎 渉
03/07/15 11:08ID:???__∧_∧_
|( ^^ )| <寝るぽ(^^)
|\⌒⌒⌒\
\ |⌒⌒⌒~| 山崎渉
~ ̄ ̄ ̄ ̄
0944nobodyさん
03/07/23 19:42ID:c/+uzDLaid b c
1 1 1
1 1 5
2 1 2
3 5 1
3 1 2
3 2 0
↓
id b*c
1 6
2 2
3 7
と言った感じに 同IDのb*cを足した数を取得したいのですが
SELECT SUM(b*c) from A GROUP BY id
こう書くと
下のように同じIDのBが足された数に、同idの最後のcを掛けた数が返ってきます
id b*c
1 10
2 2
3 0
どこを直せば良いのか検討もつきません、誰か助けて
0945944
03/07/23 20:23ID:c/+uzDLa自己解決しました。
0946nobodyさん
03/08/10 03:00ID:fzrQOeyOサイトのipは*.*.*.100
なのに、
別鯖のmysqlにアクセスすると、ipが
*.*.*.2になります。
これはモジュール版だからでしょうか?
別のバーチャルホストのphpも*.*.*.2で走ってるとすると、
ちょっとセキュリティー的にどう? と思うのですが
(もちろんパスはかけていますが)
こんなものなのでしょうか。
0947_
03/08/10 03:03ID:???0948山崎 渉
03/08/15 22:38ID:???│ ^ ^ │<これからも僕を応援して下さいね(^^)。
⊂| |つ
(_)(_) 山崎パン
0949nobodyさん
03/08/18 00:26ID:I4OY3KuJxreaで昨日pconnect使ってみたところ負荷が上昇したので…
デイリーアクセスが6000程度、リクエスト数が300000程度
リクエストの7〜8割がMysqlを利用するCGIです
レス数が900を超えています。1000を超えると表示できなくなるよ。