1 :
NAME IS NULL :
2005/11/28(月) 17:30:14 ID:f9hq29Ct
2 :
NAME IS NULL :2005/11/28(月) 17:30:56 ID:f9hq29Ct
おつ
乙!
MySQLのSELECTクエリの複雑な使い方について取り扱っているサイトがあれば紹介してもらえませんか。
>>6 そんなもんマニュアルが一番に決まっておろう。
MySQL ではなくて SQL 自体がわかんねーというのならスレ違いだよ。
8 :
NAME IS NULL :2005/11/28(月) 22:47:36 ID:G+2VwGHf
DBを使い続けてると、検索などが遅くなるので 再編成?、再構成?とやらをする必要があるそうですが、 MySQLでは具体的にどんなことをするのでしょうか
10 :
NAME IS NULL :2005/11/28(月) 23:03:53 ID:+VgsSW6w
MySQLの特徴として 「一度に一つのインデックスしか使えない」という仕様がありますが サブクエリを使った場合は事実上複数のインデックスを使うことが 可能になりますか?
11 :
NAME IS NULL :2005/11/28(月) 23:16:36 ID:CrG8+bt1
>>8 事例的に一番多いのはインデックスの貼り忘れらしい(MySQL ABの人がカンファレンスで言ってた)。
適切なインデックスを追加ってことになるだろう。
>>10 MySQLのインデックスの特徴は、各インデックスがそれぞれ1発で行の位置を特定できるようになっている、
という理解の方が適切だと思うのだけどね。
インデックスというものの仕組みを考えてみてね〜。
14 :
NAME IS NULL :2005/11/29(火) 13:11:42 ID:Y3dDhzDp
cronについて質問なんですが 指定した時間ごとにExcelで外部データを読み込むなどといった 細かいことも設定できますか?
>>14 Excelの質問はExcelのスレで。
Windows上での指定時間毎でのプログラムの起動については、Windowsのスレで。
(タイムスケジューラかat使うんでなかったかい)
16 :
14 :2005/11/29(火) 14:23:18 ID:???
わかりました。Windowsのスレのほうで聞いてみます。
>>2 なんでかなり使えるmysqlccを消したんだ?
18 :
NAME IS NULL :2005/11/29(火) 17:26:22 ID:DYkboeX6
SQL文について質問です。 以下のテーブル例で、 AND検索でnoが同じ中で検索したいんです。 つまり、includeとhでAND検索した場合、 noの1と2が出力されるようにしたいんです。 どなたかお願いします。 no word -------------- 1 include 1 stdio 1 h 2 include 2 h 2 int 2 main 2 void 3 include 3 printf 3 return
>>18 select t.no from t
left outer join t as tsub on t.no = tsub.no
where t.word = 'include' and tsub.word = 'h';
>>17 だーかーらー。mysqlccの代わりにmysqladministrator使えってMySQL ABが言ってるからだろ。
文句言う前にmysqladministratorを一度DLしてインスコしてみろ。
22 :
NAME IS NULL :2005/11/30(水) 17:48:53 ID:f0aZ6So3
MySQL4.1において サブクエリは実装されているようですが,ビューの作成は可能ですか?
23 :
NAME IS NULL :2005/11/30(水) 18:17:35 ID:3MwnewXL
order by対象数が多くなると、 いくらインデックス張ってlimitしても、速度が遅くなりますよね。 limit0,100は速いですが、 limit50000,100等になると、 インデックスの数え直しだけで時間がかかるのか、 パフォーマンスが落ちます。 こういった問題に対して、どのような解決方法があるのでしょうか? ある程度、問題を分割するしかないと思うのですが、 具体的にどうすればいいのか…。
>>22 MySQL サーババージョン 5.0 または 5.1 で実装されます。
Mysql側でlimitをかけてページ構造を作る際、 [前へ] 1,2,3,4,5.. [次へ]といった各ページへのリンクを生成するために 全体の行数を知りたいのですが、カウント用の新たなSQL文を作らずに これを得る方法はありますでしょうか
26 :
NAME IS NULL :2005/11/30(水) 23:26:49 ID:hv27sch7
アゲ忘れ・・
27 :
1 :2005/11/30(水) 23:41:02 ID:???
>>17 MySQLCCを外した理由ですが、
MySQL ABの発言で
・MySQLCCは数年前に開発は停止。MySQL ABでは継続の予定はない。
・GUI TOOLはMySQL AdministratorとMySQL Query Browserを開発する。
とあり、事実開発は随分と前に停止したままなのでリンクから外しました。
もっとも現在もアーカイブから入手可能ですし、
http://downloads.mysql.com/archives.php?p=mysqlcc 日本語化しちゃって使い込んでる人は、暫く変える必要性はないと思いますが、
少なくてもこれからの人には薦められません。
ただMySQL Administrator/Query BrowserがMySQLCCの後継かというと
あくまでも別ものなんですがね。
>>25 どのみち、SQLは2回発行するしかないんだが。。。
SELECT SQL_CALC_FOUND_ROWS カラム名 FROM テーブル LIMIT xxx;
でSQLをLIMITの件数だけ取得した後
SELECT FOUND_ROWS();
でLIMITのかかっていない件数が取得できる
なにかで読んだだけで、実験はしていないけど COUNT() 使う方が早いらしいけれどね。
>>28 おぉ、しかしfound_rows();なんてモンがあったとは
勉強になりますた
どっかでSQL_CALC_FOUND_ROWSとfound_rowsを
一文にまとめてる例があったんですが
試してみるとやはりSQLを分けないと無効なんですね
どうもでしたー
1024文字の固定長char型を作りたいんだが、 charで作ろうとしたら255文字までだゴルァ!と怒られた。 代替手段としてBLOBとTEXTを推奨されたが、 BLOB・TEXT共に可変長で、VARCHARの延長線上 可変長使うことで速度向上が期待できるような記述もあったんだが、 実際問題、レコードが固定長と可変長で可変長の方が速い? レコードを固定長にすることで、シーク位置・レコードサイズが乗算で求められるので高速化に繋がると思ってたんだが・・・ ベンチマークでもやってみろってことなんかな
固定長の方が速いよ。理由はその通り。
>可変長使うことで速度向上が期待できるような記述もあったんだが、 可変長で無駄なデータ領域が圧縮されることで、 I/Oブロックあたりに格納できるレコード数が増えるので速度が向上する。 >レコードを固定長にすることで、シーク位置・レコードサイズが乗算で求められるので高速化に繋がると思ってたんだが・・・ これもその通り。 問題は固定長のフィールドだけから構成されるレコードをMySQLが 特別にこういう最適化をしてくれるかどうかだな。 なんでもFirebirdは固定長派らしくてVARCHARは最大長分の領域を必ずキープしてるらしい。
>>30 幸いオープンソースだから、1024文字の固定長char型が使えるようにソースを弄れば?
他に便利だと思う人が多ければ、公式サポートに成る可能性が出てくるし。
>>32 普通は可変長だとseekしまくる分遅いと思うけど。固定長なら計算すれば位置分かるし。
> なんでもFirebirdは固定長派らしくてVARCHARは最大長分の領域を必ずキープしてるらしい。 DBとはちょっと違う気がするな。 malloc/freeのメモリ管理に要する命令数を稼ぐ効果があるが。
商用ライセンスで使用する場合、以下の場合ではいくつのライセンスが必要なのでしょうか? (A)二台のMySQLサーバをインターネットなどで不特定多数が使う場合は1ライセンスなのでしょうか?それとも2ライセンスなのでしょうか? (B) MySQLを内部で使用するソフトウエア軍(10個のバイナリからなる)を作成し、同じソフトウエアを3人に販売する場合は3ライセンスですか?
>>35 商用ライセンスのことはメーカか代理店に訊けよ。
あっちもビジネスのことだからちゃんとケースバイケースで
適切なパターンを回答してくるよ。
多分
(A)2ライセンス。ただそこに接続するためのクライアントソフトをMySQLのライブラリを
使用した上で非GPLで配布する場合はどうなるかは、ちゃんと訊くべき。
(これはソフトの作りと配布方法などで、色んなケースがある。完全専用の時は
クライアント個別には要らないと回答されたことがあるが、自分のケースでも同様かは自分で確認すること)
(B)そのソフトウェア群の個別のソフトそれぞれが同時に違うPCにインストールして使用
できる(ライセンス的な話でね)なら、PC台数分ライセンスが必要。要するに3人×PC台数ね。
そうでなければ3人分(PC3台分)
37 :
NAME IS NULL :2005/12/02(金) 13:55:10 ID:i693pvse
MySQLを一回消したいんだけど、どうすれば???
>>33 >普通は可変長だとseekしまくる分遅いと思うけど。固定長なら計算すれば位置分かるし。
ブロック単位のI/Oとキャッシュ効果でseekしまくるってことは無いと思うぞ。
仕掛けは複雑になりメモリもそれなりに必要になるから、
プログラムで直接読み書きするなら固定長が扱いやすいのは同意だが。
それでMySQLで固定長レコードにしたら速くなるの?
インデックス化してるだろうから、微妙な差で そんな変わらないんじゃない?
>>37 何らかのインストーラかパッケージ管理ツールで入れたなら、
そのアンインストール手順に従えば消せる。dataディレクトリは
アンインストールプロセスによっては残す場合もあるので、それは手動で消す。
42 :
37 :2005/12/02(金) 15:34:09 ID:i693pvse
43 :
NAME IS NULL :2005/12/02(金) 16:44:50 ID:tY+XsHxk
44 :
NAME IS NULL :2005/12/02(金) 17:11:48 ID:c/4Wdly0
A表のカラムが外部キーとして,B表のカラムを参照している場合 B表のレコードを全て削除しようとすると警告が出ますが これを無視して強制的にA表のレコードを削除・変更することは 可能ですか?
>>38 キャッシュの中をシークしてるのは同じだろう。
1GBとかの巨大なDBファイルの中をシークしたら固定長と可変長で違いが出る悪寒。
検証したわけじゃないけど 固定長のみでテーブル構成したら速くなると 「実践ハイパフォーマンスMySQL」や 「 MySQL全機能リファレンス」に書いてあるよ。 一つでも可変長カラムが入ると、別種になるとのこと。
>>45 もしかして可変長のレコードが先頭からびっしり詰まって格納されてると思ってるの?
MySQLも同じような仕掛けだと思うけど、一般的なDBでは読み書きする単位のブロックがあって、
ブロック長は固定でブロックの中に可変長レコードがいくつか入っている。
当然尺が合わないで使われないで残ってる領域がある。
レコードはブロック番号とブロック内の順位で管理される。特定のレコードを読み込む場合は、
まずブロックを固定ディスクから読み出す。ここは「固定長なら計算すれば位置分かるし」だよね。
あとは半導体メモリ上でブロックの中から必要なレコードを抜き出す。
何GBあってもシークの効率は変わらない。
>>46 管理を別にしてるんですか、賢いDBだな。ちょっと見直した。このことが知りたかったんです。
0からMySQL(SQL構文を含め)を習得するには、まずどの本を読むべきですか?
リファレンスマニュアルのサイトとハイパフォーマンス本だけでいいよ。
んー、正規化くらい知らないとよろしくないんでは? どの本に書いてあるかは知らないけど。 (データベース論の本には載ってるが、そんなの読みたくなかろうし)
53 :
NAME IS NULL :2005/12/03(土) 16:18:35 ID:0zoPP5bK
GUIしか使えないのにMySQLって無謀じゃね? 他のGUI前提DB使った方がいいよ。
mysqlコマンドで接続しようとしたとき mysql -u hoge -ppiyo tablename は接続できるのに mysql -u hoge -ppiyo -h ipaddress tablename がエラーになるのは 何が原因のときですかね ERROR 2003: Can't connect to MySQL server on 'ipaddress' と出ます。 ipaddressは自分自身のIPアドレスです
56 :
55 :2005/12/03(土) 20:04:16 ID:???
あ、原因が少しわかった netstatで見たら待ちうけポートが 127.0.0.1:3306 になってる・・・ 0.0.0.0:3306で待ってもらわないと困るのになぁ 何が原因でこんなヘソの曲げ方を・・・
>>53 かねやん、XPで使えないのはそのせいだったか。
俺はコマンドプロンプトで打ち込みながら勉強します(^^;。
そんなアドレスありえないだろー
listenで0.0.0.0=anyの意味になる。
>>53 Common SQL Environment
っても、テーブル作るのでもSQL書くけどな。
>>60 ありがとうございます。
インストしてみたけど接続できない・・・。
MySQLのバージョンが5.0だからかなー?
>>61 4.1.15でもプログラムエラーで駄目(^^;
63 :
60 :2005/12/04(日) 01:22:13 ID:???
ヒント:パスワード形式
64 :
NAME IS NULL :2005/12/04(日) 01:26:10 ID:m97nwyo2
>>57 かねやんはXPで使えますよ。
自分つかってますよ。
ハッシュの設定がうまいこと動かなくて
DOSでパスの更新とかしながら
ユーザー登録したりしてますけど・・・
しかしかねやんは、なかなかのこまったさんです。
>>63 ヒントがわかりません。
バージョン3までしか対応してないでファイナルアンサー?
>>56 0.0.0.0は駄目だよ。ネットの勉強した方がいい。
67 :
60 :2005/12/04(日) 08:42:33 ID:???
>>56 my.cnf の bind-address を見れ
挿入時に、一時的にインデックスの更新を止めたいとき、 /*!40000 ALTER TABLE tbl_name DISABLE KEYS */ を流すといいと書かれているのですが、この前の40000とは、4万レコードという意味でしょうか? 何か別のコードでしょうか? 4万件以上、対象レコードがある場合は数字を増やした方がいいのでしょうか?
>>69 >/*!40000 ALTER TABLE tbl_name DISABLE KEYS */
を「流すといい」、なんてどこに書いてあったか教えてくれるか?
漏れの知る限り、mysqldumpに-Kオプションを付けると、バックアップファイルに上記の構文が挿入される、って動作しか知らないけど
ダンプファイルに記述されるってことは、 流しても有効じゃないんですか? ダンプファイルのこの記述は、効果なしってことでしょうか?
72 :
NAME IS NULL :2005/12/05(月) 03:48:49 ID:Md2InYGC
>>69 その40000は、バージョン4.0.0以上ではコメント部が有効になり解釈されるという意味
74 :
55 :2005/12/05(月) 09:31:19 ID:???
76 :
NAME IS NULL :2005/12/05(月) 13:42:58 ID:n3fM2t7h
77 :
71 :2005/12/05(月) 16:56:48 ID:???
やったけど、速度的な効果が見えなかったので質問してみました。 後出しの情報で、すまんです。
>>77 いや、やったなら問題ないよ
やってなきゃぶっとばすとこだ
79 :
NAME IS NULL :2005/12/05(月) 20:27:34 ID:inuQmW0c
book_id book_title //本テーブル 1 ももたろう 2 きんたろう 3 白雪姫 author_id author_name //著者テーブル 1 たかし 2 はなこ 3 ひろゆき book_id author_id //本と著者を繋ぐ奴 1 1 1 2 2 1 3 3 book_title author_name ももたろう たかし&はなこ きんたろう たかし 白雪姫 ひろゆき こういうところから 著者がたかし&はなこ のレコードだけ取り出すにはどうしたらいいのですか?
80 :
79 :2005/12/05(月) 20:34:17 ID:???
MySQL 4.1.7です
>>79 MySQLだと他の方法もありそうだが、一般的なSQLではこんな感じ。
select ba1.book_id from 本と著者を繋ぐ奴 ba1 inner join 本と著者を繋ぐ奴 ba2 on ba1.book_id = ba2.book_id
where ba1.author_id = '1' and ba2.author_id = '2'
83 :
NAME IS NULL :2005/12/06(火) 23:41:17 ID:F6RPcbOs
553223個のテーブルを CREATE TABLE `478950571` ( `index` int(5) unsigned NOT NULL auto_increment, `d` date NOT NULL default '0000-00-00', `lup` int(7) unsigned NOT NULL default '0', `m` int(3) unsigned NOT NULL default '0', `r` int(9) unsigned NOT NULL default '0', PRIMARY KEY (`index`) ) ENGINE=InnoDB DEFAULT CHARSET=sjis AUTO_INCREMENT=1 ; のような構造で作りたいのですが 後にテーブル名となる、553223個のデータ(MySQLにレコードとして 記録されています)から上のテーブルを作る SQL文をどうやって作成したらいいでしょうか? よろしくお願いします。
85 :
NAME IS NULL :2005/12/07(水) 00:41:59 ID:OFeSrOA1
>>84 してみたのですけど
データが大きすぎて固まってしまいました。
86 :
NAME IS NULL :2005/12/07(水) 00:43:51 ID:OFeSrOA1
置換とかする専用のソフト「repl_ace」 でもやってみたんですが、 それでもだめでした。
553223個のテーブルを作るってどんなものを作ってるんだw
88 :
NAME IS NULL :2005/12/07(水) 01:18:30 ID:xSIao4zF
>>83 このテーブル、作るだけでも半日かかるぞ
設計の見直しをしたほうが良くない?
耐久か限界テストでもしたいのか?動悸を知りたいな。
90 :
NAME IS NULL :2005/12/07(水) 02:10:41 ID:OFeSrOA1
目的はアマゾンの中古品の価格調査です。 プログラムの勉強がてらJavaとか いじっています。 アマゾンのサイトからISBNを全て(100万ほど) 集めるとこまではいったのですが・・ フィールド数を増やしていくという手も 考えてはいるんですが・・ やっぱりなんとかしてテーブルを増やして いきたいです。
>>90 他の人も疑問に思うと思うのだが
(それが噛み合わない部分)
>やっぱりなんとかしてテーブルを増やして
>いきたいです。
なんで?
ISBNテーブル作って その中に追加するのでいいじゃん
93 :
NAME IS NULL :2005/12/07(水) 02:38:11 ID:xSIao4zF
ISBNコードのフィールドを追加すれば、一つのテーブルでOKだと思うけど
94 :
79 :2005/12/07(水) 02:38:55 ID:???
>>82 そのやり方だと著者が三人、四人と増えた場合は
「inner join 本と著者を繋ぐ奴 ba3 on ba1.book_id = ba3.book_id」
を増やすんですか?
95 :
NAME IS NULL :2005/12/07(水) 02:40:05 ID:xSIao4zF
データベース設計の初歩として、名前は違うけど同じ構造のテーブルが複数ある というのはおかしいよ。 意図的なものなら別として。
96 :
NAME IS NULL :2005/12/07(水) 02:42:29 ID:o1g4ijyk
一意のパスワードを自動生成して登録する処理なんですが、 プログラムでランダムな文字列を生成して select文で既存じゃないかチェックして 既存の時は再度文字列を生成する。 って処理をやってるんですが、これだと同時登録で重複データが出てしまうんです。 UNIQUEキー制約でチェックするのは他のエラーと切り分けるのが嫌なんですが、 そうするとテーブルロックしかないですか?
97 :
NAME IS NULL :2005/12/07(水) 02:50:34 ID:xSIao4zF
テーブルロックにしてもINSERT時のエラーチェックは入れるでしょ。入れない? それなら、UNIQUEキー制約でチェックするでいいと思うんだが。
98 :
NAME IS NULL :2005/12/07(水) 03:04:28 ID:o1g4ijyk
INSERT時のチェックはもちろんしてます。 ただ、この処理は登録されてない値が出るまでループするしかないと思うんです。 で、データベース側のエラーに対してループをまわすのはどおかと思いまして。。
99 :
90 :2005/12/07(水) 03:07:15 ID:OFeSrOA1
>>95 全てのISBNの
日にち、価格、個数、ランキングを
何日かおきに取っていきたいのですが
それでも、日にちごとにフィールドを増やして
いったほうがいいでしょうか?
100 :
NAME IS NULL :2005/12/07(水) 03:20:26 ID:xSIao4zF
>>98 それでも、UNIQUEキー制約を薦めます。
というのは、テーブルロックを使用した場合、アプリケーション側でミスをする
可能性があるからです。つまり、将来的に、パスワードを登録する別のプログラム
が走った場合、そのプログラムがテーブルロックをし忘れる可能性もあるわけです。
UNIQUEキー制約とは、どんな登録アプリケーションでも重複したデータは登録
出来なくするということですから、将来の拡張も考えると、そのほうが、つまり
UNIQUEキー制約を掛けておいたほうが良いと思われます。
>>99 どんなコンピュータで使うのか知らんが、データベースの設計云々に関わらず遅かれ早かれ使い物にならないと思うよ?
102 :
NAME IS NULL :2005/12/07(水) 03:43:10 ID:xSIao4zF
>>99 やりたいことが良く判らないので。
中古品の書籍に関して、日ごとの販売個数と販売ランキングを格納するテーブル
を作りたいということでしょうか?
テーブル:Book
フィールド1:bookcd <- プライマリーキー/auto_increment
フィールド2:ISBNコード <- UNIQUE制約
フィールド3:書籍に関する情報(著者とか)
フィールド4:書籍に関する情報(著者とか)
・・・・・・・・・・・・・
テーブル:Sales
フィールド1:bookcd <- テーブルBookとリンク/book+日付でプライマリーキー
フィールド2:日付
フィールド3:販売数
コレではダメですか?販売ランキングはSQLで出ると思います。
基礎も何もわからない状態で数十万件以上のデータを管理しようという時点で既に間違ってる。 数万オーダーから初めて、どういう方法だとどのくらいの件数で大変なことになるか経験した方がいい。 数万オーダーでも相当な量だぞ? 人間が毎日数万件のデータなんて見れないからな。
104 :
90 :2005/12/07(水) 03:52:33 ID:OFeSrOA1
>>102 そういうやり方は考えていませんでした。
それでやってみようと思います。
どうもありがとうございました。
105 :
90 :2005/12/07(水) 03:54:22 ID:OFeSrOA1
106 :
102 :2005/12/07(水) 04:02:46 ID:xSIao4zF
>>104 ,
>>105 初心者ならしょうがないです。
私も、かつて5000くらいのテーブルを作り散らかしたことがありますから。
しかも、教育でなくて実際の業務。しかも今も稼動している!
お化けみたいなDBを作ってしまっても、それを評価できて、次の設計にフィードバック
出来るようにしましょう。
私に限らず、DB設計をかなりやっている人は、かつていイタい思いをしているはずです。
マニュアルを見ただけでは判りませんからね。DBの評価は。
イタい思いをするのも経験といえば経験。
プログラム全般に言えるがもし自分が生まれ変わっても DBの習得過程だけは2度と繰り返したくないなと思う 1人でもマスターしてる人間がそばに居れば別なんだが
108 :
NAME IS NULL :2005/12/07(水) 06:59:52 ID:frlooE31
つか、 >フィールド3:書籍に関する情報(著者とか) >フィールド4:書籍に関する情報(著者とか) >・・・・・・・・・・・・・ ってのは、いかがなものか...
>>553223 個のテーブル
55万個? 他の人も言ってるが、パフォーマンス的にもバックアップとかの運用的にも自殺行為だなこりゃ。
ひさびさに面白い発想だな。
>>94 そうなります。
他に積集合を使う方法もあります。MySQLで使えるかどうかは知らないけど。
select book_id from 本と著者を繋ぐ奴 where author_id = '1'
intersect
select book_id from 本と著者を繋ぐ奴 where author_id = '2'
112 :
NAME IS NULL :2005/12/07(水) 14:52:57 ID:7ZyY2ZjN
その発想はなかったわ
>>90 なんか大規模手がけてる気になってるみたいだけど
基本設計ができてないだけじゃん。 そんな難しい話じゃないよ。
あなたが住民基本台帳の設計したらテーブルいくつ必要になるわけ?w
ISBNコードは足りなくなるとコードの再利用をするから書籍を特定する完全なキーには使えない。 ISBN4-1234-5678-9のうち先頭の数字は国別番号で9はチェックデジット、1234-5678の8桁このうち 先頭数桁が出版社コードで出版社の規模によって桁数が異なる。 新興の出版社で急に出版数が増えた場合などはかなり短いサイクルで同じコードが再利用される。 以上トリビアでした。
逆に、同じ本なのに版を重ねるとかそういうレベルで ISBN を付けなおす出版社もあると聞いたことがあるぞ。 で、完全には使えないのは確かにそうなのだが amazon の ASIN は書籍につい ていえば ISBN なのだし、元質問者の意図には問題なしということでひとつ。
なんか問い合わせるたびに55万のテーブルをunion allする姿が目に浮かぶ。
まずは脳内ER図を晒せ。 話はそれからだ
118 :
79 :2005/12/07(水) 17:56:11 ID:???
>>111 違う方法ですが解決しました。ありがとうございました。
先日から Windows版 MySQL 4.0.26 を使用しています。 売上管理を行うため下記のようなテーブルを3つ作成しています。 テーブル名:sale sale_id customer_id ei_send_id no_send_id ---------------------------------------------- | 10001 | C10001 | E10001 | E10005 | | 10002 | C10002 | E10001 | E10005 | | 10003 | C10003 | E10002 | E10003 | | 10004 | C10002 | E10002 | E10007 | ---------------------------------------------- テーブル名:customer customer_id name ----------------------- | C10001 | 山田 | | C10002 | 田中 | | C10003 | 浜田 | ----------------------- テーブル名:customer_etc send_id code etc_name ----------------------------------- | E10001 | EI | 第1営業所 | | E10002 | EI | 第2営業所 | | E10003 | NO | 第1納品先 | | E10004 | EI | 第3営業所 | | E10005 | NO | 第2納品先 | | E10006 | EI | 第4営業所 | | E10007 | NO | 第3納品先 | ----------------------------------- この3つのテーブルから下記のような表を表示したいのですが sale_id name etc_name etc_name -------------------------------------------------- | 10001 | 山田 | 第1営業所 | 第2納品先 | | 10002 | 田中 | 第1営業所 | 第2納品先 | | 10003 | 浜田 | 第2営業所 | 第1納品先 | | 10004 | 田中 | 第2営業所 | 第3納品先 | -------------------------------------------------- 下記のように入力して select s.sale_id,c.name,customer_etc.etc_name,no_send_id from sale as s inner join customer as c using (customer_id) inner join customer_etc on customer_etc.send_id = s.ei_send_id; sale_id name etc_name no_send_id -------------------------------------------------- | 10001 | 山田 | 第1営業所 | E10005 | | 10002 | 田中 | 第1営業所 | E10005 | | 10003 | 浜田 | 第2営業所 | E10003 | | 10004 | 田中 | 第2営業所 | E10007 | -------------------------------------------------- まで表示する事が出来たのですが納品先の名前が表示する方法がわかりません。初歩的な質問だと思うのですが 教えて下さい。 お願いします。
>>119 そこまで出来ていて、悩む理由が良く判らないが、オマイさんの提示したSQLに2ヶ所追加。
customer_etc は営業所マスタと納品先マスタの2つに分けた方が良いように思うけど
何か意味があるのかな。。。ま、どうでもいい話だが。
select
s.sale_id,c.name,customer_etc.etc_name,no_send_id
, n.etc_name //追加
from sale as s
inner join customer as c using (customer_id)
inner join customer_etc on customer_etc.send_id = s.ei_send_id
inner join customer_etc as n on n.send_id = s.no_send_id; //追加
学校の宿題の臭いがする
122 :
119 :2005/12/07(水) 20:27:07 ID:???
>>120 inner join って繰り返せるのか… 知りませんでした。
仰るとおり納品先と営業所を別ければ良かったのですが今更、仕様を変更できなくて(;´д⊂)
早速のレスありがとうございました。
本当に助かりました!
>>121 違いますよ。
学校の宿題じゃないです。
でも学校の宿題に出るレベルだってことですよね。
こんなの聞いて恥ずかしいッス(;´Д`)
MySQLに特化しない話ばっかだな
124 :
NAME IS NULL :2005/12/07(水) 21:56:35 ID:OtnhzFLc
一般的にひとつのシステムがあった場合、 ひとつのDBに全てのテーブルを入れるやり方と、 DBを複数作って、テーブルを分散させるやり方、 どちらが一般的なのでしょうか?
125 :
NAME IS NULL :2005/12/07(水) 22:00:10 ID:Hb5pr023
>>124 >DBを複数作って、テーブルを分散させるやり方、
これはちょっと一般的ではないような。
DBを複数作るって、サーバーにとっては負荷のかかることだと思うけど。
とくにメモリーね。
あと、DB間のデータの整合性を取るのはなかなか厄介。
データベース論の教科書くらい読もうよ。。。
127 :
NAME IS NULL :2005/12/07(水) 22:11:27 ID:Hb5pr023
>>124 分散データベースを作るとか、そういう特殊な事情があるんですか?
mysql4.1.15を"--skip-character-set-client-handshake"のオプション付きで稼動または停止させるバッチファイルを作りたいのですが、どのように書けばいいのでしょうか NET STARTだとオプション付けられないんで・・・
>>124 「一般的」ってことなら、そりゃ1つのDBに入れるんでしょう。
分散するなんてよっぽど本格的なケースでっせ。
ってか、DBとテーブルって用語を間違って使ってたりしないよね…
夜な夜なMySQLを独学し始めたのですがユーザ管理についてどうしても分からないのです。 このような場合、ユーザ:rootが2つあり、片方のみにパスワードが入っている状態はまずいのでしょうか? パスワードの無い方を消してしまっても問題はないのでしょうか? どうかよろしくお願いします。 mysql> select User,password from mysql.user; +------+----------+ | User | password | +------+----------+ | root | 暗号化されたパスワード| | root | |←こちらにはなにもなし | | | | | | +------+----------+
131 :
NAME IS NULL :2005/12/08(木) 00:07:31 ID:7TVWSR0Z
>>114 純粋に質問だけど、雑誌コードじゃなくて書籍のISBNで、
同じ番号が異なる複数の本に割り当てられることがあるわけ?
コマンドラインから./mysqld_safeとしてを起動した際、自然にはシェルに戻ってこないものでいいのでしょうか? 何かを壊したかな・・・
ISBNの規定では、再利用は明確に禁じられているけれど、 出版社が勝手に絶版になった本の番号を別の本に割り当てる ことがある。 もっと信頼性の高い番号として、各国の国立図書館が、国内で 発刊された書籍に割り当てるNBNというものがある。
134 :
133 :2005/12/08(木) 00:20:04 ID:???
で、ISBNの重複は、あくまでも『一部の出版社の誤り』ということになっているので、 実用上は問題ないはず。
>>132 mysqld_safe &
にしとけ。つかマニュアル嫁
136 :
NAME IS NULL :2005/12/08(木) 01:28:37 ID:q4xs/OQo
>>131 十年位前にOpenGL関係の新刊を
ISBNを指定して○善に注文したら
同じISBNの「スクリーンセーバーを作ろう」みたいな
本が来ちゃったことある。
注文し直したら、やっぱ同じ本が来た。
思いあまって、いっそのこと
3Dのスクリーンセーバー作ろうかと思った。
>>136 ぎゃぁ、そりゃ、あんまりな・・・ お気の毒様。
138 :
NAME IS NULL :2005/12/08(木) 11:16:31 ID:r3NpMV/e
ぶっちゃけ、mysqlを商用利用してるケースでちゃんとライセンス料を払ってるの 率ってどの程度なんだろうか。っていうか、お前ら払ってる?
>>138 払ってると思うよ。
初めからMySQLを商用ライセンスやGPLに反して使うつもりなら、MySQLじゃなくてPostgreSQLとかOracleをつかうんじゃないかな?
どうかなあ? そもそもMySQLを使うLAMPのようなLinuxとかを導入するのって予算的都合だから、払わないで知らんフリしてるんじゃないの? 予算が有れば最初からオラクル導入してサポートも契約するだろうし。
ISBNの桁数って何年後に増える予定だったっけ? だいぶ前にニュースになってたけど。
142 :
139 :2005/12/08(木) 14:27:01 ID:???
よくわかんない文章だったかなあ。 MySQLをライセンス違反で使うようなタイプの人は、OracleのDev版とかをライセンス違反で使うことの方を選ぶんじゃないかな?
>>138 ノシ 払ってるよ。
ライセンスの値段削って受注するぐらいだったら、
最初からそんな仕事受けないよ。悪徳建物デベロッパーでもあるまいし。
ただ商用でもGPLでOKなところでは、予算に余裕がありそうだったら
商用ライセンス買ってるけど、GPLのままがやっぱり多いね。
MYSQLの商用ってどこからが商用になんの? MYSQL使うようなPHPスクリプトを売ったら駄目なの? MYSQL使ってるショッピングカートで物売ったら駄目なの?
>>145 各々のソフト(MySQL/PHP/ショッピングカート)のライセンスを
一度でもいいから、ちゃんと読んでみ。
148 :
139 :2005/12/08(木) 18:40:29 ID:???
俺は専門家じゃないのでわからないけど、こんな感じなんじゃないのかな? >MYSQL使うようなPHPスクリプトを売ったら駄目なの? GPLに反しないなら商用ライセンス不要。ソースコードを公開しないなどGPSに従えないなら商用ライセンス必要。 >MYSQL使ってるショッピングカートで物売ったら駄目なの? GPLにしたがってソースコードを公開しているなら商用ライセンス不要。それ以外なら必要。
149 :
139 :2005/12/08(木) 18:41:05 ID:???
うっかりGPLをGPSって打ってた・・・orz
150 :
NAME IS NULL :2005/12/08(木) 18:51:20 ID:juXz5HGt
int型のフィールドに放り込んである値をphpで取り出して gettype()(変数の型を表記するPHPの関数)に放り込んだら stringって出たんですけど、こう言うことって無いですよね?
151 :
139 :2005/12/08(木) 18:59:11 ID:???
>>150 それはPHPの問題だからPHP系の質問スレの方がいいと思うよ。
あと、PHPの変数はちょっと特殊だから本でも立ち読みしてくるといいYO!
>>148 MySQLをPHPでできたアプリケーションから利用する場合は、
MySQLのFOSSの例外規定に合致するので、そのアプリケーション
に対してはPHPのライセンスが適用されるだけ。
たとえばGoogleがGoogleのシステムを自社開発しインターネット上で運営する場合は、ソースを公開しなくても商用ライセンスは必要ないのでしょうか?
意味わからん
>>153 「ある会社が、Mysqlを使って Google のようなシステムを作り、インターネット上で
そのサービスを公開して不特定多数の人に使わせるとき、その会社、または、
その会社のサービスを使う他の会社は、自分の作った、MySQLを呼び出す
ソフトウェアのソースコードを公開する義務はあるのか?」
と、いう質問か?
MySQLそのものに手を加えていないなら、なぜゆえ公開する義務が課せられると
思う? GPLでも、そんなことは言ってない。
俺はMySQLとPHPとやりあってた頃に出来上がった3つめのライセンスってのがよくわからん。 結局は安全を取ってPostgreSQL使ってるけど本当はどうなんだろう? PHPのソースコードは公開しなくてもただで使えるのか?
まあ飯食う香具師はうまくGPLを回避するように改変して公開するけどね。
>>142 なんとなくLinux無料だから、その上で動かすMySQLも含めた全てが無料みたいな。
当然oracle for Linuxも無料とも思ってるかも知れない。
158 :
150 :2005/12/09(金) 07:14:18 ID:???
>>151 あ。PHPの方の問題でしたか。どうもすつれいしました〜。
inner join のサンプルがあまり無いのは何故ですか? 何か問題があったりするのでしょうか・・・
>>155 それは、
>>148 の後半で言っていることとは、違う意見ということだよね。
MySQLのクライアントのライセンスが、どうとかこうとかなかったっけ。
161 :
NAME IS NULL :2005/12/09(金) 15:22:54 ID:FFgTjPBD
>>57 是非、アップルのiWorksを使ってほしいね。
すごい使いやすいっす。
指定がなければ(例えば個人の書類)
MSオフィスよりこれで作った方が遥かに楽で出来が良い(w
Mac購入してから、
もっぱらMacintoshで書類作るようになっちゃった。。
MySQLを使っているだけで、組み込んでセットで売らなければGPLは関係ない。 セットで売ったとしても、ショッピングカートの場合、 ショッピングカートのソフトウェアの所有者に対してGPLライセンスの縛りが 適用されるので、そのソフトウェアの所有者にたいしてのみ公開すれば良い。 ただ、そのショッピンカートの所有者はもちろんソース再配布の権利を有する。 てな感じだったとおもう。
>>162 「mysqlのソース」もつけて売ればさらに何も問題ないな
>>160 >MySQLのクライアントのライセンスが、どうとかこうとかなかったっけ。
うん。だから「MYSQL使ってるショッピングカート」ってだけで
FOSS例外が適応できるかは判らない。Webアプリの多くの場合適応できる筈だけどね。
165 :
NAME IS NULL :2005/12/09(金) 18:55:41 ID:gwKK4JtV
クライアント(相当数)が毎日自分の体重、身長、etcの項目を入力してそれをmysqlで管理しようと思うのですが 最初はクライアント一人一人に対してクライアントの名前でテーブルを作り Field type date varchar(10) //日付 tall int(10) //身長 weight int(10) //体重 のようにしようかと思ったのですが、これだとテーブル数が莫大な数になってしまうのでどうかと思って・・。 かといってテーブルを1つにしてすべてのクライアントのデータをそのテーブルに収めるって方法も1つのテーブルが肥大しすぎてどうかと・・。 なにぶん、DBに関してあまり知識がないもので、どなたかいい案はないでしょうか?
>>165 553223個のテーブルを作ろうとしてる猛者もいるから大丈夫だ。がんばれ。
>>165 正規化などをもっと勉強しましょう。
テキストの553223ページに書いてあります。
168 :
NAME IS NULL :2005/12/09(金) 22:19:05 ID:miFYUPF0
>>165 テーブル数が莫大な数>>>>1つのテーブルが肥大しすぎて
とにかく、動的にテーブルを作成するのはいただけません。
スキーマは運用中には変更しない。これは鉄則です。
MidiumText型を越えている文章が5000個(あわせて5GB)存在し、含まれる語句を全文検索したい場合はどうするのがよいでしょうか? また、一般的なPCでLongText型5000個の全文検索するのは無謀でしょうか?
170 :
NAME IS NULL :2005/12/10(土) 07:20:04 ID:ErKTeUe9
>>168 2ch作ろうとしたら、スレッド毎にテーブル作成する?
それとも全てのスレッドの内容をひとつのテーブルに作成する?
動的テーブルがダメな理由教えてください。
>>169 そもそもDBに放り込まない
全文検索したい場合は、本文はファイルに保存したままインデックスのみを生成・管理するツールを別途作る。
どうしてもDBでやりたい場合は、せめて単語毎に分割して縦に長いテーブルを作り、インデックスを貼る
>>170 ここは学校じゃない。
逆上する前に自分で勉強してこい。
171がまともに答えられないに1票
>>170 漏れなら1つの板=1つのテーブルだな。
通常RDBMSでは1つのテーブルに対してそれぞれファイルを作成することになる。
それだとスレが乱立した場合にはRDBMSが作らなければならないファイル数もがんがん増えて、
システムリソース(同時に開けるファイル数とかOSで制限あるよね?)を食ってしまうのでよろしくない。
さらに、基本的にはRDBMSはファイルは開きっぱなし、んでもってメモリ上にデータをキャッシュできるものは
キャッシュしたままでACIDを保ちつつデータ更新していくわけだけど、動的テーブルはそういった
アーキテクチャと相性が良くない。
のではないかと漏れは思う。他の人補足ヨロ。
>173 すくなくともスレ用のテーブルと書き込み用のテーブルで、板ごとに2つのテー ブルを用意した方がいいんじゃないかという希ガス。
1板1テーブルでいいじゃん
>>175 それはそれでメリットがあるか
デメリットも多いけど
177 :
NAME IS NULL :2005/12/10(土) 13:53:26 ID:VagZ2wL0
ちょうど今スレッド型総合掲示板作ってるんだけど 一つの書き込みテーブルを板・スレ関係なく共用させてる。 これは無茶かな? 板をたくさん作るから、テーブルを別にしたら メンテナンス性が下がるんじゃないかと思ったんだけど。 たとえばテーブル定義の変更も、×板数になるから、 別にツール作っておかないと簡単にはできない。 あるIPの書き込みをすべて削除したい時なんかも、 結構面倒くさい。 ただ統合テーブルにすると、 レコード数が膨大になるから、パフォーマンス的な不安も 結構ある。
>>165 まて、相当数のクライアントっていうが、その相当数っていったいどのくらいなんだ。
あと、クライアント全員の身長の平均とかの計算はしないの?
動的テーブルは全データの集計とか、検索が面倒で効率が悪い。
それにそのテーブルだとクライアントが1万人で、10年毎日データ入れても
たいしたこたないぞ
phpBBはどんなテーブル構造なんだろう?
180 :
NAME IS NULL :2005/12/10(土) 15:30:51 ID:gdVJ9qUV
>>170 オレなら、そもそも2chの文書データをRDBに入れたりしないな。
前の奴だったら、1スレ1テーブル作るだろうけとなwww
>>180 俺もそう思うなぁ。 1スレの記事はシーケンシャルアクセスしかしねーしな。
1スレに 1ファイル+1インデックスファイル、記事はケツに書き込むだけ。
DBはせいぜい、それらを纏めるテーブル用だなぁ。
(インデックスファイルもテーブルにしてもよし)
そしたらテーブル数なんて大して必要ないよ。
mysqlよりも軽いDBって何があるのかね
>>179 177のような感じですべてのレスで1テーブル。
ただ2chみたいな書き込み量だと速度的なデメリットも出てくるだろうね。
184 :
NAME IS NULL :2005/12/10(土) 16:54:19 ID:U1IqiL9M
このようなテーブルを hiragana katakana kanji eigo りんご,リンゴ,林檎,Apple ちゃ,チャ,茶,tea ・ ・ ・ このように正規化するにはどうすればいいのでしょうか? hiragana sonotanohyouki りんご,リンゴ りんご,林檎 りんご,Apple
186 :
NAME IS NULL :2005/12/10(土) 17:36:45 ID:U1IqiL9M
hiragana katakana kanji eigo りんご,リンゴ,林檎,Apple ちゃ,チャ,茶,tea でいいよ
187 :
NAME IS NULL :2005/12/10(土) 17:41:20 ID:U1IqiL9M
正規化の基準は重複したデータを持たないということ。
188 :
NAME IS NULL :2005/12/10(土) 18:10:03 ID:U1IqiL9M
仮に、りんごの漢字名称が変わったとする(実際はありえないけど) そのとき、1テーブルの1レコードの1フィールドだけの修正のみで 対応ですむのが「正規化された」ということ。あちこちのテーブルの あちこちのレコードに「林檎」が埋まっていてそれらも修正しなけれ ばならないのが「正規化されていない」ということ。
mysql 5.0をwin2kにインストールしたのですが、 インストール時だったか、初回設定だったかで、 「常時起動させない(本当は英語)」オプションを設定しました。たしか。 それで、mysqlを必要なときだけ起動させたいのですが、 起動の仕方が分かりません。どうやったら良いのでしょうか? だいたいのコマンドは実行してみたのですが‥‥。
>>189 コントロールパネル-管理ツール-サービスで出来るYO!
それよりWindows2kでmysql root -pってやると
ERROR 1045 (28000): Access denied for user 'ODBC'@'localhost'(using password: YES)
に成っちゃうのはどうすりゃいいんだろう???
191 :
185 :2005/12/10(土) 18:40:52 ID:???
たとえば今後フランス語を増やすなどに当たってばらばらにしたいのですが・・・ そう簡単にコマンド一発では無理なのでしょうか?
192 :
190 :2005/12/10(土) 18:43:54 ID:???
あ・・・mysql -h localhost -u root -pみたくしっかり打たないとだめなのね・・・
193 :
NAME IS NULL :2005/12/10(土) 18:50:07 ID:U1IqiL9M
>>191 じゃあ
hiragana sonotanohyouki,hyoukisyubetsu
りんご,リンゴ,かな
りんご,林檎,漢字
りんご,Apple,英語
りんご,XXXXX,フランス語
>>191 こういうレベルの話でいいのかな?
hiragana katakana kanji eigo をtable1
hiragana sonotanohyouki 種類 をtable2とすると
insert into table2 (hiragana, sonotanohyouki, 種類) select hiragana, katakana, 'katakana' from table1
insert into table2 (hiragana, sonotanohyouki, 種類) select hiragana, kanji, 'kanji' from table1
insert into table2 (hiragana, sonotanohyouki, 種類) select hiragana, eigo, 'eigo' from table1
MySQLに直接的に関係のないネタは自粛されたし
196 :
NAME IS NULL :2005/12/10(土) 23:01:18 ID:U1IqiL9M
このスレはデータベース初心者の書き込みが多いね。 MySQLは入門者用DBなのか?
>190 thx!!
RDBMSに入門者用も糞もないとおもうんだが。
てかMySQL=入門者用って認識は 一般的にあると思うけど…。
>>199 ではどういった理由から入門者用なのか説明してくれ。簡単にな。
RDBMSへの要求事項から考えると俺にはそうは思えんのよ。
・機能がシンプル(逆にいうと限定されている) ・値段がタダ ・安定している ・ユーザーが多いので、必要な情報が集まりやすい ただ4.1以降は、文字コード問題があるから 入門者に適切なDBだとは思わない。
202 :
NAME IS NULL :2005/12/11(日) 15:01:24 ID:vuWWDwd6
4.0だと文字コードの指定は、 configure時とデーモン起動時しかできないんですね? DBごとに文字コードを変えられないと…。
PHPとMySQLの組み合わせが多いから レン鯖にMySQLが広まっているから
レン鯖でMySQLなんか使ったら、文字コードで大騒ぎすると思うけどなぁ 設定書き換えたり、再コンパイルできるわけじゃないし。
たいていのレン鯖はmysql3.23か4
207 :
NAME IS NULL :2005/12/11(日) 18:13:58 ID:Q9S2IxZT
おい、MySQLって早いと聞いたんだが、Oracle10gとどっちが早いんだ!?
Oracle は速くないじゃん。
なぜMySQLなのか? 答えは簡単。 postgresqlはユーザがキモすぎる。 商用はメンテナがなっていない。 残ったのがMySQLって訳さ。
SQLiteは?
211 :
NAME IS NULL :2005/12/11(日) 22:18:55 ID:nrNceXLO
>>207 データベースの速さの単純比較は難しい。
どこも、うちのDBは世界最速だっていうけど、うそじゃないw
Win2kにMySQL4.1を入れたのですが、コマンドプロンプトからmysqlを使用して接続してもEUCの日本語が化けてしまいます。 Windows付属のターミナルはJISとSJISしか駄目なようです・・・ どうすればよいのでしょうか?
>>212 Windows付属のターミナル、つまり「コマンドプロンプト」とか呼ばれる奴を使わない。
あれはUTF-8、SJISぐらいしか選べないでしょ。
>>213 代わりになるソフトがあるのでしょうか?
215 :
NAME IS NULL :2005/12/12(月) 03:29:01 ID:G5S92dnm
化けた文字を読めるように特訓するんじゃ
パイプが使えるなら、そのまま nkf。 パイプが使えんかったらファイルにリダイレクトして nkf。 気にせんでくれ、眠いから、分からんくせに適当なことをいってたりする。
217 :
NAME IS NULL :2005/12/12(月) 03:44:56 ID:MaMqv63W
>>214 出力をファイルに落として、EUCを対応しているテキストエディッターで見る。
めんどう?
218 :
214 :2005/12/12(月) 03:49:24 ID:???
みなさんどうもありがとうございます。
正直、さっきまで
>>217 の方法でやっていました・・・
Windowsにもnkfがあるようだと分かり助かりました。
化けた文字を読めるようになるまでこれでがんばります。
219 :
NAME IS NULL :2005/12/12(月) 05:45:16 ID:G5S92dnm
そういやWin用にはクエリアナライザみたいなもんてないのか
文字コード考えたら、ポスグレがいいかなぁ。。。 Win版も使いやすくなったし。
俺は4をMacとWinで使ってるだけだからよくわからんが・・・ LinuxならEUCが化けないシェルがあるの???
puTTY
>>212 マジレスすると set names sjis
1つのテーブルのみ更新するときは、トランザクション使わなくていい?
225 :
NAME IS NULL :2005/12/12(月) 22:25:54 ID:UFsjVvg+
暗黙のトランザクションというものになるんだろ。 いきなりINSERT文を発行すると、内部でBEGIN TRANSACTIONを発行してくれる (または、同一の処理をしてくれる) INSERT文の処理が終わったら同じよう勝手にCOMMIT WORKをしてくれる。
226 :
225 :2005/12/12(月) 22:29:50 ID:UFsjVvg+
>>224 ごめん間違えた。
INSERT文だけだったら
>>225 のとおり。
だけど、ひとつのテーブルのみの更新でも、SELECTやUPDATEやINSERTを複数
発行するときはトランザクションではさまないとダメなんでは
排他の方針をどうするかによって異なるとは思いますけど
nkfってutf使えないだろう。 iconv使え。
そいやiconv2のソースコードってどこにあるのかしらん?
230 :
NAME IS NULL :2005/12/13(火) 07:23:18 ID:sdS7JIAD
inって後ろに式を持ってこれないの? in(select id from 〜〜〜) みたいに。
232 :
230 :2005/12/13(火) 08:02:47 ID:???
ですよね。そうじゃないと役立ちませんよね。 その後色々やってたらinがどうとかじゃなくてカッコ内に式を入れるとエラー出されると判明しました。 マニュアルのサブクエリ構文の最初にあった例文を自分のデータベースと合うように変更して マニュアル:SELECT * FROM t1 WHERE column1 = (SELECT column1 FROM t2); 実行したの:SELECT * FROM r2 WHERE item_id = (SELECT item_id FROM r2); やってみると You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT item_id FROM r2)' at line 1 二つ目のselect以降に問題があります、バージョンのあったマニュアルチェックしてね、 みたいだと思われるエラーメッセージを吐かれて失敗。 マニュアルは4,1で使ってるのは4,0,20なんですけどそんなに大差は無いのではないかと思うのです。 これは一体何が問題なんでしょうか。
233 :
230 :2005/12/13(火) 08:14:34 ID:???
ぐ・・・。もしやマニュアルのもう少し下に書いてある 4.0以前ではサブクエリの使用を避けると言うくだりは、 なんとなく使わないんじゃなくて使ってはいけないと言う意味か・・・。
さぶくえりは4.1から
>マニュアルは4,1で使ってるのは4,0,20なんですけどそんなに大差は無いのではないかと思うのです。 つまらん妄想を垂れ流す前に少しは自分で調べてみたら? 4.0系と4.1系では、大きく違うよ。
mysqlのgroup byなんですが、特定のフィールドでだぶってる値をまとめてuniqなものにすると言うことはわかるのですが、この場合、結果として抽出されるレコードは何を基準に選ばれるのでしょう? だぶってるものをまとめるときに、特定の条件の一件を抽出するっていうのは出来ないものでしょうか?
各ユーザに対して容量を制限したいんですがやり方はどうやればいいんでしょうか。
ごめんなさい、Linuxです。suiddirはできないっすね…
240 :
NAME IS NULL :2005/12/13(火) 16:45:40 ID:8RC2ZHkm
誘導されてきました。 MySQLのMySQLデータベースのuserテーブルやdbテーブルに フィールド2,3個追加したいんですが、問題あるでしょうか? 理由は管理上初期のままだとわかりにくいからです。 たぶん問題ない気はしますが、 いかんせんmysqlの根幹部分の設定なので不安なのです。
>>240 もうちょっと詳しく。何をしたいのか、具体的にどんなフィールドを追加するのか。
242 :
240 :2005/12/15(木) 10:57:26 ID:???
>>241 レスありがとうございます。
複数のユーザで使用したく、
そのため、それぞれが誰のデータベースであるかを判断しやすくするために
usernameというフィールドを作成して、その
データベースの所有者データを入れたいと考えています。
243 :
241 :2005/12/15(木) 14:12:02 ID:???
>>242 こういうの興味あるんで調べてみたんだけど、やっぱ確証は得られなかったよ。ごめんな。
・mysqlデータベースのスキーマは、既存のものは変更してはいけない。(エラーが発生する)
・追加する分には、問題なさげ(※全部確かめたわけじゃないので要注意)
・マニュアルには「弄ってOK」とも「NG」とも書いていなかった。
まあ、あまり役つ情報じゃないけど・・・。
mysqlデータベースを弄らない方法でも実装できるなら、それに越したことはないとは思う。
244 :
NAME IS NULL :2005/12/15(木) 23:05:47 ID:IeMGdFx0
本家のサイトみた??日本語表示になってる。 でも”ホワイトペーパーよみなさい”って。 笑える。
>>244 機械翻訳? 日本語がない時よりも、やる気なさげに見えて逆効果な気がw
読んでる最中にいきなり見れなくなった orz どうしちゃったんだろか
あ、直った
249 :
NAME IS NULL :2005/12/16(金) 15:13:33 ID:OfT7rCWQ
現在MySQL4.1を使っているのですが,ビューに対応して いないのでMySQL5.0にバージョンアップしようと思っています. しかし,MyNAのFAQを見ましたがバージョンアップの方法は 載っていませんでした.方法しっている方いたらお願いします.
>>249 MySQL4.1→5.0なら、普通にダンプしてリストアで大丈夫だと思うよ。
4.1は5.0のサブセットみたいなもんだから。
251 :
NAME IS NULL :2005/12/16(金) 18:31:27 ID:OfT7rCWQ
>>250 自宅のPCと大学のPCの両方にMySQLが入っており,
二つのPC間で同期を図る為に,一方のPCにてmysqldumpコマンドで
バックアップ→他方のPCにてそれを元に再構築を繰り返しています.
同じ要領で4.1でdumpして出来たtxtファイルを元に,5.0で構築すれば
いいということですか?
252 :
ん :2005/12/16(金) 18:44:54 ID:JitHzTI2
は
254 :
NAME IS NULL :2005/12/16(金) 20:39:02 ID:eEO7W2kp
256 :
NAME IS NULL :2005/12/17(土) 00:00:58 ID:KpYTNxbO
レンタルサーバーにMySQLインストールしたのですが, こんな感じで出来ません。 DBDをインストールしてくれと出た後指示通りに すると こんな感じ コマンド /usr/bin/perl Makefile.PL && make を実行中.. Can't exec "mysql_config": No such file or directory at Makefile.PL line 76. Cannot find the file 'mysql_config'! Your execution PATH doesn't seem not contain the path to mysql_config. Resorting to guessed values! Can't exec "mysql_config": No such file or directory at Makefile.PL line 454. Can't exec "mysql_config": No such file or directory at Makefile.PL line 454. Can't exec "mysql_config": No such file or directory at Makefile.PL line 454. Can't exec "mysql_config": No such file or directory at Makefile.PL line 454. Can't exec "mysql_config": No such file or directory at Makefile.PL line 454. Can't exec "mysql_config": No such file or directory at Makefile.PL line 454. Failed to determine directory of mysql.h. Use perl Makefile.PL --cflags=-I to set this directory. For details see the INSTALL.html file, section "C Compiler flags" or type perl Makefile.PL --help って出て先に進みません。 どうすれば良いのでしょうか? OSは free BSDでウェブミンで作業しています。 教えてエロい人〜
258 :
NAME IS NULL :2005/12/17(土) 00:55:35 ID:KpYTNxbO
>>257 すまん!真剣に悩んでて空気読むの忘れた......orz
逝ってくる。
>257 文字通り mysql_config というプログラムがないってことだろ。 % mysql_config --cflags -I/usr/local/include/mysql -O -pipe みたいにコンパイルフラグを出してくれるヤツだよ。これがないと DBD みた いなのはコンパイルできない(やりようがない)。 漏れも FreeBSD 環境だけど、 /usr/local/bin にちゃんとある。 軽く調べた感じでは mysql-client 系がインストールされないと mysql_config は入らないってことのようだな。 mysql-server しか入れてないんじゃね?
260 :
NAME IS NULL :2005/12/17(土) 01:37:49 ID:KpYTNxbO
>259 mysql_configはあるけど階層が深くて。。 DBDはSQLと並列に入れたらいいの? SQLの直下? 本当にごめんな。出来ない子供を持つと、、、、、orz 親の気持ちがわかるあw〜 教えてエロイ259!
webminの時点で無謀だろう。 設置も含めて業者に投げるしか。おまいが退職すれば、費用は出せるだろうし。 遠隔地で同期ってすげー使い方だな。 普通はバージョン合わせると思うし、どちらかが常に参照出来るように細工するけどな。
262 :
NAME IS NULL :2005/12/17(土) 02:06:42 ID:iBF79eHA
インストールしました。 Table 'mysql.host' doesn't exist です。 mysql.hostはバイナリファイルですか? それは普通はどこに存在しているものですか?
263 :
NAME IS NULL :2005/12/17(土) 02:25:53 ID:iBF79eHA
'mysql.host'じゃなくて、mysql/host.frmが無いということなんでしょうか?
レン鯖使うのはいいが、セキュリティ気をつけておけよ 総当り攻撃してくる奴がいるからどこかと思ったらレン鯖ばっか 踏み台にされてるって事は侵入されていてデータ盗み放題って事だが、 3306開いてたところもあるし、某社の会員情報サーバっぽいところも・・・・・ 使い方わからなくて管理もできない状態で外に出さん方がいいぞ
このスレの半分はおせっかいでできている
君の心にぽっかりと開いた 3306
267 :
NAME IS NULL :2005/12/17(土) 14:38:32 ID:hmaBKjaJ
>>251 なんですが,これであっているでしょうか?
レン鯖でDB動かすなんてアフォだし。 DBはインターネットからアクセスできない鯖で動かすべき。
またまた
271 :
NAME IS NULL :2005/12/18(日) 18:04:59 ID:bJQ/s3hS
「mysqlが実行するクエリをコマンド行に直接指定する。」 mysql -e "SELECT COUNT(*) FROM limbs" cookbook # cookbookはDB名 # limbs はテーブル名 みたいな感じでオライリーの本に載っていたので、 その通りにクエリを送ってみたらエラーになっちゃいました。 この方法ってもしかしてMySQL3系でしかできない事だったりします?
>>271 いや、構文はあってるし MySQL 4.0 でも通る。
エラーになっちゃいました、じゃないよ。
ちゃんとエラー文をコピペしろよ。
273 :
271 :2005/12/18(日) 21:40:15 ID:???
エラーメッセージです。 mysql> mysql -e "select count(*) from limbs" cookbook -> -> ; ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'mysql -e "select count(*) from limbs" cookbook' at line 1 ちなみに、ローカルなWinXPにApache2とMySQL5.0を入れています。
windowsのコマンドプロンプトからそれやって成功したけど。 MySql 4.1.15
>>273 オライリーの本は持っていないので、前後にどう書かれているかしらないけれど
コマンドプロンプトから実行するやり方だね。
念のためユーザー名とパスワードも付けた方がいいけど。
C:\> mysql -e "select count(*) from limbs" cookbook -uユーザー名 -pパスワード
mysql クライアントを起動してやる場合はこんな感じだね。
mysql> use cookbook
mysql> select count(*) from limbs;
>>273 mysql コマンドの実行時オプションなのに、
mysql コマンドを打った後にそんなことしてどうするよ。
mysql> ←これ が出る前に打つもんだ。
277 :
271 :2005/12/18(日) 23:03:23 ID:???
>mysql クライアントを起動してやる場合はこんな感じだね。 > mysql> use cookbook > mysql> select count(*) from limbs; > mysql> ←これ が出る前に打つもんだ。 まさに。。。。 かなりの醜態を晒してしまってすんませんでした。 このトピックのために費やした5,6時間がむなしいw ちなみに、 まだ先なんですが、後半のトピックに難解なのがあったりするで また来てもいいですか? というか来ます。
278 :
NAME IS NULL :2005/12/19(月) 00:28:39 ID:tPuOVYzW
OS:Linux PHP:4.3.11 MySQL:4.1.16 my.cnf -- [mysqld] default-character-set = sjis [client] default-character-set = sjis [mysql] default-character-set = sjis -- という環境で、SJISのSQLを実行しようとした場合に SQLエラーが発生します。 発生エラー:引用符が閉じていません。 @ 39 エラー箇所:value = '機能\' '機能\' だとエラーとなりますが '機能\A' とか\と'の間に何か文字が入るとエラーが発生しません。 さらに、 '機能' で実行するとApacheがハングアップします。 mysqlコマンドから実行すると "セグメンテーション違反です" とか吐いてmysqlコマンドが終了します。 これってMySQLのSQLパーサのバグでしょうか? 同じような現象が出ている方はいらっしゃいますか?
utf8を使いましょう。
282 :
280 :2005/12/19(月) 03:47:00 ID:???
>>281 移行するデータがSJISなのと
ターゲットが携帯だからデータもSJISで保持したいのです。
よって、UTF-8という選択肢はありません。
>>282 じゃあオラクル代理店に電話してどうすればいいのか聞いてみるといいよ。
つか、Linux上でmysqlクライアントユーティリティも含めて SJISで扱った記憶があるんだが、特に悩んだりしなかったような… >[client] >default-character-set = sjis エラー吐いてねぇか?これ。
285 :
280 :2005/12/19(月) 05:59:43 ID:???
>つか、Linux上でmysqlクライアントユーティリティも含めて >SJISで扱った記憶があるんだが、特に悩んだりしなかったような… ええ、自分もMySQL4.0系でSJIS使いまくりでしたが mysqlクライアントユーティリティが Segmentation Fault吐いて落ちるとか 経験したことないので、ちょっと途方に暮れてる状態です。 >>[client] >>default-character-set = sjis >エラー吐いてねぇか?これ。 特にエラーは吐いてないようです。 今、MySQL 4.0.26から 4.1.16、5.0.16と順に検証しているのですが 挫折しそうな勢いです...orz
>280 ああ、おれもC++Builderで接続するので これなったなぁ。 特定の日本語が末尾にくると出るんですよねぇ。これ自体は、結局解決しないで放置。 今は、仕方ないのでスピード落ちるけど ODBC経由で接続して回避してる。 UTF-8にするのが1つの解決かぁ。 難しいなぁ。
>>282 そのうちsjis無くなるから今のうちにutf8とかに置き換えた方が良いと思うよ
289 :
280 :2005/12/19(月) 10:10:14 ID:???
>>286-288 thxです。
MySQL4.0でdefault-character-set=latin1だとエラーにならないだけで
エラーになるのが普通なのですね。
薄々そんな気がしてたけど、認めたくない自分がおりました。
という事は、4.1以降にする場合は
UTF-8で保持してSJISで吐くのが現実的って事ですね。
取り敢えず覚悟はできました。
助言ありがとさんです。
4.1.15から4.1.16へのバージョンアップに際して デフォルトのキャラクタセットをecu-jpからutf8に変更しようと思うのですが、 mysqldumpにてバックアップしたデータの > ENGINE=MyISAM DEFAULT CHARSET=ujis; この部分を > ENGINE=MyISAM DEFAULT CHARSET=utf8; と書き換えて取り込んで問題ないですか?
291 :
NAME IS NULL :2005/12/19(月) 21:24:43 ID:q0sTyHv/
created table test ( id int auto_increment primary_key, num int ) 上のようなテーブルで、insert時に自動生成されるカラムidの値を カラムnumにも同時に入れるにはどうしたらいいですか? insert後、updateするしかないでしょうか。
MySQLの良書を探しています、サーバーはレンタルしているので、サーバーの設定 云々の記述は最小限でいいと思います、特にPHPとの連携がしっかり記述してある 本が希望です、 オイラリーのMySQLクックブック〈VOLUME1とか考えているのですがいかがでしょうか? もっと良い本があれば教えてください。
MySQL4.1.15(Windows)でテーブルAのaを指定し、Bのcを表示したいと考え、 SELECT B.c FROM A,B WHERE a = 'あ' AND A.b = B.b; のようにしたところ、きちんと「A」を返してきました。 しかし、bに長めの日本語があるとマッチする物が存在するのにも関わらず見つけることが出来ないようです・ SELECT B.c FROM A,B WHERE a = 'こ' AND A.b = B.b; Empty set (0.00 sec) この問題はどのようにすれば回避することが出来るのでしょうか? どうかよろしくお願いします。 どちらもMyISAM,すべてTEXT A +----+------+ | a | b | +----+------+ |あ | Apple |こ | こういう長いのはどうもだめらしいこういう長いのはどうもだめらしい |え | え B +----+------+ | c | b | +----+------+ |A | Apple |D | こういう長いのはどうもだめらしいこういう長いのはどうもだめらしい H | え
>>292 MySQLクックブックかなり良いよ。
基礎からみっちり説明してるし、
一般的な初心者がよく間違えて覚えてる項目も
取り上げてるから安心して身に付けられると思う。
ちなみに、Vol1とVo2と実践ハイパフォーマンスMySQL
の3冊買ってまだVo1のP100までしか進んでないけど、
わかんない事があったらオレに聞いてくれ!
>>292 SQL全機能リファレンス
実践ハイパフォーマンスMySQL
このあたりが最高峰
296 :
295 :2005/12/20(火) 12:02:02 ID:???
「MySQL全機能リファレンス」ね
「実践ハイパフォーマンスMySQL」は名前の通りの性能分野に特化した本かと思いきや、 かなり手広い分野を説明してて、かなりの良書だということには個人的に同意。 MySQLのヘビーユーザとして有名なYahoo!comのエンジニアが原作書いてるから、流石。 でもPHPとの連携はこの本には書いてないよ。orz
298 :
NAME IS NULL :2005/12/20(火) 12:46:29 ID:BChHfMfC
スタートアップに登録されている[MySQL Command line Client]は どのexeファイルに対するショートカットですか? binフォルダのexeを見てもそれらしいのが見付からず…
299 :
NAME IS NULL :2005/12/20(火) 13:40:44 ID:BChHfMfC
すみません.
>>298 は自己解決しました.
別の問題なのですが
MySQL4.1で作成したデータベースを以下の方法でバックアップし,
mysqldump --all-databases --default-character-set=binary -uroot -proot >C:\bak.txt
MySQL5.0でリストアしようとしたところエラーが起こりました.
C:\Program Files\MySQL\MySQL Server 5.0\bin>mysql -ukeep -pkeep <C:\bak.txt
ERROR 1045 (28000): Access denied for user 'keep'@'localhost'
(using password: YES)
何が原因か分かりません.
対処法の分かる方ご指導お願いします.
>>299 Access denied for user 'keep'@'localhost'
ってでてるじゃん。
そのユーザーに権限与えてないんでしょ。
301 :
NAME IS NULL :2005/12/20(火) 14:03:49 ID:BChHfMfC
よく見たらrootユーザしかいないのに ユーザ欄をkeepにしてたからだ
質問です。 列 a, b, c を 列 a, c, b といった具合に 列の移動って可能ですか? もしよろしけば、やり方を教えてもらえると助かります。
select a, c, b from table
305 :
303 :2005/12/20(火) 20:37:26 ID:???
>>304 すいません。
質問のしかたが、わかりづらかったですね。
テーブル定義上での、列の位置の移動のことです。
>>305 可能だけどやり方忘れた
いるかのページで出てきたと思うよ
windows使いってのは、 ERROR 1045 (28000): Access denied for user 'keep'@'localhost' すら読めないのか。
>>305 やろうとしている事が無意味だと判っているよね?
310 :
293 :2005/12/20(火) 22:39:58 ID:???
色々と実験していて分かったのですが、
>>293 の症状はテーブル内のカラムの並びによってはちゃんと動くことが分かりました。
原因は不明ですがものすごく不思議に感じます。
テーブル定義と実データとクエリを晒せばだれかが原因を指摘できるかも知れない。 まぁText型フィールドでjoinするという荒技の経験者がいるとも思えないけど... とりあえず、Text型でjoinなんて真似はやめとけ せめてsubstrかmd5かしたフィールドにちゃんとインデックスを付けてjoinに使うべきだろう。
312 :
293 :2005/12/20(火) 23:43:51 ID:???
特に日本語が駄目なコマンドを含まないしすんなり動くだろうとは思ったものの、本当に変なことはしない方が無難だと身にしみました。 お教え通りmd5化してみます。 どうもありがとうございます。
313 :
初心者 :2005/12/21(水) 01:29:38 ID:U/BKSVGX
delete from mysql.user where user="; を実行後、rootでのログインもできなくなってしまいました。 rootのアカウントも削除してしまったのでしょうか? mysqlをアンインストール後再度インストールしても、状況が 変わりません。 完全に削除できれば・・と思うのですが、それもできないため、 行き詰っています。 どなたか、フォローください。 ※OSは、Linuxです。
314 :
303 :2005/12/21(水) 01:45:49 ID:???
>>306 >>308 ありがとうございます。
いるかのマニュアルに書いてありました。
ALTER TABLE tablename MODIFY c int AFTER b
でいいみたいですね。
>>313 >完全に削除できれば・・と思うのです
アンインストール後にアンインストーラでは削除されない
mysqlのデータディレクトリをrmすれば、再インストール時に
mysql権限データベースもさらのものがインストールされるよ。
マニュアルに書いてあるとおり、インストールスクリプトを動かして
mysql権限データベースだけを最初のデータにしてもいいけど。
あと管理者パスワードを忘れた場合の権限データベースの読み込みを
スキップさせる方法についてもマニュアルに記述があるので、その辺を読め。
かなり初歩的な疑問で恐縮ですが 4.1端末から5.0鯖へ問い合わせ可能ですか? 要するに互換性というか異なるバージョン間には単に構文の相違だけで その点に注意すれば基本的にデータベースそのものへのアクセスに制限はないのでしょうか?
s/構文の相違/新機能追加の有無/
>>316 MySQL4.1とMySQL5.0とで、付属のmysqlクライアントと
libmysqlcに相違はなかったと思うけど。
>>316 推奨しないのは言うまでも無いが、プロトコルレベルでできるできないで言えば「できる」。
5.0の全機能が4.1のmysqlclientで使えるかは知らん。
320 :
NAME IS NULL :2005/12/21(水) 20:54:27 ID:B4QGhCLD
>>305 alter table テーブル名 change c c フィールド定義 after a
でできるはず。
たまに使うけど、データベース的にあまり意味がない。
まあ気分の問題だね
4.1以降で、クライアントの文字コードをujisにして、ujisでテーブル作って、alterでbinaryに変換すると文字化けする 文字化け後、クライアントの文字コードをbinaryにすると、文字化けが直る これって、ujisのテーブルをujisで読み出してる時でも、 内部的には一度utf8か何かに変換されて元に戻しているってことだよな・・・・・ MYDを直接覗いて文字コード調べてみるとわかるのかな
内部はutfってFAQだし。
よくドキュメント読めよ。
ttp://dev.mysql.com/doc/mysql/ja/index.html 日本語Document MySQL AB
日本語だけで使うなら、ソース弄ってutf変換せずに格納できて取り出せてもいいと思うけどね。クエリーで困るかも知れないけど。
4.1と5.0の互換性ぐらい検証しろよ。
検証してみて問題が無ければおまいの責任で使えばいい。
誰かにケツ持ちしてもらいたければ有料サポートに聴け。
ねらーに訊いても、言い訳には使えないよ。おまいの首が飛ぶだけ。
>> 321 etherealとかstoneでパケットキャプチャーしてみたら
DELETE FROM `news` WHERE time < (NOW()-86400) こういうクエリー送ったらテストデータ全部消えた(--; NOW()-123とかは使えないのでしょうか?
>>325 NOW() - 10000
は、NOW() の 1万秒前ではなく、NOW()の数値表現である "20051223010000"(01:00:00) から 10000 を引いた
"20051223000000"(00:00:00) になる。
よって、あなたのしたいことは
FROM_UNIXTIME(UNIX_TIMESTAMP(NOW()) - 86400)
DATE_SUB(NOW(), INTERVAL 1 DAY)
のどちらか。
>>326 そうでしたか(^^;。NOW()自体は日付を返してくるのですね。
ありがとうございます。
328 :
NAME IS NULL :2005/12/23(金) 19:40:49 ID:2RkZ8uVv
mysql> use mydatabase; mysql> show tables; 上記コマンドを、useせずに mydatabaseの中のテーブル名を列挙するコマンドはありまうか?
>>328 show mydatabase.tables;
>>329 show tables from mydatabase
331 :
NAME IS NULL :2005/12/23(金) 20:06:52 ID:2RkZ8uVv
ありがとうございます。
332 :
NAME IS NULL :2005/12/23(金) 20:10:35 ID:2RkZ8uVv
mysql> use mydatabase; を実行した後、 mydatabase を useしていない状態にさせるには 他のデータベースを useするしかないのでしょうか? unuseしたいです。
333 :
NAME IS NULL :2005/12/23(金) 21:25:02 ID:OgXtk4AN
質問です。 売上げデータ22万件をMysqlに入れてあります。 data +-----------+-------+ | date | price | +-----------+-------+ |2005-12-23 | 200 | |2005-09-01 | 120 | |2005-10-11 | 250 | dateにインデックスを置いてあります。 このテーブルに対し以下のSQL文を行います。 SELECT sum(price), MONTH(date) FROM data group by MONTH(date) このSQL文を実行すると6秒程度かかるのですが もっと速くする方法ありますか? 集計を速くするにはCPU性能が問題でしょうか? Mysql3.23 Mysqlのバッファ:key_buffer=16M、sort_buffer=4M、table_cache=256 Win XP Home Celeron2G、メモリ384M
>>333 >Mysqlのバッファ:key_buffer=16M、sort_buffer=4M、table_cache=256
少ないんじゃないかな。
タスクマネージャとかでメモリをモニタリングして確認してみよう。
>>333 priceにindexを追加する
key_bufferを128M位まで上げる
売り上げデータ入れてるのに、メモリ384Mって。。。 512MBぐらいは積んで上げたら? 最近は1万ちょいで1GB買えるのに。
337 :
333 :2005/12/24(土) 00:52:04 ID:???
>>334 >>335 さんくす
priceにindexなしで6.4秒。
で、priceにindex追加してからやってみた。(3回の平均)
これ以上のバッファサイズは消費メモリが実メモリ超えちゃいます。
key_buffer=128M、sort_buffer=16M :6.3秒
key_buffer=64M、sort_buffer=64M :6.1秒
key_buffer=16M、sort_buffer=128M :6.1秒
バッファ指定なし :5.7秒
インデックス追加でバッファ指定なしが速くなりましたが、
バッファ指定で逆に遅くなりました。
SQL実行時のCPU使用率は100%でしたので、
バッファサイズよりCPU速度が問題かもしれません。
自分もこういう会話をできるようにがんばろ。
数十万件扱ってるのに384Mは無いよなぁ サーバクラスのハード使った方がいい気がする。 MEM1〜2G、Xeon3Gとか CPUがボトルネックになっているんなら、CPUキャッシュの量は効きまくるぞ
340 :
333 :2005/12/24(土) 01:10:50 ID:???
>>336 システム開発するような部署ならそうでしょうが、
オレ普通の事務員だからね。
会社がまとめて購入したノートパソコンに何もできないでしょ。
使ってるアプリから出てくる集計データが使いにくいから、
Mysqlでデータを再集計させてます。
>>340 同じノートパソコンを束ねてMySQLクラスターだ!!!
342 :
333 :2005/12/24(土) 01:25:47 ID:???
>>339 やっぱ、サーバーかなぁ、
知識まったくないけど。
ノートパソコンに勝手に何かするのも規則で禁止で、
自分のパソコンを職場に持ち込むのも禁止だから
現状打破はちょっと厳しいです。
PHPでページ表示に20秒以上かかっているので
ページ切り替えにちょびっと勇気いるんです。
>>341 それやったら怒られてクビか、
見込まれてシステム開発に異動だわ
PHPってことなんで、毎回計算しないで変化しない過去分の結果は 保管しておいて、当月分だけ計算とかにすれば、一瞬じゃないのかな。
344 :
333 :2005/12/24(土) 02:00:05 ID:???
>>343 一月分の集計だとページ表示に3秒程度です。
>333のSQL文のMONTHをDAYOFMONTHにして一月集計すると0.5秒でした。
そのため、全体の集計だけだとその方法が計算に時間がかかりませんが、
商品や業者ごとに絞り込めるので保管するファイル数が多くなりそうです。
一度友達のパソコン借りて速度比較してみます。 <勝手にインスコして
345 :
NAME IS NULL :2005/12/24(土) 03:14:32 ID:v51il4UF
外部サーバのMySQLにクエリを発行した場合、 結果セット内のデータはクエリを発行した時点ですべて転送されるのでしょうか? それともfetchするまでは転送されないのでしょうか?
>>344 そうそう、index付けた日付にMONTHとかの関数かますと
indexが効が無効になるんだよねぇ。
DAYOFMONTHだと効いたのかな。
348 :
333 :2005/12/24(土) 09:56:53 ID:???
>>347 マジで?MONTHだとインデックス効かないの?
説明が足りなかったんだけど、>333のSQL文でyearを絞っていないので
22万件すべてを集計しています。
そのため、インデックスよりSUM関数の実行速度が問題だと思っております。
で
>>339 が言うように、この場合CPU速度がボトルネックになるかもしれません。
ORDER BYの昇順で アーとかイーがアラとかイラより後にくるのを アア アー アラ みたいはできますか?4.1.7です。
>>333 SELECT sum(price), MONTH(date) FROM data group by 2;
としても変わらないかな。
monthカラムを追加して、インデックスを張れば速くなるかも。
alter table data add month tinyint, add index(month);
update data set month=month(date);
select sum(price), month from data group by month;
351 :
333 :2005/12/24(土) 21:31:46 ID:???
>>347 >>350 正解!!
言われた通りmonthカラム追加すると
0.20秒でSQL完了しますた。
SUM()よりMONTH()がボトルネックでした。
PHPでは客数や個数のためSQL文を4回繰り返してますが、
20秒以上かかったのが3秒でページ表示できました。
マジありがとうございました。
他の人もアドバイスありがとうございました。
352 :
NAME IS NULL :2005/12/25(日) 11:57:26 ID:JGW5cPL9
0000 から 9999 までの整数しか入らないカラムの場合、 int(4) とするより smallint(4) のほうがデータベース容量的?にはいいですよね 癖というか基本というか int型で作成してしまうときが多いとかありますか? またそのとき、intで作成したフィールドをsmallintに変換することってできますか?
353 :
352 :2005/12/25(日) 13:49:31 ID:???
alter table テーブル名 modify column カラム名 smallint(4); で解決できました。 探すのにかなり時間かかった・・・
354 :
352 :2005/12/25(日) 13:54:16 ID:???
すみません、自己解決しました。 数値型の説明をよく読んでいませんでした。 int(4) とか smallint(4) なんて、まるでお馬鹿な質問でした。 私は間抜けな初心者のようです。
すいません教えてください 最近PHP+MySQLを使いはじめた者です $sql = "INSERT INTO test_tbl (no, id, name) VALUES ('', '123', 'tomato')"; $res = mysql_query($sql,$db); 上のようにPHPで実行しても新規レコードが作成されません エラーはでません $res には true が返ってきません MySQLには接続してます test_tbl も作成済みです no は主キーでオートインクリメントです 他のSELECT文などは正常に実行されます なにか見落としてるんでしょうか?
>>355 >他のSELECT文などは正常に実行されます
ということなので前処理のコードは問題ないとして
>エラーはでません $res には true が返ってきません
FALSEならエラーは出てるだろ。
mysql_errno()とmysql_error()使って原因を探ってみ。
357 :
355 :2005/12/25(日) 19:24:09 ID:???
>>356 エラーが出ない=エラーがない と思い込んでました
恥ずかしくて原因は書けませんが mysql_error() 一発で解決しました!
これでやっと前に進めます
解決の糸口を見つけられなかっただけに深く深く感謝します
ありがとうございました!
CREATE TABLE test( aa CHAR(10) ); +--------+ | aa | +--------+ | 埼京線 | | 埼京線 | | 山手線 | +--------+ 上記のテーブルから「SELECT 〜 WHERE NOT」を使用して、 「埼京線」以外を表示させようとしたのですが、 mysql> select aa from test -> where not aa = "埼京線"; Empty set (0.04 sec) という結果になり、「山手線」がでてきません。。 なぜなんでしょう??? ちなみに、WinXPにMySQLver4.0.26をいれて Client characterset: sjis Server characterset: sjis と文字コードを設定してあります。
359 :
358 :2005/12/25(日) 23:58:41 ID:???
恐縮ですが自己解決いたしました。 すみませんでした!!
解決したら原因はちゃんと書けって! 無駄にレス消費するなよ!
362 :
352 :2005/12/26(月) 19:49:32 ID:???
ものスゴイ嫌がらせ思いついた 1 :以下、名無しにかわりましてVIPがお送りします :2005/04/25(月) 04:44:27 ID:cxwJSDGr0 例えばさ、ID非表示の板で質問したやつがいるとするじゃん? で、その答えがくる前に名前欄にそいつのレス番入れて 「すみません、自己解決しました」って入れるんだよ マジコレはハマるwwwwwww
363 :
358 :2005/12/26(月) 20:13:18 ID:???
実はずっと文字コードの問題かなぁって思ってたんですが、 -> where not aa = "埼京線"; を -> where not (aa = "埼京線"); のようにカッコでくくってあげないと論理が反転しないようです。 -> where aa <> "埼京線"; でも同じ結果になるんですが、ちょっとwhere not 〜 でやってみたくて。。
質問です。 クライアントもDBもSJISに設定して使用しているのですが、 半角"・"をinsert等で使用とすると"・"以降の文字が入ってくれません。 INSERT INTO tbl_test (hoge) VALUES("12345・67890") とすると hogeには"12345"までしか入っていませんでした。 PHPとあわせて使っているので、mysql_errno()をみてみましたがエラーは返らず、 SQL文をいろいろなエスケープ関数を通してみましたが解決できませんでした。 SJISの"・"は特殊な文字コードで、変わったエスケープをさせないといけないのでしょうか MySQLのバージョンは4.1.7で 値を入れる前にSET NAMES SJIS をやっております。
>>364 MySQLが認識するコード以外をインサートすると、そこからバッサリ
切れるのは4.1シリーズの仕様だけど、その文字コードは何?
0xA0と0xA5がそれっぽい文字だが、0xA0ならJIS X 0201から外れて
いるからそうなるかもしれん。
運がよければ、4.1.12以降のcp932対応で新規にカバーした範囲に
入っているかもしれないが。
なるほど、そうですか ちょっと文字コードが何なのか見てみることにします。 だめだったらあきらめるしかないな。
367 :
366 :2005/12/27(火) 01:07:21 ID:???
368 :
NAME IS NULL :2005/12/27(火) 14:01:14 ID:oYwRzA17
カラムが5つなのにPKが4つある表というのは PKが多すぎて設計がおかしいのでしょうか?
MySQLの質問じゃないですね。
>>368 よっぽど複雑な関係を持つデータでない限り、その可能性が高いですね。
4つあるPKのうち、タプル間で重複した組み合わせになるものはないですか?例を挙げると、
TableA
ColumnA ColumnB ColumnC ColumnD, ColumnE
1, 2, 3, 4, a
5, 7, 10, 2, g
5, 2, 8, 4, e
これだと、ColumnBとColumnDの組み合わせが重複しているタプルがあるので、
ColumnBとColumnDからなる別テーブルを作って、ColumnBとColumnDは
別テーブルとの関係としてあらわすことができます。
そのとき、テーブル間の新たな関係を表すために、ColumnFを新たに作ります
Table B
ColumnF, ColumnB, ColumnD
1, 2, 4
2, 7, 2
TableAは以下のように変更されます
TableA
ColumnA, ColumnC, ColumnE, ColumnF
1, 3, a, 1
5, 10, g, 2
5, 8, e, 1
371 :
NAME IS NULL :2005/12/27(火) 14:33:38 ID:oYwRzA17
大変丁寧な説明ありがとうございました. 非常に参考になりました
372 :
365 :2005/12/27(火) 21:53:58 ID:???
>>366 確認したけど、やはり0xA0は切れる。
4.1.3はNG、4.1.16はOK。
cp932に対応した4.1.12以降なら問題無いと思われる。
ソース有るんだから、通るように弄っちゃえば? もちろん自己責任で。 オラクルならゴネてみるか、諦めるしか無いけどな。
OS Windows2000 PHP5.1.1 Apache2 MySQL5.0 こんな感じで開発してます。PHPやらMySQLは初めてです。 ちなみに、顧客の要望により ソースは「EUC」で、 HTML入出力は「SJIS」で、DBは「SJIS」でという状態です。 mysqlのコマンドラインからはINSERT文が正常に実行できます。 でも、PHPからSQL文を発行すると、エラーになります。 利用しているのは mysqli で、Client API version は4.1.7です。 エラーの内容が Data too long for column 'colname' at row 1 なので、 文字コードで何かしらトラブルが起きているなとは思うのですが、 原因がわかりません。(これは、MySqlをEUCで稼動させていたときに コマンドラインでおきたからです。このときは set names sjis で 解決できましたが…) 文字列を mb_convert_encoding 関数を使ってSJISに強制変換 してみたりもしたのですが、だめでした。 正直お手上げなのですが、どなたか解決方法をご存知ないでしょうか?
MySQLの時点で間違い。 オラクル案件が適当だな。 Solaris→w2k Oracle→MySQL にグレードダウンさせられてる気がする。 MySQLでやるなら、全部utfにして一切変換しない方が問題が無くていいよ。 コード変換遣るなら、文字化けを自己回避出来ないと厳しい。
376 :
374 :2005/12/28(水) 10:22:47 ID:???
>>375 ああ…やっぱり…
いや、分かってるんですよ。Oracle使えとか、せめて
MSDE使えよとか、文字コードは統一すんのが常識だろ、とか。
でも、開発者の常識を顧客に押し付けるのはちょっと避けたいので。
で、なんとか自己解決しました。
こんなことする人少ないんだろうけど、念のためね。
クエリを発行する前に、必ずクライアント側の文字コードを
サーバー側に教えてあげること。
私は mysqli を使っているのでクエリ実行の前に必ず次の
構文を実行します。(EUC使ってるからね!のおまじない)
mysqli_query($db, "SET NAMES UJIS");
原因として推測できることとしては、以下の通り。
WebブラウザからSJISで入力し、念のため再出力したところ、
SJISで表示されますが、どうやらPHPを通したところでEUCに
変換されてしまうような感じです。
おかしなことに、PHPの変換関数(EUC->SJIS)を掛けても無駄なようで
このおまじないが必ず必要な模様。(mysqliドライバの問題か?)
INSERT,UPDATE,SELECT問わず必ずおまじないをいれましょう。
show variables like 'char%';
378 :
NAME IS NULL :2005/12/28(水) 10:50:35 ID:ehwFWZS/
>>376 いや、何かがおかしい。
もうちょっと探ってみたほうがよいかと・・・
374さん、それは単にクライアント側の文字コードの設定が行われていなかっただけです。 MySQL5.0からStrict Modeが実装され、これまでINSERT時にTrancateが生じる場合に Warningを出すのみであったのが、Errorを返すこともできるようになりました。 おそらく374さんはインストーラ付きのWindowsバイナリ配布版を使っているのだと推測しますが、 インストーラによって自動生成されたmy.iniにはこのStrict Modeを有効にする記述が追加されます。 # Set the SQL mode to strict sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION" つまり、Data too long for column 'colname' at row 1 というエラーメッセージは、これまでのMySQL的な 解釈で言えば、Trancateが発生したということです。 以下の手順で再現可能です。(上記設定がmy.iniにあるものとする) use test; create table t1 (c1 char(1) charset sjis); insert into t1 (c1) values ('12'); ←サイズ1のカラムに2文字入れるのでエラー set names latin1; insert into t1 (c1) values ('あ'); ←文字コードをlatin1としたのに日本語を入れたのでエラー set names sjis; insert into t1 (c1) values ('あ'); ←文字コードをsjisと設定したのでOK PHPを使用されているということですが、latin1でコンパイルされたドライバを使用しているのでしょう。 その場合、MySQLに接続したら"SET NAMES XXX"が必要となるのは自然なことです。
381 :
364 :2005/12/29(木) 00:40:22 ID:???
>>372 文字コードを確認してみたら0xA5でした。
で、もう少し試してみたところどうやら0xA0以降である、
半角カナが全部だめでした。
半角カナ全部なのでconfigureの設定が間違ったのか足りなかったのかだとは思っていましたが、
この状態でも同じconfigureで4.1.16にすれば大丈夫なのかな
とりあえず今は、半角カナがきたら全角カナに代えて入れるようにしてお茶を濁しています。
382 :
365 :2005/12/29(木) 01:38:17 ID:???
まじかよ・・・・・ウチも4.1.7だ 俺も迂闊だったがちとMysqlそのものに不安を覚える
384 :
364 :2005/12/29(木) 03:03:17 ID:???
マジですか・・・ 4.1以降用の文字コード対応が中途半端だから思い切って4.0系にするか、4.1.16にするか なんにせよ4.1.7は使い物にならないですね。 わざわざ調べていただいてありがとうございました。
半角カナ全滅でも問題ないや。化ける元凶だし。
俺も半角カナは使わないし、そういうデータは全角にして扱ってるが データベースとして、文字コード上規定されている文字が正常に 且つ容易に扱えないことは致命的だと思う。コード変換機能が盛り込まれたなら、 その機能も"望ましい"形にまとまるようにならないとユーザには受け入れられない。
つまり致命的になるくらいなら、sjisのサポートは辞めるべきだよな。 全部utfで終了。
Vineのmysqlが早くutfになると良いなぁ
ズバリ欠陥品じゃん 4.1.7
自分で作れよ 漏れはbinaryにしてる
391 :
NAME IS NULL :2005/12/29(木) 23:51:08 ID:6xIsf9cf
binaryにすると煩わしいことはなくなるの?
コード変換機能自体無理が有るしなあ。過信し過ぎだよ。 日本語データ→UTF@MySQL→日本語データで間にUTFが挟まるから必ず失われるし。 sjisって指定したら、変換を無視して、sjisのまま格納して取り出すようにソースを弄ったほうがいいよ。
オラクルと違ってオープンソースだし弄れる物は弄った方が速いでしょ。 どこかの業者に金払って解決でもいいけどさ。
なんか4.1.7を必死に叩いている香具師がいるみたいだが、 既にver4.1系は4.1.16が出ているんだが・・・・。
>>392 サーバとクライアントが同じcharsetならUTFは挟まらないよ
397 :
NAME IS NULL :2005/12/30(金) 09:50:55 ID:b/H/qjrZ
やぱり癌はJavaだろ?
>>397 いや、別にJavaはどうでもいい。使ってないもんで。
格納する時にutfに変換されて、取り出す時にutfから変換されてるよ。 utfにマップされてない文字データを突っ込めば壊れるのが証。 Javaはutf前提だからなあ。MySQLとはutf同士で相性がいいけど。 Javaにもutfに変換させずに扱えばいいけど、苦労する。 latin1でコンパイルされてるphpとかが癌だね。馬鹿除けでわざとかも知れねーけど。
>>399 PHP5のSQLiteがUTF-8じゃなくてlatinでコンパイルだとか
結局あいつら自分ところで別に困ってないからUnicodeとかに
程度にも移行するつもりが全然ないんだよ。
(「困ってなければ変えない」は正しい選択ではあるが)
>>394 オプションのスイッチを切り替えた方が早いし安全。
>>399 > 格納する時にutfに変換されて、
本当ですか?CREATE xxxで明示的に指定したコード、
或いはシステム変数character_set_databaseで暗黙的
に設定されたコードでしょ。
PRIMARY キーを元によく検索をするのですが、このような場合は INDEXつけたほうがいいのでしょうか。
おれもインデックスつけるのめんどくせっと思ってつけてなかったけど、 つけてみたら爆速になった
PRIMARYって既にINDEX?
では
>>404 さんがいっていた
INDEXつけたら爆速ってどういうこと?
>>407 MySQLのマニュアルやコマンドの結果より
>>404 の書き込み
が納得できるというなら、思った通りの事をやれば?
KEY は、通常 INDEX のシノニム。 バージョン 4.1 以降、 キー属性 PRIMARY KEY は単に KEY として指定することもできる。 この機能は他のデータベースとの互換性を考慮して実装された。 だって!爆速って どういうことだ?
普通PRIMARY KEY にINDEXなんてつけるのか?
>>406 >"キー属性 PRIMARY KEY は単に KEY として指定することもできる。"
これは PRIMARY KEY = KEY であって
PRIMARY INDEX とすることは出来ないんじゃなかろうか。
そして、だからこそ "KEY は、**通常** INDEX のシノニム。" と記述されているのでは。
create_definition の PRIMARY KEY 指定は
PRIMARY [KEY|INDEX] じゃなくて PRIMARY KEY 固定なのが気になるな
まぁ 4.0 を入れてる俺は確認めんどいからやんないけど。
投稿日付のフィールドを作ろうとしています。どんな形がいいか考えています。 調べたところこんなサンプルがありました。 - XOOPSは、 int 10 unix timeの形 - OpenPNEは、 datetime 0000-00-00 00:00:00 このメリット、デメリットってなんでしょうか?
>>411 それがphpMyAdminだとできるんですよ!
414 :
NAME IS NULL :2005/12/31(土) 18:54:46 ID:KWInO9ZE
レコード数の取得でPEAR_DBで $sql = 'SHOW COUNT(*) FROM XXX'; $res = $db->query($sql); $rocordcnt = $res->fetchRow(); したら Fatal error: Call to undefined method DB_Error::fetchRow() になりました。 $sql = 'SHOW * FROM XXX';だったら$rocordcntに最初にヒットしレコードが 配列で入るのですが、count(*) を得るにはどうしたらよいですか? 他の方法のありますが、勉強のために count(*) の結果の取得を教えて下さい。
>413
>>412 DATETIME の方が良い、わざわざunixtime突っ込むのは馬鹿
418 :
NAME IS NULL :2006/01/01(日) 00:47:12 ID:trwHeoMJ
>>417 DATETIMEってどこの時間ってどうやってわかるの?
それがGMTなのか?JSTなのか?って
↑今後のMySQLの動向
423 :
418 :2006/01/01(日) 18:31:31 ID:trwHeoMJ
show tables
とかではなくて、
>>414 の
$sql = 'SHOW COUNT(*) FROM XXX';
なんだけど。
MySQLのSQLにはShowステートメントがあるのか?
,へ \ | / ,ハ百 \ \ \ | / ム.只 /へ/) ./ ̄\ ∧_∧∩ )( ‐ ‐ ‐−──( ゚ ∀ ゚ )──−‐‐ =夫=_ .(*・∀・)7 ( ! ______ノ'""ゝ. \_/ フi三iヽ ゚ .冂つム゚_」 Y (_ ____) ':; | \ '─' ゜ ム_」」」」ゝ 人 ___) (__∠__ \| \ (,_,,ノ `ー´ ( '; (__________) ~':;,,. \ ,' . / .' ヽ (_ ,,;::'~ ~':::;;,,,_ / / ' \ヽ. __,,,,-‐''"~ ∧_∧ ( ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄) '0 __,,..l⊂Z_).⊃! ( ´∀` )  ̄ ̄ ̄ ̄) (二二二二二...... 0 0Π0- ‐‐'''"" |;;:.:. ヮ . .:::;| ,べヽy〃へ ( ̄ ̄ ̄ 0Π0 HΠH ∩.∧_∧∩ ∧∧/ :| 'ツ' | ヽ  ̄λ_λ ̄ ̄ ̄ ̄ ∧∧ ̄ HΠH EEE 匸(´∀`;)フ (,゚Д゚,). o |=宗=! o | ( `ー´) ヮ (゚ー゚*) EEE |l|lil|ili| 瓜ゞッ=Lく ,くリ=ッ=[ゝ.__」「「「「L_.」 厂〉=ッ冂づ ヌ Oヮ⊂[]ヨ |l|lil|ili| ,,.<卅卅ゝ.__.,.,.,___.__.,.,.,(__)ヾZ)'_.,.,_じ(ノルハ)Jつ」」」」」⊂ソ.,_.,_.(入ム]つつ.__,L!__. (_」つ.,<卅卅ゝ,,.,, 〜ラッキーレス〜 2006年新年あけましておめでとうございます! さて、このレスを見た人は、コピペでも良いので26分以内に3つ以上のスレに貼り付けてください そうすれば今年中に、体の悪いところは全て治るわ好きな人に告白されるわ出世するわで大変なことです!!
恐縮ですが、 ローカルなWinXpにMysql4.0.26を入れて Client characterset: ujis Server characterset: ujis というように文字コードを全てujisで統一してます。 この場合、コマンドプロンプトでDBに格納したデータを select文で表示させると日本語が文字化けしてしまうのですが、 これを解消する方法ってありませんでしょうか?
コマンドプロンプトはsjisでないと化けるんでないか?
winのコマンドプロンプトは SJISとUTF-8しか使えないんでなかったかな?
428 :
NAME IS NULL :2006/01/02(月) 21:22:03 ID:OxQAW/OR
>>430 「TELEVISION」のidと、その子アイテムのidを
「PORTABLE ELECTRONICS」のidより大きくする。
MySQLCC 0.94betaなんですけど、1000件以上あるテーブルの1000件目以降見たい時って どうすんの?初歩的な質問でスマソですが。
今更ながら・・・・ datetimeは64bit unixtimeは32bit datetimeはnow()とかで適当に放り込める unixtimeはアプリ側で変換する必要がある phpとかでプリプロセッサ使ってるならunixtimeで十分 2038年までダケドナー
簡単な管理DBを作っているんですけど、教えてください。 作業テーブルがあり、それにstatusカラムがあります。 レコードの状態を示しており、今は、enum('作業中', '終了')で 設定しています。こんな場合はテキスト、よりも整数でやったほうが データが少なくてすむかなぁと思って悩んでいます。 でも直感的にわかるのはテキストだし。どっちがベターでしょうか。
MySQLのユーザって通常はGRANT文を使うと思うのですが、 MySQLデータベースのUserに直接追加する方法でもOKでしょうか?
436 :
NAME IS NULL :2006/01/04(水) 18:59:09 ID:Zlms4U+3
PHPでログインするスクリプトでMySQLを利用しようと思い勉強中ですが 以下のような感じのナイスなのはないでしょうか? $sql の部分がまだ理解不十分ですが、SQL文で認証(比較)できればと session_start(); session_register("sUID"); $form_id = $HTTP_POST_VARS["form_id"]; $form_pass = $HTTP_POST_VARS["form_pass"]; if ( !$_SESSION["sUID"] ) { $sql = "SELECT db_id, db_pass FROM login WHERE db_id = $form_id"; // db_pass も $form_pass と比較させたい $rs = mysql_db_query($db,$sql); // マッチしない場合 false 判定をさせたい if ( !$rs ) { print "認証失敗"; exit; } $sUID = $rs; }
437 :
436 :2006/01/04(水) 19:59:35 ID:Zlms4U+3
よくわかりませんが以下ので動作はするようになりました。
どう見ても変です。
>>440 さん本当にありがとうございました。
if ( !$_SESSION["sUID"] ) {
$sql = "SELECT db_name FROM login WHERE db_id = $form_id" AND db_pass = $form_pass;
$rs = mysql_db_query($db,$sql);
if ( !$rs ) { print "認証失敗"; exit; }
$row = mysql_fetch_array($rs);
if ( !$row ) { print "認証失敗"; exit; }
$sUID = $rs;
}
print "$row[0] さん";
もっといい方法とかありますでしょうか?
>>439 「enumは参照」っていう意味が分からないんだけど、ちょっと説明してくれる?
ほかの DBでの話し?
>>436 つか、PHPのバージョンはいくつなんだ?
$HTTP_POST_VARSは非推奨だろ。
442 :
436 :2006/01/05(木) 16:51:38 ID:???
スレ違いすんまそん、PHP Version 4.4.1 です。(MySQL 5.0.16) 下位互換性のために$HTTP_POST_VARSで記述されてるサイトが多かったのですか。 これからは$_POSTを使用します。
443 :
NAME IS NULL :2006/01/05(木) 16:52:43 ID:lInURVFv
掲示板風なものを作ろうと思ってるんだけど、 「プロバイダで一括削除」等の管理をしやすくするためには、 IPアドレスはどういう形式で格納したら効率的ですか? '192.168.0.1'という文字列で格納するのがいいのか、 3232235521と数値にして格納するのがいいのか、 それともこういう用途に適したいい方法があるのか
逆引きした結果も保存しとけば?
>>443 PostgreSQLみたいなネットワークアドレス型がある訳ではないので
192168000001のようにして数値で扱うのがいいんじゃない。
C0A80001とか3232235521だと視覚的にも判りづらいから。
>>444 逆引きできるIPアドレスとも限らんので、
その場合、同じ処理が掛けられないと思う。
>>445 プロバイダのネットアドレスをxxx.xxx.xxx.xxx/24 とか与えると消すようにしたいのだろうから、
その方法だとネットマスクの処理に手間がかかる。
フツーの整数にした方がビット演算が効くからそっちの方がいいでしょ。
# 視覚的にってんなら192.168.0.1とかは2進数の方が判りやすいぞ。
IPアドレスの格納は整数にして、INET_ATON 等で相互変換させる。
448 :
NAME IS NULL :2006/01/06(金) 13:45:57 ID:1Cw6srvg
フィールド名に number を使うのは禁止? これを使うとなんかうまく動作しないのよ、でも調べたがみつかんねー
SQLかなんかの予約語になるんじゃないかい
全然MySQLと関係なくなってるが、 逆引きチェックの方が実用的だと思うけどなあ。 アドレスなんてコロコロ変わるよ。 ocnとかdionとか膨大だし。 そんなわけで逆引きアドレス格納に1票。
PHPのadodbで使えるO/Rマッパーってないですかね
453 :
NAME IS NULL :2006/01/09(月) 05:38:00 ID:t5f/1qSc
MySQLを入れ直したら、GNOME端末でコマンドヒストリが無くなりました。 以前のように上キーで履歴を使え様にするにはどうしたらよいですか?
入れ直したってのはどこかからバイナリを持ってきたのか、それともソースをコンパイルしたのか。 ソースからならたぶんreadlineを使っていないせいじゃないかな。
configureのreadlineってそういう意味だったのか 勉強になった
設定情報のようなめったに変わらないものと ステータスのような割と頻繁に変わるものを 同じテーブルに持っても 問題ないでしょうか
データベースのフィールドを運用途中で追加することに問題ってあるのでしょうか?
>>457 後から必要になったのなら仕方あるまい。
>>457 問題になるときもあれば、ならないときもある。
例えば
SELECT * FROM `table`
とか
INSERT INTO `table` VALUES (1, 2)
とかしてて
カラムの順番や数に依存するときは問題あるでしょ。
460 :
NAME IS NULL :2006/01/10(火) 01:13:29 ID:GkVtn9lh
Perl-DBIを使っているということは、old_passwordを使っている ということですか?
SELECT * FROM table WHERE 文字列strが4桁の数字; このWHERE節ってどう書けばいいの?
独習でMySQLの使用方法を勉強中で詰まってしまっています。 使用バージョンはVer.4.1.16です。 長文になりますが、判る方がいたら、教えてください。 表1のようなテーブルを扱うとします。 表2のようにtype毎の合計を求めることは式2のようなSELECT文で出来ています。 (表1) 例 (表2) type毎の合計 +----+-----+ +----+----------+ | type| value| | type| SUM(value)| +----+-----+ +----+----------+ | A | 100| | A | 200| | B | 500| | B | 500| | A | 100| | C | 600| | C | 300| +----+----------+ | C | 300| +----+-----+ (式1) SELECT * FROM table0 ; (式2) SELECT type,SUM(value) FROM table0 GROUP BY type ; 教えていただきたいのは、表3にあるように、各type毎の合計を求めた後で、 その結果の値同士を計算する方法です。 GROUP修飾で'A-B'というtypeを作成することは可能なのでしょうか? どのような式を組めばよいのか、教えてください。 また、表4にあるような各type毎の合計を求める時に、 全体の中の比率(%)を表示させる方法も、式の組み方を教えてください。 GROUP修飾でtype毎に分類してしまっている状態で 全体の合計値を求めることは出来るのでしょうか? (表3) Aの合計 - Bの合計 (表4) 各typeの全体に占める割合 +----+----------+ +----+----------+-----+ | type| SUM(value)| | type| SUM(value)| ratio| +----+----------+ +----+----------+-----+ | A| 200| | A | 200| 15.4| | B| 500| | B | 500| 38.5| | A-B| -300| | C | 600| 46.2| +----+----------+ +----+----------+-----+ どちらもよくありそうに思うのですが、例示も見つからず困っています。 よろしくお願いします。
一旦、テンポラリに出して、その後に計算したら?だめ? 似たような(か、どうか知らんけど)例で平均値や偏差値を出して云々というのをテンポラリで出した後算出している例を MySQLで学ぶSQL実践のツボって本で見てたんで言ってるんだけど。 かくいう私も勉強中のものなんで一発でそういうの出せたら良いなとは思うけど。
>>463 発想が Excel的だな。
SQL(リレーショナルデータベール) と Excel(スプレッドシート) とは違うものだということを
まず理解すべし。
SQLでの SELECT は、大まかに言って、
1. FROM (テーブルの限定)
2. WHERE (行の限定)
3. GROUP BY (行の統合)
4. HAVING (行のさらなる限定)
5. SELECT (列の限定・拡大)
6. ORDER BY (行の順序付け)
の順に処理される(ちょっと日本語が曖昧で申し訳ないが)。
つまり、「行」というのは、1. でテーブルが限定された後は、
減ることはあっても増えることはない。
「列」なら 5. で、(その行で取得・計算できる情報に限り)増やすことが出来る。
君の言う「A, B を計算後に、A - B の行を増やしたい」というのは、
「3. が終わってから、まったく別の行を増やしたい」と言っているので、SQLで普通にやるのは無理。
アプリ側での対処が普通だし、そのほうが作りやすい。
また、「全体の集計値に対する割合」を知りたいというのも、その行で計算できる情報では無いので、
1つの SQLでは無理。2つの SQLに分け、変数でも使って
select @total := sum(value) from table0;
select type,sum(value),sum(value) / @total from table0 group by type ;
とすべし。
466 :
463 :2006/01/10(火) 23:07:18 ID:???
>>464 CREATE TEMPORARY TABLE を使用するんですね。
GROUP BYの作業を終えた時点で一呼吸おけるというのは、
ありがたいです。
ただ、テンポラリのテーブルを作成しても、
1行目から2行目の値を引くという作業や
各行を全体の合計値で割るという作業が
とても泥臭くなりそうでまいってしまいます。
平均値や偏差値ならば専用の関数で簡単に計算できそうですが。
>>465 まさにEXCELなら簡単にできるのにと思っていました。
クライアント側としてMySQLのコマンドラインツールを
使用しているので、データベースとしての機能と
表作成ツールとしての機能を混同していたようです。
示唆いただいたユーザ変数を駆使すれば
無理に表作成ツールとして使うことも出来るようですが、
いずれPerlやC言語からの使い方も勉強する予定なので、
結果同士の計算や各項目の割合を求める方法は、
その際にでも考えてみたいと思います。
ありがとうございました。
>466 そもそも複数の行同士での演算が必要って時点で、 テーブルの設計が間違ってる気がする。 正規化とか勉強するといいのでは。
>>461 4桁の数字が 1000〜9999 という意味なら、
SELECT * FROM table WHERE str BETWEEN 1000 AND 9999;
>>461 動作は未確認だが
SELECT * FROM table WHERE str REGEXP '^.{4}$'
でどうか。
470 :
461 :2006/01/11(水) 11:29:51 ID:???
> SELECT * FROM unko; だと問題ないけれども > SELECT * FROM unko INTO OUTFILE '/tmp/unko.out'; だと ERROR 1045: Access denied for user: 'tinko@localhost' (Using password: YES) とエラーになる。 ユーザ権限の種類で、mysqlの中から外のファイルを いじれる権利みたいなのってあるんだっけ?
>>471 1045: Access denied
でぐぐると「これはパスワードが間違っているときに出るエラーです。」
とでてくるのだが。
473 :
471 :2006/01/11(水) 12:05:50 ID:???
>>472 ありがとう
マニュアルをよく読んだらユーザ権限の中に
読みどおりファイル権限というのがあったよ
userテーブルをいじって対処できました
こういうときばっかりはグーグルより2chだね
Mysql & PHPで不特定多数ユーザー向けのWEBシステムを 構築しようと思っています。 PHPを介してDBデータへ接続させる際に、 MySQLユーザーアカウントを付与しますが、 このアカウントは1つだけでも問題ないのでしょうか? それとも、 同時にアクセスしてきたユーザーのことを考えて、 予備のアカウントを複数作成するべきなんでしょうか? ちなみに、 ユーザーはselectを用いた閲覧専用のクエリしか 送らないようになってます。
ダイレクト接続ではなく、要はPHPが接続するに過ぎないんだから1つでしょ
476 :
NAME IS NULL :2006/01/11(水) 22:39:10 ID:fwqbb4ss
結構変な質問だと思うけど、質問させていただきます。 concatをつかって、ある行を仮想的に作り出す。 (例えばidとtitleを’_’で仕切って’id_title’など) その仮想的に作り出したフィールドをもとに、joinできないものだろうか?? field名をas〜などとしても無理だった。 もしご存知の方がいらしたら。ぜひ!!
>>476 あんたが何言ってんのかわかんないけど、
select * from A left join B on concat_ws('_', A.id, A.title) = concat_ws('_', B.id, B.title);
とか、そういうこと?
478 :
NAME IS NULL :2006/01/11(水) 23:29:50 ID:fwqbb4ss
>>477 まあだいたいそうなんだけど、
select a.id,a.title,concat(a.id,'_',a.title) as makeField from DBA a left join DBB b on a.makeField
= b.id_title where ・・・・;
みたいな感じ。
479 :
478 :2006/01/11(水) 23:35:19 ID:fwqbb4ss
追記しますが、厳密にそういう形でないと困るという訳ではないが、 上記のmakeField(concatで作り出したfield)と外部の表にある、とあるfieldとjoinしたい!! という訳です。
>>479 それで joinかwhere でつながらないかい?
しかし日本語を含む長いtextでのjoinについては、このスレで
ちょっと前に話題が出て、問題ありだった様な気が…
481 :
NAME IS NULL :2006/01/12(木) 13:36:17 ID:FrPHCos/
5.0でも集合演算except, intersectは使えないのですか?
もし、知っていたら教えてほいんだけど、 mixiのマイミク登録って、理論的には承認するIDと承認されるIDの二つのカラムの テーブル構造だと思うのです でもさ、それって理論的なMAX値は(登録者数)x(登録者)のレコード数になると思うのですよ 今、何十万人だっけ?100万人か? ってことは理論的に1億レコードを想定することになるんだろうか??? もし、そうなら、これって普通の考え方なんだろか? スレ違いの話題だったらスマソ
>482 マイミクって1000だったかその辺で制限あるんでなかった? それにレコード数の見積もりは、理論上の最大値じゃなく 実際問題としてどのくらいになるかでいいんじゃないの。 まぁそれにしても会員数次第ではあるが。
>>483 なるほど。
1000登録までって制限付ですか
ごめん、(登録者数)x(登録者)だったら、1億じゃ足りないね^^;
「想定する実際問題」の値で運営するのって難しい判断だろうな
mixiみたいに自社開発案件だからできるけど、納品案件だったら顧客の
とんでもない仕様を突きつけられることになっちまうもんね
それに「友達の友達」って関係図の検索ってどんなテーブル構造なんだろう??
どう考えても、あんなにすばやく検索できるのは、なんかテーブル構造に仕掛け
でもしない限り思いつかないんだけどな
485 :
:2006/01/12(木) 18:36:38 ID:NI/3Vo8w
重くなったのでshow processlist;みたら unauthenticated user がありました。 skip-networkingしてるのでlocal以外からは接続できません。 ぐぐるとバグの可能性があるとかでいろいろみてみたら --skip-name-resolveがいいらしいと・・ --skip-name-resolveやると何か問題ありますか? 稼働中なので設定変えるのがこわいです バージョンは4.0.20です
486 :
NAME IS NULL :2006/01/12(木) 21:10:07 ID:7YlGT1cD
差集合(table1-table2)できたよ〜 SELECT a.* FROM table1 a WHERE a.id <> ALL ( SELECT c.* FROM table1 b LEFT OUTER JOIN table2 c ON b.id = c.id WHERE c.id);
487 :
478 :2006/01/12(木) 22:59:43 ID:PpvIqsEu
>>480 ごめんなさい。477で書いてあるようにすればつながるよ!!って事だったんですね。
見事つながりました。ありがとうございました。
でも、俺のやりたい事は、concatだけでなく、その部分の前にifを入れてみたりしたやり方。
で、実験的にやってみたところ、5分ぐらいたっても回答なし・・・。
ちなみにそのsqlを公開すると、
select a.id,a.title,b.conAft from aDB a left join bDB b on if(a.id<37,concat(a.id,'_',37),if(a.id>37,concat(37,'_',a.id),'NG')) = b.conAft limit 10
という文章。
帰ってこない・・・
イントラネット内でmysqlサーバに別PCのクライアントから接続する場合の手順は 1.サーバでmysqlサービスを起動させる 2.クライアントPCからtelnetを使ってサーバに接続 3.mysqlのフォルダに移動し、リモートアクセス可能なユーザーでログイン これでいいのでしょうか? 今までlocalhostでのアクセスしかしたことがないので、リモートログインのやり方がよくわかりません
>>488 それでも良いけど、それはサーバ機のMySQLサーバに、
サーバ機のMySQLクライアントを使って接続するパターン。
サーバ機-クライアント機の間はtelnetのプロトコルで接続され
MySQLのC/Sの関係ではローカル接続。
サーバ機のMySQLサーバに、クライアント機のMySQLクライアント
(クライアントのOSに合わせて用意されてる。公式に用意されてなければ
ソースからコンパイル)を使って接続するパターンもある。
その場合、3306番ポート(MySQLのデフォルト設定)を使って、
サーバ機-クライアント機の間はMySQLの通信プロトコルで接続される。
前者は標準的なtelnetだと暗号化されてないのでsshなりを使うべきだし、
後者はSSLなりを噛まさないと素でデータが流れる。
イントラとは言え注意すること。
490 :
359 :2006/01/13(金) 01:10:11 ID:???
mysql> SELECT * FROM t1; +-----+--------+--------+--------+ |name | code1 | code2 | code3 | +-----+--------+--------+--------+ | Tom | 1 | 2 | 3 | +-----+--------+--------+--------+ mysql> SELECT * FROM t2; +-----+--------+ |code | Fruit | +--------------+ | 1 | リンゴ | | 2 | バナナ | | 3 | みかん | +--------------+ 上記の2つのテーブルを結合(?)して <イメージ結果> +-----+--------+--------+--------+ |name | code1 | code2 | code3 | +-----+--------+--------+--------+ | Tom | リンゴ | バナナ | みかん | +-----+--------+--------+--------+ というように、 codeを名前に置き換えたテーブルを 出力させたいのですが、 どのようなSQL文になると思われますか?
>>489 ああ、ありがとうございます
クライアント機のmysqlクライアントでサーバに接続する方法が知りたかったので
早速試してみます
あるユーザーがそのデータを登録しているか否かを判定する場合って、 whereでそれを検索してcount(*)が1以上か、とかで判定するしかない?
>>490 何がやりたいのか、うすらぼんやりとしか分かりませんが
下のようなテーブルデザインで考えてみたらどうでしょうか。
Fruits Table
+-----+--------+
| fid | fruits |
+--------------+
| 1 | リンゴ |
| 2 | バナナ |
| 3 | みかん |
| 4 | イチゴ |
| 5 | スイカ |
+--------------+
Person Table
+-----+--------+
| pid | person |
+--------------+
| 1 | Tom |
| 2 | Ken |
| 3 | July |
+--------------+
Favorite Table
+-----+------+
| pid | fid |
+-----+------+
| 3 | 3 |
+-----+------+
| 1 | 2 |
+-----+------+
| 1 | 1 |
+-----+------+
| 2 | 2 |
+-----+------+
| 2 | 5 |
+-----+------+
| 3 | 4 |
+-----+------+
このデザインなら、後からFruitsの種類を増やしても
テーブルにコラムを追加する必要がありません。
つーか、まずSQLの基礎から勉強すべきでしょう。
494 :
493 :2006/01/13(金) 11:46:24 ID:???
ちっ、半角スペースはHTMLの仕様で2個以上の連続は 無視されるんだった。 HTMLの基礎から勉強してきます。
>>487 aDB と bDB は、それぞれ何件?
1万件も無いようだったら、マシンがしょぼいんでしょう。
それ以上なら、
create temporary table tmp_aDB
select id, title, if(a.id<37,concat(a.id,'_',37),if(a.id>37,concat(37,'_',a.id),'NG'))
from aDB;
って、テンポラリテーブル作って試してみたら?
MySQLのバージョンが高いのなら、View を作ってもいいだろうけど。
あと、仮名でも、aDB ってのは、aTABLE のほうがいいかもね。
>>490 select name, a.Fruit, b.Fruit, c.Fruit
from t1
left join t2 as a on t1.code1 = a.code
left join t2 as b on t1.code2 = b.code
left join t2 as c on t1.code3 = c.code
;
>>492 アプリ側で名に使っているか知らないけど、
普通は「検索結果が 0行なら無し」でいいんじゃないの?
496 :
NAME IS NULL :2006/01/13(金) 20:34:55 ID:QbLu7ovg
わけあってナロー環境なので具ぐれなくて質問します。 windows版Mysql4.2.1です。select文で正規表現使えますか? 具体的には「あ行か行」で始まる名前とかを選択したいです。
Windows版MySQL4.1.16でキャラクタセットをeucjpmsにするとエラーで サービスが起動しないのですが、諦めるしかないんですかね。 仕方ないのでとりあえずujisにしてるんですが。
498 :
497 :2006/01/13(金) 21:52:15 ID:???
すいません。調べ足りませんでした。
作ったデータベースの構造をsql構造で出力してくれるコマンドかスクリプト ってありませんか? googleで「MySQL データ構造 出力」などで検索しても出てきませんでした。 やりたいことは現在データの入っているデータベースからデータ構造だけ 抜き出して、新たにDBをセットアップできるようにしたいのです。 #phpMyAdminのエクスポートでsqlを選んで実行するとデータまで入ってくるので データの入っていない CREATE文だけがあるようなものをイメージしています。
えっ... mysqldump -d
Mysqldumpとれば最初の方に出てくるからソレをエディタで編集とかは駄目?
+------+------+ | field | word | 図1 +------+------+ | bbb | hi | | bbb | mn | | aaa | de | +------+------+ ↓ +------+ | word | 図2 +------+ | hi | | mn | +------+selectでbbbを検索すると図2のようになりますよね。 select * from where 別のテーブル like '%word%' for( i = 0 ; 引っかかった数-1>i ; i++) { 「or '%word%';」 } 説明ベタなのでソースっぽいのを載せましたが(一個の場合はifでfor文をスルー) 図2の引っかかった数と、図2に引っかかったものを上から1つづつ、順次に取り出す(選択?)することは可能ですか?
>>503 ソースよりも結果を示せ。
+------+------+
| field | word |
+------+------+
| 合計 | 2 |
| bbb | hi |
| bbb | mn |
+------+------+
てな感じにしたいの?
ん、多分違うな。
505 :
NAME IS NULL :2006/01/14(土) 00:40:21 ID:8aKIOeQA
>>499 show create table テーブル名
だとだめ??
>>504 すみません。
MYSQLというかJAVAでデータベースを弄るソースなので、でもどこで聞けばいいのかわからず
mysqlでselectで絞り込んだものからどの程度情報を取り出せるのか教えてもらいたく、質問させていただきました。
テーブルの中に入ってる必要はないですが、
>>504 さんのあげてるように、
select後のテーブルから合計2という情報は知りえるのでしょうか?
+------+------+------+
| ID | word | field |
+------+------+------+
| 25 | bbb | hi |
| 29 | bbb | mn |
| 34 | aaa | de |
+------+------+------+
↓
+------+------+
| ID | word |
+------+------+
| 25 | hi |
| 29 | mn |
+------+------+
IDを使えばselect後のテーブルも選別しやすいでしょうが、番号が離れていればやはり不都合だと思われます。
select後のテーブルを上から順次選択する方法はないでしょうか?
>>506 JAVAでは使っておらんで分からんが、普通は、select 結果を 1行ずつ取得できるような
方法があるはず。調べてみんしゃい。
あと、その「結果を 1行ずつ取得」する前には、「結果の行数」は知ることは出来ないはず。
まあ、知らなくても、1行ずつ全部を取得できるはずだけど。
>普通は、select 結果を 1行ずつ取得できるような方法があるはず。調べてみんしゃい。 これはmysqlの機能で、ですよね? 貴重な情報本当にありがとうございます。 結果の行数はそもそもfor文を抜けるために必要ろうなと思っていたので、 その一行づつ取得するのが終わったらfor文を抜けるとかやれたらとかまあそれは取らぬ狸の皮算用 一行づつ取得について調べてきます。 ありがとうございました。
ここで質問してる連中ってマニュアルは全く読まないんだな。 それで人類と言えるのか?
>>509 そんな人たちがいるからこそ儲かるビジネス
つ 有償サポート
でもOSSにそういう意味でそれを求めるのは意味が無いとおもう。
1行ずつ取得見つかんない selectしてるものを1行ずつってことですよね? 卒研で胃が痛いです +------+------+ | field | word | Bテーブル +------+------+ | bbb | hi | | bbb | mn | | aaa | de | | ccc | mn | | ddd | de | | eee | mn | | aaa | de | | bbb | mn | | ccc | de | +------+------+ このテーブルからfieldの種類を取り出したいのですがどうすれば? (上のテーブルだとaaa,bbb,ccc,ddd,eeeの5つを取り出すということ) onakaitai
SELECT COUNT(DISTINCT field) FROM Bテーブル
513 :
512 :2006/01/14(土) 07:08:24 ID:???
すまん、項目数じゃなくて項目を取り出したいだけなら SELECT DISTINCT field FROM Bテーブル
ありがとうございます。 しかし、種類の数ではなく、 +------+ | field |Bテーブル +------+ | bbb | | aaa | | ccc | | ddd | | eee | +------+ fieldの重複部分をなくした状態を取得できないかなと 説明下手ですみません。
すみません リロードしてませんでした。 親切に教えていただき本当にありがとうございます。 もし卒業できたら貴方様の力添えのおかげです。
MySQL4.0を使っています。 実験用にMySQL4.1もインストールしたいのですが、バージョンの異なる2つMySQLをインストールすることはできますか?
文系の大学でデータベース論みたいな講座で、卒研が実際にはおもいっきりプログラミングってのはありがちな罠。 理系の大学で、プログラミング出来ないってのは致命的だけどな。
卒論でデータベースの操作コードなんてウラヤマシス
521 :
PHP Mysql初心者 :2006/01/15(日) 23:08:49 ID:OAfTmBF8
MySQL についての質問 MySQL とPHPを用いたWEBサイトを持っているのですが下記分からないことがありますので、ご教授お願いいたします。MySQL とPHPについては初心者です。 質問内容 MySQLのデータベースでデータを設定しました。MySQLでは ちゃんと日本語表示ができるのですが、WEBに表示させると 日本語ではなくなります。英数小文字アルファベットはうまく表示します。よく言う化けるのではなく、??? が表示されます。 なお、2つのSQLを持っているのですが、一方では問題なく日本語が表示されます。 片方だけが ??? の表示になります。 日本語表示はWEBのHTMLのところで うまくいく方はja-sjis うまくいかないほうは ja-utf-8 を使っています。htmlでの 日本語表示は両者ともOKです。 SQL仕様 うまくいく方 phpMyAdmin2.6.4-p12 MySQL4.0.25 Language japanese Ja-euc, Ja-sjis、Ja-utf-8 も選択可能 Ja-sjis を選択するとうまくいく。 うまくいくほうは SQLデータベースに日本語で 東京 と入力すると SQLでは 東京 、 と表示されと web でも 東京 と表示される。 Hokkaido と入力すると hokkaido と表示される。 うまくいかない方phpMyAdmin2.6.4-p12 MySQL4.1.13 Language japanese (ja-utf-8) MySQL charset(文字セット) UTF-8 unicode(utf8) Mysql 接続照合順序 Utf8-general-ci またはujis_japanese_ci,またはujis_bin,または Sjis_japanese_ci,またはsjis_bin うまくいかないほうは SQLに日本語で 東京 と入力するSQLデータベースでは 東京 と表示され WEB では ?? 表示される Hokkaido と入力するとSQLデータベースでもwebでも Hokkaidoと表示される。 うまくいかないほうでも日本語表記をできるようにするにはどうすればよいのでしょうか。 ご教授お願い致します。
PHPは誰がどのパッケージをインストールしたんだ? 恐らく、PHPに組み込まれているMySQLライブラリがlatin1辺りになっている。 4.0系では文字コード変換がされないので素で出てくるが、 4.1以降では文字コード変換がされるので、mysqlライブラリでアクセスする際の文字コードに気をつけないと'?'になる。 この手の質問はもう嫌と言うほど出てきて対処法もいろいろ出ているので、 過去ログ見るなり、googleで調べるなりしてくれ。
523 :
NAME IS NULL :2006/01/16(月) 09:59:28 ID:ORbHEjhu
522 さま ありがとうございました。 調べてみます。
MYSQLって文字化けとの戦いが普通なんですか?
>>524 普通は最初に退治しておく
EUCならEUCで全部まとめちゃう
デフラグに相当するものとして ダンプしてまたぶちこむ というのがあるけど 能力計測とかで わざとフラグメンテーションさせたいときは コマンド一発で何かうまい方法無いかね
527 :
NAME IS NULL :2006/01/16(月) 15:20:14 ID:b6FaLeio
MySQL4.0.26(sjis)を使用しています。 PHPでスレッド式の掲示板を作成しているのですが、投稿した本文から検索するSQLを発行するのにとまどっています。 CREATE TABLE `res` ( `key` int(10) NOT NULL default '0', `no` mediumint(7) NOT NULL auto_increment, `name` varchar(50) NOT NULL default '', `mail` varchar(43) NOT NULL default '', `time` varchar(12) NOT NULL default '', `com` text NOT NULL, `ip` varchar(15) NOT NULL default '', PRIMARY KEY (`key`,`no`), ) TYPE=MyISAM AUTO_INCREMENT=1 ; がレスを保存するテーブルです。 `com`に投稿した本文が入っているのですが、ここから例えばMySQLという文字を検索する場合に最適なクエリはどのようにすればよいでしょうか? 現在は SELECT * FROM `bbs`.`res` WHERE `com` LIKE '%MySQL%' として検索しているのですが、どうしても40秒以上かかってしまいます。 フルテキストインデックスも考慮したのですが、投稿したときにインデックスが邪魔で時間がかかると思うので使用していません。
>>527 中間一致だとテーブルを端から全件読んで検索をかけるからデータ数に比例して時間がかかるようになる。
他の検索条件と組み合わせるか、あきらめてフルテキストをつかいねぇ。
529 :
527 :2006/01/16(月) 15:32:19 ID:???
フルテキストを使用すると投稿の際時間は相当かかりますか? 実験出来る環境にいないので、とりあえずやってみるということが出来なくて。。
アフォな質問ですが教えて下さい。 MySQLのデータベースをおいてあるパーティションの容量が100%になった場合、 テーブルが壊れますか?また、その最後に書き込みしているデータベースにアクセス することはその後可能ですか?(HDDが一杯の状態で) 書き込みができない場合にはタイムアウトで処理をキャンセルする機能とか存在するんでしょうか?
531 :
527 :2006/01/16(月) 19:15:38 ID:???
FULLTEXTインデックスを貼ってみようと思いましたが、FULLTEXTは 日本語に対応していないと言うことなので諦めました。 現在約300万のレコードが入っているのですが、どうすれば高速に検索できるでしょうか??
>>531 茶筅で単語抽出して、それでインデックス作るのはやったことがある。
もっとも自分のところだとベタ検索でも全然問題なかったのだが。
>>527 TEXTは確か、頭200バイト前後だったと思うけどindexつけられるんだよね。
LIKE に効くかどうかとか詳しい事は知らないので、俺もちょっと知りたい所。
で、もし効くとした場合、仮に頭256バイトに付けられると仮定して、
検索用テーブルを作る。「記事番号、本文」の2カラム。
本文は、256バイト毎に入れる。本文1Kなら4レコードみたいな。
検索はこれに対して行う。
切れ目を跨いだワードの検索をどうするかとかは知らんw
マニュアルにちゃんと書いてあるんですけどね。
mysqlサーバPCに、別のクライアントPCからプロンプトで「telnet サーバPCのIP 3306」と打つと、 4.0.20a-nt・〜 とmysqlバージョンの後に意味不明な文字が出て、少し経つと「ホストとの接続が切断されました。」と出て接続が切られてしまいます。 これは、サーバの方で3306番、mysqlのデフォルトポートが開いてない、ということなんでしょうか? サーバPCで「netstat -an」と打つと、確かに「 TCP 0.0.0.0:3306 0.0.0.0:0 LISTENING 」と答えが来ているのですが・・・
538 :
?527 :2006/01/17(火) 00:15:29 ID:???
やっぱりわかりません。。 もうテーブルにデータが大量に入っているので、茶筅とかは考慮していません。。
>>536 telnetでポート叩いて結果が返ってきて、netstatで結果が返ってきて、
どこをどうやったらそういう解釈になるんだ?
telnetでポート叩いてみるのも、他人から聞いただけで意味わかってないのか?
自分で答え書いてるだろが・・・・・・
>>538 レコードは300万として、テキスト総量は何M?
総当たりだから、マシンスペック以上は無理じゃないかな?
namazuみたいなインデックス方式なら話は別だけど、これだと
例えば「日本」で検索しても、「日本語」に対してhitしないんだよね。
541 :
527 :2006/01/17(火) 05:27:40 ID:???
1.2GBです。 やはりサーバーに依存しますよね。。 ありがとうございました。レプリケーション等で対処してみようと思います。
>>527 あくまで参考だが、個人的に興味もあったのでFULLTEXTインデックスを試してみた。
MySQL Ver. : 4.0.24
レコード : 約5万
データ総量 : 約25MB
LIKE 検索
こんなカンジで→ SELECT * FROM `bbs`.`res` WHERE `com` LIKE '%ほげほげ%'
時間(micro秒)
0.868223190308
0.750785112381
FULLTEXT検索
こんなカンジで→ SELECT * FROM `bbs`.`res` WHERE MATCH (`com`) AGAINST ('ほげほげ')
時間(micro秒)
0.0713179111481
0.0538399219513
日本語検索も問題なくいけた。
思ったよりずっと高速化した。
データ総量が全然違うが、試してみる価値はあるのかもしれん。
>>543 それって、「ほげほ」や「ほ」「ほげ」 で同じようにヒットします?
>>534 の見て思ったんだが、まず TEXTへのインデックスは LIKEにも
頭にワイルドワードを使わなければインデックス効果がある。 'ほげ%' はOK
ってことは、534 のレコードに、本文を1文字ずつずらして抜き出しレコード追加。
抜き出す文字数は現実的に検索されそうな文字量でいいだろうから10〜20バイト程度。
これで、LIKE '探したい文字%' とやれば、頭にワイルドカード指定したのと
同じ効果があり、相当速いのではないだろうか。
必要テーブル容量は、仮に全部日本語として、ソースデータ総量の
(1レコード抜き出しバイト数 /2) 倍 程度。 レコード数は(総量/2)レコード。
1.2Gなら、 約10G、6億レコードってところか。
546 :
NAME IS NULL :2006/01/18(水) 13:56:49 ID:U6VCCe9M
もし、わかる方がいらっしゃいましたら教えて頂きたいのですが OS:FC3 にmysql4.1.15を以下の手順でインストールしました。 # groupadd mysql # useradd -g mysql -d /usr/local/mysql mysql # passwd mysql # chown -R mysql:mysql /usr/local/mysql/ # cd /usr/local/src # tar zxvf mysql-4.1.15.tar.gz # cd mysql-4.1.15 # ./configure --with-charset=ujis --with-extra-charsets=all \ --with-mysqld-user=mysql --prefix=/usr/local/mysql #make #make install #/usr/local/mysql/bin/mysql_install_db この後 #/usr/local/mysql/bin/safe_mysqld --user=mysql& で起動しようとしたのですが # Starting mysqld daemon with databases from /var/lib/mysql STOPPING server from pid file /var/run/mysqld/mysqld.pid 060118 13:10:32 mysqld ended となってしまいます。 /var/log/mysqld.logをみると 060118 13:10:32 mysqld started 060118 13:10:32 InnoDB: Started; log sequence number 0 43634 060118 13:10:32 [ERROR] /usr/local/mysql/libexec/mysqld: Can't create/write to file '/var/run/mysqld/mysqld.pid' (Errcode: 2) 060118 13:10:32 [ERROR] Can't start server: can't create PID file: No such file or directory 060118 13:10:32 mysqld ended なぜ/var/run/mysqld/mysqld.pidファイルが作成されないのかがわからないのですが・・・
mysqlユーザのパスワードって何で暗号化されてる? マニュアル見てもわからんかった
>>546 No such file or "directory"
↑ここに注目!
>>547 もう一度マニュアル読め。はっきりと書いてある。
ハッシュアルゴリズムはSHA1っぽいが詳しくはソース読まないとわからん。
550 :
NAME IS NULL :2006/01/18(水) 14:46:00 ID:U6VCCe9M
>>548 /var/run/配下にmysqldを作成したら、うまく起動できました。
どうもありがとうございます。
初心者なものでinstall時に自動で作成してくれるものと思ってました・・・
DAYOFMONTHとMONTH関数の違いは何ですか?
552 :
572 :2006/01/19(木) 04:26:59 ID:???
ありがとうございます。 HDD容量は必要以上に有り余っているので特に心配はありません。検索速度は非常に早くなるようですね、、 現在テーブルには3つのインデックスがあり、 一つはマルチカラムインデックスの主キー、 残りの二つは投稿者IDと内部IDの通常インデックスを張っています。 このテーブルの名前(varchar50)と本文(text)の2つのカラムにそれぞれFULLTEXTインデックスを張ってみます。 一応DBをコピーしてテストしてみます。 検索速度やレコード変更速度等、結果が出しだいまた報告します。よろしくお願いします。
553 :
572 :2006/01/19(木) 09:58:04 ID:/bnY9/LX
導入前 SELECT name (LIKE) 2.4546411037445秒 SELECT com (LIKE) 2.4688010215759秒 INSERT 0.00033998489379883秒 ##############################3 名前(varchar) INDEX SELECT name (LIKE) 1.5695791244507秒 SELECT name (against) 0.00019598007202148秒 INSERT 0.00036096572875977秒 ############################### +本文(TEXT) SELECT com (LIKE) 2.4709792137146秒 SELECT com (against) 0.00019407272338867秒 INSERT 0.00050210952758789秒 処理速度は大変向上しましたが、検索結果は全く当てにはなりませんでした。。 検索として使用するのであれば、このインデックスはおすすめできないような気がします。 今回使用したクエリです。 クエリキャッシュの効果はいらないので"SQL_NO_CACHE"を使用しました。 SELECT SQL_NO_CACHE * FROM `bbs`.`res` WHERE `name` LIKE '%てすと%' SELECT SQL_NO_CACHE * FROM `bbs`.`res` WHERE `com` LIKE '%てすと%' SELECT SQL_NO_CACHE * FROM `bbs`.`res` WHERE MATCH (`com`) AGAINST ('てすと')
データベースを作ってユーザAに権限を与えたのですが、 その権限を確認するにはどうしたらいいんでしょう。
557 :
NAME IS NULL :2006/01/19(木) 15:16:30 ID:8OrQfmam
>>463 表3は、SUM関数の結果同士の演算
表4は、サブクエリで総合計を求めて、割り算で比率を求める
だよFもんTH関数なんてあるの?と思ったら、DAY_OF_MONTHなんだ。
563 :
NAME IS NULL :2006/01/19(木) 23:29:57 ID:SGWTWbu3
MySQL4.1の環境です。 テーブルはujisの文字コードです。 データのエントリー作業をしているのですが「〜」の波線だけ 「?」に文字化けしてしまいます。なにか対策はないでしょうか?
>>563 ・UTF-8を使う。
・サーバの変換機能を抑制する(mysqldのオプション)。
>>565 そういう話ならujisを指定するのが間違いで
eucjpmsを指定するのが筋かね、MySQL4.1/5.0ならば。
567 :
566 :2006/01/20(金) 03:36:29 ID:???
568 :
NAME IS NULL :2006/01/20(金) 13:01:43 ID:mentXhyV
二つのMySQLサーバをたてているのですが、 片方のサーバに接続した状態で、 もう一方のサーバのテーブルのデータを検索することは できるのでしょうか?
570 :
NAME IS NULL :2006/01/20(金) 15:29:47 ID:mentXhyV
例えば、192.168.0.1のPCと192.168.0.2のPCに MySQLサーバをインストールしているとします。 ユーザは、どちらのサーバのテーブルのデータも 検索できるものとします。 その時、192.168.0.1のサーバに接続した状態のまま、 192.168.0.2のサーバ内にあるテーブルのデータを 検索することができるのだろうか、 ということです。
俺は絶対に釣られないぞ!
574 :
NAME IS NULL :2006/01/20(金) 18:45:09 ID:mentXhyV
573様 ご教示ありがとうございました。 できました。
設定がおかしくなって訳分からん状態になってしまったので、 全部まっさらにしてやり直そうと思い、mySQLをアンインストールしたのですが、 次にmySQLを入れてもデータが残ってるようで、初期化が出来ません。 何処を消せば初期化出来るようになりますか?
>>575 DROP DATABASE 文を何度か実行して実データを全て消す
(=データディレクトリを削除する)
my.ini を消す。
両方やれ
データベースのサイズを制限する方法ってありますか?
$Result_ID = mysql_query($SQL); echo($Result_ID); 出力結果 -------------------- Resource id #3 気になったのですが、 上記のように結果セットをそのまま出力するとIDが表示されますが、 この数字って何を示してるんでしょうか?
それはmysqlではなくphpの質問だな
int 10で格納していたのを、あまりに数が大きくなってきたので例えばint 11に途中から 変更した時にどんな問題点がでてきますか?
>>581 int(10) で足りなくなったのなら int(11) でも簡単に足りなくなるのではないのか。
もしそうなら、さっさと bigint にすべき。
アクセスが遅くなるわけでもなし
MySQL を使った何かのプログラムが「10桁」というのに
依存しすぎてる場合を除けばまず問題無い。
int型のauto_incrementで4,294,967,295越えたら、どうなるんですか? 0に戻ったりします?それとも勝手にbigintになったり?
クエリでヒットしたカラム自体にそのヒット数を通算カウントされていくという オートマトンっぽいテーブル仕様はmysqlで実現可能ですか?
>>583 0 に戻らないし、 bigint にもならない。
それ以上増やすことが出来ないので、そこで止まってしまう。
その状態で auto_increment のカラムを指定せずに
INSERT を行うと大抵 Duplicate entry エラーでクエリは失敗する事になる。
最初からこんなことが発生しないように
テーブル定義をするべきなので当然といえよう
例えば、板テーブル、スレッドテーブルがあってスレッド合計は、SUMすれば出てきます。 しかし毎回計算するのも間抜けなので板テーブルにthread_totalを作るというのはアホですか?
じゃー、bigintにしてても18446744073709551615以上はauto_incrementで insertできないってことですか。。 普通それ以上の数をauto_incrementする場合どうしてるんですかね?
その前に人類は滅びる
>>587 そんなに中出…いや insertしないし
INDEXについてマニュアルを見て疑問に思ったので質問させてください。 mysql> CREATE TABLE test ( -> id INT NOT NULL, -> last_name CHAR(30) NOT NULL, -> first_name CHAR(30) NOT NULL, -> PRIMARY KEY (id), -> INDEX name (last_name,first_name)); 次のクエリには name インデックスが使用されません。 mysql> SELECT * FROM test WHERE first_name="Michael"; これでfirst_nameでもインデックスを有効にするには、複合インデックスを使わず、last_name、first_nameそれぞれのインデックスを生成すればよい、ただし実際に使われるインデックスは1つのみ という認識で合っていますか?
環境は Apache 2.0 PHP 5.1.2 MYSQL 5.0 です。 php.iniの設定です。 magic_quotes_gpc = off magic_quotes_runtime = off magic_quotes_sybase = off エスケープ文字に関して悩んでいます。 エスケープ文字対策として insert時には登録する文字列($string)に対してphpの addslashes() 関数を使用しています。 (例) $string = addslashes(入力文字列); $sql = "insert into test (string) values ('$string')"; select時には以下のような対応をしています。 $filter = "検索に使用するフィルタ文字列"; $filter = str_replace("\\","\\\\",); $filter = str_replace("'","''",$filter); $filter = str_replace("%","\%",$filter); $filter = str_replace("_","\_",$filter); $sql = "select test from string like '%$filter%'"; %_'での検索は上手くいくのですが バックスラッシュでの検索が出来ません。 (例) aaa\aaaという文字列に対してフィルタに\と入力して検索した場合引っかからない。 \文字の扱いがどうしてもわかりません。 ↑のような処理でなにかお気づきの点がありましたら教えてください。
592 :
591 :2006/01/23(月) 21:02:38 ID:???
すいません。 上手く処理されていました。 ソースの間違えとかではなく私の勘違いでした。
>>586 いや、アホではない。
つまりデータの冗長化(この場合は、sumの計算結果を保存しておくこと)の是非の問題かと思うが、
・その冗長化に意味がある(処理の高速化、など)
・きちんと保守できる(データ挿入時に忘れずに入れる、関係の定義が変更になっても忘れない、など)
・他に悪い影響を及ぼさない(容量を極端に増やさない、など)
のであれば、冗長化も十分にありえる手法かと。
>>591 余計な事にレスして済まんが、DBに渡す文字列をエスケープする時は
データベースアクセスAPI毎に用意されているエスケープ関数を使うべきで
addslashes()はあくまで最後の手段と考えるべきだ。
いっせーのせで接続したら一度にどのくらい接続できるんだ? 30クライアントくらい?
596 :
591 :2006/01/24(火) 00:11:27 ID:f/WlHjh4
>>594 勉強になります。
データベースアクセスAPIに関してはほとんど知識はありませんが
これから学習したいと思います。
レスありがとうございました。
>>595 そんなのどのデータベース製品だろうと、DBチューニングで決める事柄
一般解は無し。
>590 そんな時のためのEXPLAIN
ちょっとお聞きしたいのですが、 MySQL4.0.23をWinXPに入れて、 コマンドプロンプトから長時間操作していると、 急にPCがクラッシュして "システムにダメージが発生したのでOS再インストールしてください。" みたいな英文(40行ぐらい)が表示されるんですが、 こういう経験ありますか? ちなみに、電源ボタンから再起動すると 「システムは深刻な状態から回復しました」 とメッセージボックスが表示されます。 普通に使えるようになるんですが。。。
>>599 長時間ってもプロンプトからの操作なので、
人間が持続できる時間と考えても、そういうことはないね。
Windowsは問題ないんだけど、Linuxは良く止まるんだが等々は
PCのメモリ周りに問題があることが多い。電源供給が足らないとかもね。
memtest86あたりで一度チェックしてみては。
601 :
599 :2006/01/24(火) 04:58:00 ID:???
>>595 >>602 マジレスするとn個のスレッドを立てて「よーいどん」で接続を張りにいかせる実験をすれば分かる。
MySQLの場合、関わってくるのは最大接続数を規定する max_connections と、あとTCP/IPの
リソース取得に関係する back_log。
max_connectionsはデフォルトで100、back_logはデフォルトで50だっけな。
両者とも300くらいに設定すれば同時に200個のスレッドからよーいどんで接続要求を
出させた場合、全部で100msくらいで200個の接続が完了する。
あとは自分で調べてネ ノシ
604 :
NAME IS NULL :2006/01/24(火) 20:52:02 ID:XkwmC+re
MySQLとPostgreSQLって実際の業務でどのくらい使われてるんでしょうか? 自分SEなんですけど、OracleやDB2やSQLServerを使った案件しかやった事ないんですが、 本当にMySQLやPostgreSQLって使った案件ってそんなにあるんでしょうか?? 誰かお願いします。 それと仮に案件あるとして、たぶん、MySQLやPostgreSQLでデータベースのキャラクタセット を指定できると思いますが、やっぱ、UnicodeではなくShift-JISとか使われてるんでしょうか?
yahooはpostgresql、googleはmysqlじゃなかったっけ?
yahoo.comはMySQLだというのを聞いたことあるが
googleって検索がmysqlなの?
PostgreSQLの開発元のUCBがMySQLとは・・・
>>593 遅レスでサンスコ
合計出すのもそんなに処理時間がかからないと思いますが、コード的に楽という
のもあるので SUMの結果を入れるフィールドを作ってみようと思います。
611 :
NAME IS NULL :2006/01/24(火) 21:21:07 ID:XkwmC+re
>>604 です。
つまり、ここで発言・質問してる人って趣味でやっている人でしょうか??
それとも、仕事で触っている人でしょうか??
>>611 >
>>604 です。
> つまり、ここで発言・質問してる人って趣味でやっている人でしょうか??
> それとも、仕事で触っている人でしょうか??
俺は仕事でPostgres、MySQLを使っている。
MySQLの案件というのは、あることはあるがやはりOracleとかのほうが
一般的じゃないのかね?
character setについては、このスレ見ると良く分かるが
utf8が無難、というかutf8意外だと痛い目にあう
>>604 ISPの鯖屋みたいなところが相手の仕事じゃないと、DBMSの価格や性能の違いが
余り出ないから慣れてるものをずっと使う感じがするけどね。
ウチが関わるようなところは小中規模なレベルなので、
MySQLやPostgreSQL、あとSQLServer(含むMSDE)が多いです。
>UnicodeではなくShift-JISとか使われてるんでしょうか?
Windowsが先方から指定されて、MySQLを提案&採用するようなケースでは
自分はShift-JIS以外は使ったことがありません。
質問者ですが、質問しているのは趣味の人が多いんじゃないんですかね。 OracleとかDB2とかいじったことないですし、有料のものはいじる気もないですし、 必要性もないと思います。(というか違いがわからない。) Webアプリに使っているのでレンタルサーバで多く導入されているMySQL,Postgreを 使いたいと思う心理。
616 :
527 :2006/01/25(水) 05:16:53 ID:C2WCInvb
いま流行りのLivedoorもMySQLだったはず。MySQLセミナー主催とかしてたし。 Yahoo!comは昔からMySQL、Yahoo!Japanはシステムは別だったが今はどうなんだろう。 Google.comもMySQLのBigUserだがMySQLのMyISAMを独自に改良して使っているとおもわれる。 欧米の企業って日本の企業に比べると自社お抱え技術者の人数が多い。 だから社内に技術ノウハウが結構あって、コスト削減のためにオープンソースプロダクト採用 してるところも多く、そういうことろが伸びたわけ。 日本は欧米と比べるとSIer依存が大きいわけだが、いまSIerがいろいろOSS導入に関しては 悩んでるところだろう。SIer的には商用プロダクトやめてOSSつかうと「売上が減少する」 (高額なOracleなどを仕入れ販売してマージン稼いでた)から、OSSへの移行の進捗は 芳しくないという部分もある。 しかし最終的には日本ユーザ企業のコストダウン圧力に負けてOSSが日本でも普及するでしょう。 とか思ってる。マジレススマソ。
shellのコマンドラインから1行でgrantを実行して権限を変更する方法はありますか?
たまにはSQLiteのことも思い出してあげてください
>>618 これじゃ駄目? (hoge.sqlに実行したいSQL文を書いておく)
shell> mysql < hoge.sql
>>620 ありがとう
そういう使い方ができるってことはパイプでもいけそうですね〜!
mysqldumpでバックアップ取ったファイルをそれでまたかぶせたりとかよくやったりしてるけどな。
phpmyadminの質問OK?
total_pointというフィールドに入っている合計点に新しいポイント足してUPDATE したい時ってどう書くのでしょうか? というよりこういうのどうやって検索すればいいんだろう? 単語が思いつかない。
ちなみにflashmyadminというFlashベースの管理ツールがある。 UTF8のDBの文字は表示されなかった。 なんでだろ。
>>625 自己レス。
UPDATE data SET total_point=total_point+1;
これでいいはず
630 :
NAME IS NULL :2006/01/26(木) 09:21:50 ID:JRZNHhZI
WindowsXP PROでMYSQL4.1.15を動かしています。 リモートで接続するためにmy.iniにskip-networkingとenable-named-pipeを書き加えたらWindowsXPのリモートホストからmysql --protocol=pipe コマンドで接続できました。 ところがCで書いたWindowsクライアントからMYSQLに接続できません。 mysql_options(msql,MYSQL_OPT_PROTOCOL,"MYSQL_PROTOCOL_PIPE") msql = mysql_real_connect(msql,"localhost" , "user","password","db", 0, NULL, 0)としています。 どう修正したらいいのでしょうか。
>>630 「リモートで接続する」ために、なんで
「my.iniにskip-networking」と記述しちゃうの?
632 :
630(リモート接続) :2006/01/26(木) 10:50:01 ID:JRZNHhZI
>>631 クライアントのホスト側でmysqlコマンドを実行したらリモート接続できているのでskip-networkingの記述は問題ないと思います。
mysql_real_connectで指定するホスト名を"."にしたらローカルからは接続できるようになりました。
しかし別のホストにインストールしたクライアントからは接続できません。
633 :
630(リモート接続について) :2006/01/26(木) 10:55:04 ID:JRZNHhZI
追記 mysql_real_connectのunix_socket パラメータを"MYSQL"に変えてます
とりあえず630はマニュアル読み直してきた方が良さそうな悪寒。
>>632 >クライアントのホスト側でmysqlコマンドを実行したらリモート接続できている
これも変。貴方の使ってる"クライアント"や"ホスト"や"リモート"の意味が
一般に使われるものとは違ってるのかもしれない。
クライアントを"お客さん"の意味では使ってないよね。
>mysql --protocol=pipe コマンドで接続できました。
因みにこれは名前付きパイプを使用する設定だけど、
そのパイプはネットワークで共有してるのかい。
まあ、してて且つ出来てるからリモート接続が可能と判断してるのだろうけど。
念のため。
636 :
635 :2006/01/26(木) 11:22:00 ID:???
ああVMとかで仮想OSでやってのかな。 だったら、環境をもちっと詳しく説明して欲しい。
637 :
630(リモート接続について) :2006/01/26(木) 11:49:24 ID:JRZNHhZI
>>635 >これも変。
確かに変かも。「クライアントのホスト側でmysqlコマンドを実行したら」は「クライアントが動作しているマシン側でmysqlコマンドを実行したら」がいいのかも。
>そのパイプはネットワークで共有してるのかい。
わかりません。名前付きパイプはファイルと同じようなものとしか知らないし、マニュアルにもどこに作られるのか書いてません。どうしたらわかるのかぜひ教えてください
>ああVMとかで仮想OSでやってのかな
VMとか仮想OSとかは使っていません。
638 :
NAME IS NULL :2006/01/26(木) 16:14:49 ID:VAoZdxJl
CPUamd64 FreeBSD 5.4-RELEASE ports mysql4.1.16 なんですが、最近サイトを見てみたら、 linux の場合、amd64 は別のダウンロードになっている。 FreeBSDには区別はないようだけど、これはどうなんだろう?
>>638 見てるのがバイナリパッケージだから区別があるんでないの?
Source RPMやLinuxでもソースパッケージのやつには区別がないでしょ。
640 :
NAME IS NULL :2006/01/26(木) 18:37:08 ID:VAoZdxJl
>>639 そういうことですか。amd64で3回くらいクラッシュした
ので、気になっていました。最近落ち着いていますけど。
どこに問題あるか分からない、FreeBSD0-amd-stable、mysql、apache2.2
いまはstable はやめてます。
>>640 FreeBSD/amd64 を使っている人の会話とは思えないなー
642 :
NAME IS NULL :2006/01/27(金) 22:08:12 ID:WXQfxalG
ID|point1|point2 ------------- 0 |A |A 1 |B |B 2 |B |C 3 |C |B 4 |C |A select ID form table where point1 = "B" or point1 = "C" ↓ ID 1/2/3/4 が残る ↓ select ID form table where point2 = "A" or point2 = "B" ↓ IDが 1/4 が残る といった風に、point1で絞り込んだものを、point2で絞り込みたいのですが MySQLのバージョンが3でサブクエリが使えず、一つのクエリ文にできません。 どうやったらシンプルに一つのクエリ文に出来るでしょうか?
644 :
642 :2006/01/27(金) 22:24:20 ID:???
>>644 例題通りの内容なら
select id from table where (point1 = 'B' or point1 = 'C') and (point2 = 'A' or point2 = 'B');
でいいと思うけど。
もっと複雑な条件なら、こねくり回すより一時テーブルでも使ってシンプルに処理した方が楽ぢゃない?
646 :
NAME IS NULL :2006/01/27(金) 22:32:50 ID:RMh9y0tr
Apache2+PHP5+MySQL4をWindows 98SEインストールしたのですが mysql>show databases をやっても mysql> SHOW DATABASES; +----------+ | Database | +----------+ | test | +----------+ 1 row in set (0.06 sec) な感じで、あるはずのMySQLの管理用DBが見当たりません。 無くても問題無いものなんでしょうか?
上rootでloginしたら見えました。
>>642 SELECT t1.ID
FROM table AS t1, table AS t2
WHERE t1.point1 IN ( "B", "C") AND t1.ID = t2.ID AND t2.point2 IN ("A", "B")
とかかな?
試してないけど。
あ、 OR のかわりに IN を使ってます。
OR のほうがいいなら適当に書き換えてちょ。
649 :
NAME IS NULL :2006/01/27(金) 23:20:37 ID:TDOvnH/K
MySQLで再帰的な?行の選択ってどうすればいいんでしょうか たとえば 1 abc def 2 ghi jkl 3 def mno 4 pqr stu 5 mno vwx という表から abc vwx def vwx のように左から3番目のフィールドと 2番目のフィールドが等しいものを再帰的に選択する といったことです 所望の表はいいかげんな表現です 言いたいことは、2番目と3番目のフィールドが 等しいものを数珠繋ぎ式に取得したいということです 無理そうだなとうすうす感じてはいるのですが・・・ ご意見ありましたらお願いします
SQLで再帰なんて一般的にできるの?
651 :
642 :2006/01/27(金) 23:55:18 ID:???
>>645 ,
>>648 レスありがとうございます。
参考にさせてもらいます。
上記2つのやり方+一時テーブルの3つの中から
パフォーマンスがいいのを選択しようと思います。
>>650 SQL99 なら WITH RECURSIVE句 でできるよ。
レンタル日記システムを作ったのですが 当初、そんなにユーザが増えると思っていなかったので 1ユーザ=1テーブル と設計しました。 ユーザが想像以上に増えてしまったため、 table_cacheをはみ出てしまい、 テーブルのオープンに時間がかかってしまっています。 テーブルをまとめればいいのですが、 現在 1ユーザ=1テーブル のため、 日記が更新されない時はquery cacheがヒットしてくれます。 また、writeロックが頻繁に行われるため、速度が劇的に低下しそうです。 これを解決したいのですが、いいアイデアが浮かびません。 皆様のお知恵をお貸しください。 よろしくお願いします。
データ構成の見直しは当然として、DBだけでどうにかしようとせずに アプリケーションレベルのキャッシュも検討すべきでは? しかし日記システムでwriteロックが問題になるなんていったいどういうシステムなんだ。
サービスの提供を辞める
しかしなんで1スレッド=1テーブルとか、1ユーザ=1テーブルとか、 システム稼動中にテーブルががしがし増えていくような作りをするんだよ。 オブジェクト指向でいったら、1ユーザ=1クラス定義ってことになるんだぞ???
>>653 テーブル構造が第3正規形になっていない
SQL が非効率的
インデックスを使うべき列にインデックスを適用していない
実は遅いのは MySQL じゃなくて MySQL を使ったプログラムの処理の方
およそこの程度の部分を見て解決策を考えれば自然とわかりそうなもんだが。
>>656 きっと1テーブルに1千万とか1億レコードとかあるんだよ。ハハハ。
55万のテーブル作ろうとした香具師を思い出した ww
それで便乗なんだけど テーブルの構成そのものが動的に変化するようなものを どう扱えばいいか悩んでる CSVっぽいテキストデータをもとにDBに突っ込むんだけど 先頭行に各項がintかtextかとかが書いてあって 次の行からそれの実データが入ってるような感じ テーブルを動的に作ればいいやとか軽く考えてたら マジで種類が増えてきて困った テーブル55万とか笑えない。なきそう。
テーブルは型を定義して初めて存在する。 型が定義できないならDB使うのやめるか、自分でそういう処理系を作れ。
661 :
NAME IS NULL :2006/01/28(土) 14:39:06 ID:YsFL5hLY
>656 すみません、作っちゃったんです・・・ ユーザが増加していく途中で、ちょっとやばそうに感じたので、 書き込みのときに行しかロックしないinnodbを使うことを考えたのですが、 MyISAMみたいに、定義ファイルと、データファイルと、インデックスファイルが 別々じゃないことが気持ち悪くて、やめてしまいました。 そのときは、table_cacheを8192くらいまで増やして対応してしまいました。
>>661 だからなんでロックする必要があるの?
1記事1クライアントでしょ。精々クライアントで複数窓
開いた時の対処ぐらいっしょ。
>>654 アプリケーションレベルのキャッシュは以前はやっていたのですが、
複数APサーバ間のデータの同期がどうしてもうまく行かなかったんです。
定石とかあればご教示ください。
>>657 > テーブル構造が第3正規形になっていない
たとえうまく正規化できているとしても、
テーブルにロックがかかることには変わりはないのではないのでしょうか?
(むしろ増える??)
SQL文、インデックスに関してはexplainとかで調べてみたところ、
問題ないようです。
ただ単純にtable_cacheをどんどん増やしてしまって
(例えば/proc/sys/fs/file-maxの数に届かない限界くらいまで)
大丈夫なのでしょうか?
>662 テーブルをロックするのは私のアプリじゃなくて、 MySQLサーバが勝手にしちゃうのかと思います。 テーブルの更新は多いもの、多いときで、秒間10回以上あります。
>>642 よくわからんけど、Webアプリなんでしょ??
トランザクションは短くしてるんだよね??
ページをまたがってトランザクション持ち越してないよね??
>>661 4.1以降ならinnodb_file_per_tableを使えばテーブルごとに別ファイルになった気がするよ。
(データとインデックスは一緒だけど。frmは元々別だ)
管理テーブルが別にあるのでMyISAMと違って単純コピーでOKじゃないけれど
いちおうリストア手順もある。
668 :
NAME IS NULL :2006/01/28(土) 22:33:25 ID:bnFq4f4x
JDBCなんですが、、、 import java.sql.*; class DbTest{ public static void main(String[] args){ try{ Class.forName("com.mysql.jdbc.Driver"); String strConn="jdbc:mysql://localhost/jamyto" +"?user=Mulder&password=TrustNo1" +"&useUnicode=true&characterEncoding=sjis"; Connection conn=DriverManager.getConnection(strConn); Statement stmt=conn.createStatement(); String strSql="SELECT*from person"; ResultSet rs=stmt.executeQuery(strSql);
669 :
NAME IS NULL :2006/01/28(土) 22:39:53 ID:bnFq4f4x
while(rs.next()){
System.out.println(rs.getInt("id")+":"+rs.getString("name"));
}
rs.close();
stmt.close();
conn.close();
}
catch(SQLException e){
System.out.println("データベースのエラーです。");
System.out.println("エラーメッセージ:"+e.getMessage());
}
catch(Exception e){
e.printStackTrace();
}
}
}
これでAccess denied for user:'
[email protected] 'ってなっちゃいます。助けて
>>669 そりゃあれだ。そのテーブルに対して
Mulder@localhsotの使用許可が無いだけだあん。
mysql mysql で許k
先頭一致で探すのと 完全一致で探すのは 検索速度に差が出ますか?
実際にやってみればすぐ分かります
変更が大変だから質問してるんだけど
答えが得られない人はたいてい我儘で自己中心的な物言いをしています。 他人に教えを乞う理由が「面倒くさいから」では誰も答える気にならないでしょ。 口先だけでも繕えばいいじゃないですか?私だったらそうします。 あなたがたは本当にそんな自明の事すら気づかないのですか? だから池沼って言われちゃうんですよ。 あなたの書いたものを見た人がどう感じるか気にした事がありますか? 人の気持ちを推し量るのは難しい事ですが、 あなたがたの書き込みはその努力を放棄しているように見えます。 まるで他人は全て俺の奴隷だと思っているように見えます。 私には文章が下手とか若くて経験不足とかネットの匿名性とかのせいには思えません。 それはあなたという人間について何か本質的なものを語っているように思えるのです。 そして私はそれに何か不気味なもの、我々が悪と呼んでいる何かを感じます。 だからあなたの書き込みには攻撃的なレスが付きます。 本能的にあなたを恐れているから、あなたに何か邪なものを感じるからです。 どうなんですか?あなたは人類の敵なんですか?邪悪の源ですか? いったいあなたは何に魂を売り渡してしまったんですか?
>>673 実際の運用なんかを変更しなくても、サンプル用のテーブルやデータを作って、
それで実験してみましょう。
データベースの処理速度なんて、所詮、データベースの細かなバージョンや
環境によって左右されるものです。
人のやったテスト結果が、自分の環境でも同じとは限らないので、
自分で試してみるのが確実です。
これからはどんな質問にも「実際にやってみればすぐ分かります」と答えようね。
681 :
673 :2006/01/29(日) 16:35:11 ID:???
うわすっげーレス付いてるし叩かれてるしww
実際やってみたけど変化無し。意味ねーww
50万件程度だけどな。
>>679 さんのように返して欲しかったな。
運用データ変更しちゃったよww
>>681 実際にやってみればすぐ分かったようだねwwww
684 :
673 :2006/01/29(日) 16:42:41 ID:???
>>672 のレス見て、そして
>>673 のレス見て、
この馬鹿は実際にやってみても判らないだろうなぁとは思ったけどやっぱりね。
たった一行のレスがその人間についての本質を語るって事があるんだなぁ。
686 :
673 :2006/01/29(日) 17:48:29 ID:???
実際にやってみたら、解決しました。 今後はこういう悪戯も出来そうだな。
トリップ推奨
688 :
673 :2006/01/29(日) 19:34:56 ID:???
大漁だなwwww
690 :
673 :2006/01/29(日) 20:58:06 ID:???
俺が馬鹿だった。 今では反省している。
MYSQLの文字コードの設定で一般的に多く使われるものはなんでしょうか?
ISO-8859-1
693 :
NAME IS NULL :2006/01/30(月) 01:23:24 ID:xS63ihda
MySQL 3.23.58 + PHP4です。 普通のINSERTクエリを使っているのに、なぜか2重にデータが登録されてしまいます。 デバックしてみても、クエリは1回しか発行されていないし、phpMyAdminから同じ クエリを実行しても正常にデータが登録されます。 テーブルの構造は PRIMARYキー(auto_increment)|普通のvarchar列 です。 PRIMARYキーの数字を指定しても、+1されて登録されます。どなたかアドバイスを ください。ブラウザからサーバへ2重にデータが送られているとしか思えないのですが その場合、PRIMARYキーの重複でエラーが出るだろうし…。
695 :
694 :2006/01/30(月) 02:09:07 ID:???
原因が分かりました。 バカバカしい原因でしたが、もしかしたら似たような症状で 困っている人のために残しておきます(いないか orz)。 現象:PHPから1回だけクエリを実行しているのに、2回実行される。 原因:HTMLのヘッダでCSSリンクミスがあり、ブラウザが2回読み込みにいっていた ちなみに、MacIEでは再現されず、SafariやFirefoxでCSS(JSファイル等も?)の リンクエラーがあると2回サーバーにアクセスする挙動みたいでした。
>>695 ということは2重登録の防止処理がないようだから、
何らかの処理を組み込んどいた方がいいよ。
ブラウザでコンテンツのリロードや、戻るでPOSTし直す場合もあるから。
既にHTTPのLocationで飛ばしてるぐらいはやってるのかも知れないけど。
>>697 そうそう、言い忘れたけどMySQLサーバ側にPreparedStatementが実装されたのはMySQL 4.1からで、
MySQL 4.0の場合はConnector/J自身によるPreparedStatementエミュレート実装(実態はStatementで
若干高速化)なのでサーバのバージョンも良く考えた方がいいよ。
>698 どんぴしゃの情報ありがとうございます。 どうやらデフォルトではキャッシュはされないようですね。 接続時URLにcachePrepStmts=trueをセットすることによって有効になるようですね。 感謝感激雨あられです!
rootでログイン後、use mysql;が1044で弾かれるんだが、何ででしょ? create database test_php; は通るけど、 create database php_test; は1044で弾かれたりする。 どうも解せないので質問してみますた。 #mysql --version mysql Ver 11.18 Distrib 3.23.58, for redhat-linux-gnu (i386)
LinuxでユーザごとQuotaを設定する方法が分かった。 使う人あんまいないと思うがとりあえず可能だってことが分かったので書いておく。 データベースディレクトリに任意のディレクトリを作成し、ユーザ名はmysql(コンパイル時に指定したユーザ)で、 groupを制限かけるために新しく作って変更する。で、データベースディレクトリをchmod g+sしてやる。groupquotaを設定してやる。 あとはデータベースをディレクトリ名と同じで作ってやると、その中に出来るファイルは全部グループが自動的変更され、 groupquotaの設定通り容量オーバーになると書き込み(読み込み・接続もだが)が出来なくなる。 順序はべつにデータベース作ってからでもいいが chgrp -R で中身のファイルも変更してやるといい。 データベースサーバーがWeb等と同じ鯖であるなら自分のディレクトリからファイルを消せばまた 接続できるようになるので、それから消せばいい。鯖が別々の場合には、何らかの形で quotaを一時的に増やしてやると良い。
>>700 そのrootでログインてのはMySQLの"root"ユーザで間違いないんだよな? (OS側のrootユーザとは別物)
学校でmysqlの宿題が出ました。 どうしたら、いいかな?
実際にやってみればすぐ分かります
実際にやってみたら、解決しました。
707 :
697 :2006/01/31(火) 11:20:07 ID:???
>>698 設定したところうまくいっているようです。
どのように確認したかといいますと、
Com_stmt_prepareの値が今までと比べて激減したためです。
ありがとうございました。
708 :
NAME IS NULL :2006/01/31(火) 20:22:14 ID:4CGnXA//
MySQL + PHPでの質問なのですが、 htmlからの取得した条件で検索した結果を、ページ制御を かけながら、検索結果を表示するいい方法はありませんか? limitや一時テーブルを作成する以外の良い方法を駄目な私に恵んで下さい。
実際にやってみればすぐ分かります
>>708 PHPで処理するか、JavascriptでDOMでも使ってページを制御。
711 :
708 :2006/01/31(火) 21:58:18 ID:???
実際にやってみたら、駄目な私でも出来ました。
XOOPSを試しているんですが文字化けするんですが、 MySQLをutf-8で動かしているせいのような気がするのですが、 そのデータベースだけujisで保存したりする方法ってあるのでしょうか。
XOOPSは開発者もコミュニティもイカレポンチなので使わない事を推奨
phpから呼び出して使っているのですが numがキーでvalという項目があるテーブルhogeについて valを1足して、そのvalを読む ということをしたいです。 UPDATE hoge SET val=val+1 WHERE num=1; SELECT * WHERE num=1; こういうことを一発でうまくやる手法はありますか? やはり普通にテーブルロックだの何だのをしないと ダメでしょうか
>>714 それはFAQです。
引数付きのLAST_INSERT_ID()関数を使って、下のようにします。
UPDATE hoge SET val=LAST_INSET_ID(val+1) WHERE num=1;
そしてAUTO_INCREMENTの時と同様にLAST_INSERT_ID()で値を取得すればいい。
>>713 そこをなんとか教えて下さい。
俺もこんなの入れたくないんだが入れてくれ上司に頼まれて・・・
>>716 やってみればすぐに分かります。
というのもそろそろあきたからマジレスすると、
>そのデータベースだけujisで保存したりする方法ってあるのでしょうか。
my.cnfに"default-character-set=utf8"と設定してあっても、
テーブル作成時のCREATE文に"default charset=ujis"と付ければ
そのテーブルはutf8じゃなくてujisになる。
指定しない場合には、"default-character-set=utf8"が適用されてる。
XOOPSが自動生成したテーブルのDDL文を覗いて見れ。
"show create table xxxx"な。
>>716 まともな用途ならやめとけ。
何回、HPが書き換えられても、Xoopsのせいじゃないと言い張りつづけ、セキュリティーホールが指摘されると切れる管理者が作ってるCMSだ。
719 :
714 :2006/02/01(水) 17:26:15 ID:???
>>715 ありがとうございます。大変助かりました。
後ほど妹のパンツうpさせていただきます。
そのパンツをブルセラショップに売ってオライリーのクックブック買えば全部載ってる。
>>712 MySQL4.1以降なら方法はあるよ。
マニュアルに記述されてるから、ちゃんと嫁。
>>717 おお、ありがとうございます。早速やってみます。結果は明日ぐらいでしょうが・・・
>>718 XOOPSに変わるものとか存在しますか?
>>718 それは正確には今のCubeじゃなくて、fork前のXOOPSの方だよね。
>>720 たとえば今回のパンツFAQはVol.1と2どちらに載ってるもの?
>>724 オライリージャパンで目次見たらVol.2のようだ。
おらいりのデータベース本は表紙が両生類爬虫類ばかりで 家族にはすこぶる評判が悪い
ハイパフォーマンスはハイタカで 実践PgSQLはマンモスだけどなーーー。
>>722 XOOPS Cubeなら安全だ。日本語情報も充実している。そっちにしとけ。
ステータスを管理するフィールドの中身って文字列にしてる? それとも数値にして別にステータス管理用テーブルを作ってる?
オライリーでは相撲取りも動物扱いだしな
>>729 数値にしてる。
例えば「4:危険」「5:非常に危険」としている場合
条件で4以上であるなどと、さくっと出せるから。
ステータス間に繋がりが無い場合は、ディクスペース多少
食うだろうけど、文字でも良いと思うよ
734 :
NAME IS NULL :2006/02/02(木) 14:48:12 ID:kLKQXPuJ
すいません。MySQL初心者です。 4.0.25をインストールしたのですが、Start the Serviceしてもサーバーに 接続できません。 どなたか教えてください。お願いします。
>>734 悪いんだが、MySQLの設定をはじめるようなレベルじゃないんじゃないの?
教えようにも教えようが無いよ・・・
>>729 ENUM型なんか使ってみたりした。
手動でSELECTしたりするならわかりやすいけど、
ほとんどphpから叩いてたのでそんなに嬉しい気はしなかった。
>>734 では、詳細な状況を"教えてください"としか...
Serviceで起動できないのなら、設定ファイルの記述が適正でない場合が殆ど。
起動できて接続できないのなら、マニュアルと巷のインストールドキュメントを
ちゃんと色々読んでみそ。
>>733 SoftAgencyの名前がない。もしかして切捨てですか...
>>734 その質問じゃMySQL初心者以前に、技術系ML初心者。誰も答えられん。
>>732 なるほど。そういうメリットもありますね。
数値のメリット: diskスペースの節約
文字列のメリット: ソースが分かりやすい
みたいな感じで思ってました。
数値の場合、ステータスの名前とか説明のテーブルは作ってますか?
>>736 ENUM型って2種類のステータスしか扱えなくないですか?
なんか勘違いしてるかな、俺
すいません。MySQL初心者です。 検索がうまくいきません。 どなたか教えてください。お願いします。
>>743 それで答えられるようなエスパーさんは、今休暇中です
社外秘なので内容は書けないんです。 お願いします。
唖然
それはずっと秘密のままにしておきましょう
わからないなら答えないでください。 わかるひと教えてください。
すいません。回答者です。 言っている事がわかりません。 どなたか教えてください。お願いします。
これどっからどこまでがネタなの?
まんこ♪まんこ♪あんあん♪
>>752 おれもオモタ
ネタにしては稚拙だし本気にしては馬鹿すぎる
755 :
749 :2006/02/03(金) 02:30:17 ID:???
解決しました。ありがとうございました。
誰も訳が判らないうちに一つのドラマが終わりますた
アバターのような画像ファイルをDBにつっこもうか、ファイルのまま保存しようか 迷っています 双方のメリット・デメリットって何でしょうか?
>>757 最近の流行はやってみればわかる
らしいよ
>>757 マルチメディア(藁)データを、そのままファイルのまま管理すればいいのか
DBに入れた方がいいのかは「やってみれば判る」
DBからの読み込みをキャッシュするようにして、DBに入れた方が
一元管理出来て良いと思うけど、自分ところはWebサーバx1にDBサーバx1の
簡単な構成なのでファイルのままでやってる。
>>757 ローカル(開発環境)と同期とったとき、
データ管理がマンドクサイからファイルで保持
>>757 実際の運用なんかを変更しなくても、サンプル用のテーブルやデータを作って、
それで実験してみましょう。
ファイルやデータベースのメリット・デメリットなんて、所詮、データベースの細かなバージョンや
環境によって左右されるものです。
人のやったテスト結果が、自分の環境でも同じとは限らないので、
自分で試してみるのが確実です。
結局、自分で試してみろよ、になってしまうなw
画像ファイルをDBに放り込むような奴とは一緒に仕事したくないがな
DBに画像ファイルを格納するメリットって思いつかない。
大手はほとんどやってるけど?
>>765 人事システムの社員DB等で、顔写真とかどうするつもりなん?
>>767 その場合でもファイル保存で支障はないと思うが
ファイルシステムというOS標準装備のDBを使わないのはもったいない
DBに画像ファイルも入れられるのを知らないやつ多すぎw
>>770 ただのバイナリデータである画像は入れられるが、ファイルは入れられない。
DBに画像ファイル(のデータ)を入れる・・・ メリット ・レコード操作時の1アクションで追加削除が出来る ・ファイルとして扱わずに済む デメリット ・DBがエッセンスとしてのデータ以外のデータで膨れる ・ファイルとして見れない(メリットのと相反するが)
773 :
NAME IS NULL :2006/02/04(土) 17:31:08 ID:1yc2ZL1r
MERGEテーブルを使用しているのですが、 例えばa,b,c,d,e..とMyISAMがあり、allというテーブルに MERGE設定し、UNION()でa,b,c,d,e..を設定し、作成したのですが WHEREで条件検索するときにどのテーブルから引き出したのかを知りたいのですが、無理でしょうか? MySQL4.0.26を使用してます。
ダメリット ・DBのサイズが膨らみ保守に時間がかかる。 ・・ファイルとして扱う事が出来ない。
画像をDBに入れていると思われる大手サイトってある? メリットがよくわからんのだが… binaryとして検索するメリットってないよね?
>>776 データとして入れておけばいいんだから
ファイルとして扱うことがまったく無いなら
選択肢としてはアリかも
>>776 サイズの大きな画像データを大量にDBに入れるのは、DBのバックアップ
などの保守が面倒。100万枚のJPEG画像も通し番号を付けて、番号を
区切って、10000のディレクトリーに入れといた方が、管理が楽。
>>778 その代わり、FSの制約に縛られるじゃない?
たとえばそのあまりに大量のファイルはディレクトリ分割しないとダメとか。
あとファイルシステムならではとして、そのDBに
アクセス権限をもっていない第3者にも見られてしまう。
780 :
773 :2006/02/04(土) 23:22:53 ID:1yc2ZL1r
SELECT * FROM `all` WHERE `name` LIKE '%test%'; で、結果が帰ってきた場合、どのテーブルから返ってのかがわからなくて不便なんです。。
DBに画像データを格納するのはDBサイズの膨大と画像データアクセスへのカプセル化とのトレードオフだね。
>サイズの大きな画像データを大量にDBに入れるのは、DBのバックアップ などの保守が面倒 どっちにしろ画像データのバックアップもするんだから保守の面倒さは同じ
>>780 各テーブルa,b,c,d,e..にテーブル識別のフィールドを作れ。
あれ、blobってそもそもそのへんの面倒をうまいこと見てくれる フィールド型じゃなかったっけ。
データベースだけ見るんじゃなくてシステム全体で考えなよ。
>>784 リンク先
>DBコネクション・プーリング機能を利用するDB接続関数「pg_pconnect」を
いや、それコネクションプーリングじゃないから。
下のコードはAPI文書によれば Exceptionを吐くのですが、 何事もなかったかのように動きます。 Statement stmt = srcConn.createStatement(); ResultSet rs = stmt.executeQuery("select 1 + 1"); System.out.println("Is TYPE_FORWARD_ONLY ? " + (ResultSet.TYPE_FORWARD_ONLY == rs.getType())); while(rs.next()){ System.out.println(rs.getInt(1)); } while(rs.previous()){ System.out.println(rs.getInt(1)); } これは仕様でしょうか、バグでしょうか? よろしくお願いします。
789 :
787 :2006/02/05(日) 09:32:31 ID:???
すみません、これじゃmysqlじゃなくても同じようなコードですが、 一応サーバはmysql-4.1.16-nt コネクタはmysql-connector-java-3.1.12 を使っております。
790 :
NAME IS NULL :2006/02/05(日) 12:18:12 ID:ric2HNTG
オールアバウトのデータベースのページ
http://allabout.co.jp/career/database/ を見ながらwin2000+apache2.0.55+PHP5.1.1+Mysql5.0.18で 接続テストしてるんですが、
「test」というデータベースに接続しようとすると、
Warning: mysql_connect() [function.mysql-connect]:
Can't connect to MySQL server on 'localhost' (10061)
in C:\Program Files\Apache Group\Apache2\htdocs\mytest1.php on line 4
can not connect db
つーのが出て接続できません。
ソースはホームページそのままコピペで
<?
//DBへ接続開始 サーバー名--localhost ユーザー名--root パスワード--root
$dbHandle = mysql_connect("localhost","root","a");
//DBの接続に失敗した場合はエラー表示をおこない処理中断
if ($dbHandle == False) {
print ("can not connect db\n");
exit;
}
//db名 test
$db = "test";
//SQL文 tab1表から全行を取り出し、number列の昇順に整列する
$sql = "select * from tab1 order by number";
//SQL文を実行する
$rs = mysql_db_query($db,$sql);
//列数を取得する
$num = mysql_num_fields($rs);
//HTML文を出力 テーブルの開始を指定
print("<table border=1>");
//test表の列数と同じ回数を繰り返す
for ($i=0;$i<$num;$i++){
//HTML文を出力 列名を <td>で囲んで出力
print("<td>".mysql_field_name($rs,$i)."</td>");
}
//test表の行数と同じ回数を繰り返す
while($row=mysql_fetch_array($rs)){
//HTML文を出力 表の行の開始<tr> を出力
print("<tr>");
//test表の列数と同じ回数を繰り返す
for($j=0;$j<$num;$j++){
//HTML文を出力 列の内容を <td>で囲んで出力
print("<td>".$row[$j]."</td>");
}
//HTML文を出力 表の改行</tr> を出力
print("</tr>");
}
//HTML文を出力 テーブルの終了を指定
print("</table>");
//結果レコードをメモリから開放
mysql_free_result($rs);
//DBへの接続を切断
mysql_close($dbHandle);
?>
ですが、パスは「a」にしたのでこれに変えてみたけどダメです。
どこを直せばいいのでしょうか。
といった初心者の質問はどこですればいいんでしょうか。
datetime型のフィールドdateを SELECT date FROM hoge; で取得したら 2006-02-05 17:55:00 というような文字列がかえってきますが、 timestampで取得したい場合は どのようにSQL文を書けばよいのでしょうか?
>>793 実際にやってみればわかる。
UNIX_TIMESTAMP関数
795 :
722 :2006/02/05(日) 19:15:17 ID:???
>>717 のように改造して、テーブルをujisで作るようにはできたんですが、
やっぱutf8で保存され化ける…orz my.cnfでutf8指定していると
書き込み時にutf8にしてくれちゃうんでしょうか?
Xoops cube自体をutf8に変換するとOKみたいな事が書いてありましたが、
これは最後の手段としたいのでなんか方法はないでしょうか。
(といってもmy.cnfを晒さないとさっぱり分かり辛いでしょうが)
>>728 XOOPS CUBE使って見ています。
なんで未だにMySQL 3.xxしか対応していないんでしょうね…
797 :
722 :2006/02/05(日) 21:05:00 ID:???
>>796 どうも。また1週間ぐらい調べてみます。dクス
デフラグというか並びを最適化するときは ダンプして再ぶち込みが一般的なの?
>>798 ほい
http://www.buena-idea.net/~hironobu/mysql/m-2-07.html ところで、PreparedStatement を使っていると
発行されたSQL文が
varchar の id カラムが
select * from report where id=0x73616F && no=1126321480437
みたいに16進数で発行されるときと
select * from report where id='aaa' && no=1137693052859
のように文字列で発行されるときがあります
この違いは何なんでしょう?16進数の方が速そうな感じはしますが。
>>799 サンクスコ
ところで、デフラグとは逆のことを意図的に行うには
どうしたらいいと思う?
フラグメントわざと起こして能力測定とかしたいんだけど
>>800 普通に、だーっとINSERTした後にUPDATEとかDELETEで間引くのは駄目?
>>801 それしかないか・・・
効率良く散らかす手段なんてそうそう無いか
コテつけてみた。期間限定。何か言いたいことがあったら今のうちにいってくれw >> 799 16進数エスケープ処理が行われるのとされないのの違いを知りたいということだね。 APIレベルでいうと、マルチバイトの文字コード(ujis,sjis,utf8他)が設定されている状態で、 setBytes(int, byte[])が呼ばれた場合に16進数エスケープ処理が行われる。 一般的にマルチバイトの文字にとって普通の文字であっても、それをシングルバイトで 見た場合には制御文字である場合があるってのは分かるよね?(\nとかnull文字とか) サーバ側でこういった「マルチバイト+制御文字」を適切に処理できるように、これまで ずっとバグ潰しが行われてきてるけど、これをクライアント側でも一部負担しているということ。 例えば、setBytesメソッドをアプリが呼んでいないとしても、ClobやCharacterStreamを Connectionに設定した文字コードとは別の文字コードでセットしているだとか、 サーバ側のmy.cnfのある設定が有効になっているだとか、いくつかのマイナーな条件に 適合した場合に、16進数エスケープ(16進数の文字列として送る)するようになるよ。 これはクエリそのものをサーバ側が適切に処理できなくてエラーを出したり文字が壊れたり するのを回避するためのものなので、速度的なメリットは無いように思う。
PRIMARY KEY が設定されてても、 同じ定義のインデックスは必要?
phpmyadmin で文字コードの選択部分でujisが選択できない (utf8しか表示されない)んですが、 ぐぐっても解決方法が見つかりません へるぷみー
>>804 つ show index from `テーブル名`
>>806 同じものが表示された・・・つまり必要ないわけかー
わかりやすい説明さんく
複数テーブルから同時に削除するクエリを教えてください。 テーブル A と B から id = 'hoge' && count = 10 となる列を削除したいです。 ご教示よろしくお願いします。
トランザクション使えよ
一に正規化 二に正規化 三、四も正規化 五も正規化
正規化しまくって複数テーブルにまたがると 面倒だよね
812 :
MYSQL初心者 :2006/02/06(月) 16:14:28 ID:V9TWk4H4
MYSQLとAccessがODBC接続の方法で繋がらないのですが・・どうしたらいいですか?誰か教えていただけませんか?(従来の方法では駄目でした。Accessが反発します) バージョンは、WindowsXP、Access2003、MYSQL5.0です。)
>>812 現状及び従来の方法等を詳しく。
つかそれで他人が理解できる程、詳しく書いてると本当に思ってるの?
814 :
808 :2006/02/06(月) 17:54:15 ID:???
どうやら複数テーブルからの同時削除は1クエリじゃ難しい感じがします。 ヒモがついてて消したら消えてくれればいいのになぁ
>>815 InnoDB使えばヒモついてるというわけじゃなくて、
トランザクションで安全に消せるって言うこと?
InnoDBならヒモつけられるっしょ
>>817 おーすごいね、ドキュメントのありか教えてもらえないでしょうか?
InnoDBは行ロックで削除、更新に強いし
ファイルベースでテーブル管理できないことを除けば
かなり便利ねー
>>819 さんくす。
ワクテカしながら見てみたら
>.ibd ファイルは自由に移動できません。
orz 何とかしてよAB!
>>812 それだけじゃなんともいえんが、恐らくは古いODBCを使えば繋がる
822 :
MYSQL初心者 :2006/02/06(月) 20:58:50 ID:TO61IyX2
>>821 ODBC作成までは、上手くいくんですけれどもAccessからテーブルリンクさせる際、MYSQL.dsnでコンピュータデータソース指定し色々設定する所までは正常なのですけれどもいざOKを押すとAccess.EXEからエラーが返されてしまうのです。
>>808 DELETE FROM t1, t2 WHERE 〜
じゃ駄目だったの?
>>822 ありがちなのはPrimary Keyがないとか。
825 :
MYSQL初心者 :2006/02/07(火) 10:29:53 ID:+JU3U8Dx
>
>>824 それも試してみましたけれど駄目でした。他の解決策はありませんか?教えてください?
>>825 エラーが出ているのならとりあえず、エラー内容をここに晒してみてはどうでしょう?
現時点で825さんが提示している情報だけではみんなアドバイスできないです。
あとこういう場合は、問題の切り分けを1つずつ丁寧に行いましょう。
例えばサーバ側に接続しにいって駄目なのか、それ以前の問題なのかは、
my.iniに以下のように設定して一般ログを出すようにしておけば分かります。
[mysqld]
log
# my.iniファイル変更後は要再起動です。
# 認証等で弾かれている場合にはログが残ります。
# ログが出ていない場合にはデータソース設定が正しくない、F/Wに遮断されたなどです。
# ログファイルはdataフォルダの中の"コンピュータ名.log"です。
>>823 定数使って削除する時のwhere句がいまいちわからないです
delete from A,B using A,B
where A.id='hoge' && B.id='hoge' && A.count=10 && B.count=10
これだとうまくいかないんです。
うむぅ
Windows2000にMySQLを突っ込んで、DBの中身をAccess2000で受け取っているんだけど、 where句を使って絞り込んだところ、全く関係のない文字列が引っかかったりします。 例)where hogehoge like'%やった%' → ももたろう これって、回避方法とかあるのでしょうか? ちなみに、MySQL5で、文字コードはUTF8です。
829 :
827 :2006/02/07(火) 13:23:54 ID:???
>>823 すみません!削除できてました!
勘違いで削除できていないものだと錯覚してました
ついでに質問なのですが、この場合、テーブルのロックは
どのようの行われるのでしょう?
1)全てのテーブルに同時にロックを取得し削除
2)A をロックして削除、ロックを開放→ロックを開放し、Bのロックを取得→削除
どちらになるでしょうか?
また、これを調べる方法がありましたらお願いします。
>>828 クライアント側の文字コードを設定し忘れているんだと思う。
831 :
828 :2006/02/07(火) 14:44:29 ID:???
>>830 レスありがとうございます。
クライアント側の文字コードといわれピンとこなかったので、
サーバのmy.iniのクライアントセッションに文字コードを指定する方法と
クライアントにmy.cnfを作って、ODBCの文字コードを変更する方法を試してみました。
しかし、前者では結果に変わりはなく、後者だと文字化けしてしまいました・・・。
ちなみに、先ほど書き忘れていましたが、エンジンはInnoDBで、varcharを使っています。
832 :
MYSQL初心者 :2006/02/07(火) 15:55:52 ID:+JU3U8Dx
>
>>826 ODBCversionの問題かと思い試しましたがエラーがC++デバッグ・・・とLine1132・・と表示されいっこうに繋がる気配がありません。
insert (A,B,C) values 〜 て文で 全てのカラムに値を入れるなら前のABCの絡む部分を省略できると思うのですが Aが主キーの場合B,Cだけにカラム名を省略して入れる方法ありませんでしょうか?
834 :
833 :2006/02/07(火) 16:14:10 ID:???
自己レスです。 主キーの値の部分をNULLとしたらいけました。すんません。
>>831 Accessはあまり触らないので外してたらごめんなさい。JDBCの人なので^^;
最初に仰っていた、
>ちなみに、MySQL5で、文字コードはUTF8です。
これはmy.iniに以下のように書いてあるということですね?
[mysqld]
default-character-set=utf8
私が手元で確認するのに使ったのはmysqlクライアント(コマンドプロンプト上)なのですが、
以下のようにしてからSELECTすることで上手く行きました。
mysql> set names sjis;
同じことをやるためには、ODBC設定の[Connect Options]の
[Initial Statement]のところに"set names sjis"と書けばいいと思うのですが、
これではどうでしょう?
>>829 んー、LOCK TABLESを使わないかぎりロックを取得しないと思うんだけど。
LOW_PRIORITYオプションなんてのもあるくらいだし。
my.ini(my.cnf) のコメントに日本語書いても大丈夫ですか? 起動も値の設定もできたんですが、 後々なんか悪いことが起きたら嫌なので・・・ よろしくお願いします。
出た!「やってみればわかる」出た! 「やってみればわかる」出たよー!!
840 :
837 :2006/02/08(水) 00:43:57 ID:???
>>838 後々トラブルが発生したらわかる。
ということですか?
それじゃあ、あんまりだ
文字コードとコメントと認識するための条件の事を考えれば # 日本語 は大丈夫。 改行コードと # という文字(のコード)がキーにされて 読み込み処理がなされているのは間違いないだろう。
>>837 my.cnf(my.ini)はmysqldなどの起動時に読み込むだけなので、
想定とおりに起動できてれば問題ないよ。
また、以下で/etc/my.cnfやら/usr/local/mysql/my.cnfやらすべて読んで
オーバーライドするならした上でmysqldがどんなオプションで動くのか分かるよ。
mysqld --print-defaults
# オプションを読みこんで標準出力し、終了する(実際には起動しない)
>>841-842 ありがとうございます。
# が認識できればコメント処理され、
起動して値が設定できているのならば問題はなさそうですね。
mysqld --print-defaults の方はうまくいきませんでしたが、
とりあえず安心して日本語コメント書いちゃいます
あと立て続けに質問申し訳ないのですが、
InnoDBのselect count(*) クエリがすごく遅いのですが、
これは遅いものなのでしょうか?
215万件ほどのデータでテストしたのですが、2分30秒ほどかかってしまいます。
844 :
NAME IS NULL :2006/02/08(水) 12:12:12 ID:eWZ4bZ9B
ID(AUTO_INCREMENT) KEY(UNIQUE) TEXTといったようなTABLEに対し、 存在すれば上書き、なければ挿入といったことをスマートに行いた くて、 REPLACE INTO `TABLE` (`KEY`,`TEXT`) VALUES ('$KEY','$TEXT'); という操作をしています。 ユニークなKEYの持つ値を変更できるのは大変助かるのですが、IDま でインクリメント処理されて値が変わってしまい、困っています。 IDは以前の値を保持したいのですが、どのようにすればよいですか?
845 :
MYSQL初心者 :2006/02/08(水) 12:49:02 ID:/izFij7z
>
>>842 前、質問させていただいたエラーの原因を教えてください。ODBC接続の事を聞いた者です。お返事が無いのでスルーされていると思い書き込みました。
>>843 自己レスです。
innodbは行数を保持していないので遅いのですね
whereで走査する行を制限し、whereの抽出にインデックスを使うと速くなりました。
847 :
NAME IS NULL :2006/02/08(水) 13:57:29 ID:x4sieddf
"group concat"ってどう書けばいいの? こういうテーブルから name sukina_esa たま キャラット ミケ キャラット ミケ カルカン ニャン太 モンプチ しろ カルカン しろ モンプチ こういうふうに取り出したいんだけど・・ name sukina_esa たま キャラット みけ キャラット , カルカン ニャン太 モンプチ しろ カルカン , モンプチ なんか、「 "group concat" MySQL」でぐぐったら(日本語) >選択された言語のページからは該当するページが見つかりませんでした。 とかいわれました
>>845 あのエラーからだと何とも言えないね。
「いっこうに繋がる気配がありません。」と言っていたので、
サーバ側でログを出してどこまでは上手く行っているのか
確認したら、とアドバイスしたのだけれどもそれはどうなったの?
というか、
>>845 のようなレスはどうかと。
レスがつかないのは新たな情報を自分から出さないからでしょ。
誰も貴方の質問に答える義務とかは無いわけで、
レスがないなら無いなりにみんな自助努力で解決してるのに。
>>845 音沙汰がないので、普通に自己解決済みだと思った。
試行錯誤して進展があれば、追加材料がでてくる筈だし
それがないと
>>848 氏が言われるとおり、誰も反応も出来ないよ。
truncate table table_name って トランザクション内で実行しても無理やりautocommitoするんだね。
852 :
847 :2006/02/08(水) 16:16:39 ID:x4sieddf
>849 うわ。感謝!! こんなものがあるのかー! 手元のSQLの入門書だけでやってました。 ありがとうございます。
853 :
280 :2006/02/08(水) 16:31:46 ID:???
855 :
NAME IS NULL :2006/02/08(水) 17:33:07 ID:Vu9KVVRe
MS Excel用CSV又は単なるCSVをMySQLに変換するにはどうしたらよかとですか? エクスポートならAdminですぐ出来るのですが、取り込む方法が分かりません。
>>855 「Admin」というのが何か判らんが、
phpMyAdminなら、テーブル情報を表示した頁の最下部に
「テーブルにテキストファイルの追加」
というのが、あるのだけどね。
857 :
855 :2006/02/08(水) 18:04:30 ID:Vu9KVVRe
さらにinnodbの不思議なんだけど alter table hoge auto_increment=0; しても0にならないのね。 innodbはメモリ上にauto_incrementの値を保存しているらしく、 再起動しないとどうにもならないのか。 まあ、実稼動じゃ不便じゃないけど、テスト環境でせっかくtrancateしたのに 0に戻らないとはなんかめんどくさい。
auto_incrementの次に割り当てられる数字を、レコード登録以前に取得 することはできますか?
>>859 見てきた。
製品としては採用してるMySQLの名前を出さない訳にはいかんし
会社としてはMySQLの名前だけ出てる訳にもいかんし。
そんな葛藤が見受けられた(笑
862 :
860 :2006/02/08(水) 21:09:51 ID:???
mysql_insert_id() で事故解決しました。スマソ
auto_incrementってMySQLのみ? 他のDBでも使えるようなDB設計、SQL、ORMにするならauto_incrementって 使わない方がいい?
864 :
MYSQL初心者 :2006/02/08(水) 21:58:22 ID:1eCb8cuj
管理ツールのODBC作成画面で追加を押し、ログイン設定などをしますがテストボタンでリクエストリターンwishSQLエラーと言う表示や記号で'['と言う表示が出ますどうしたらいいでしょうか?何か良い策があれば教えてください。
865 :
NAME IS NULL :2006/02/08(水) 22:20:43 ID:NT5WvAZq
現在運用中のサイトですが 重いselectを実行すると、他のクエリも道連れになって サイト自体が表示出来ない状態になります。 こういう場合、テーブルを分ければ、 道連れは防げるのでしょうか?
>>865 それだけだとなんとも。
EXPLAINで何が問題なのか調べてみるとか。
SWAPとかはしてないんだよね?
2chのbizplus板の全てのデータをmysqlの複数のテーブルに格納します。 お勧めのカラム構成を教えてください。
>>868 datファイルとsubjectファイル(ってあるんだっけ?)
をそのまま定義すればいいんじゃない?
870 :
NAME IS NULL :2006/02/09(木) 01:37:21 ID:68ZFSi8o
皆様お力を貸してください webサーバーにて IIS+mysql+ASPにて稼動させております 当然MYSQLにはASPよりlocalhstでアクセスさせていて問題はなかったのですが ここでdbサーバーにdb機能(MySQL)を分離し dbサーバーにwebサーバー側からMySQLを接続しようとするのですが 各ユーザー毎の初回の接続を確立するのに 約5秒から10秒ほどの遅延が発生してしまいます ユーザー毎で見れば大きなロスではないのですが アクセスが集中した際には dbからの応答が遅れがちになり 結果的にweb表示の大幅な遅延につながります webサーバーでIISとMYSQLを動かしていて問題がなかった 設定のままdbでも設定済みで web⇔db間のpingも0msとネットワークの接続は完全に確立されている状態です 使用しているバージョンは MySQL : 4.1.3b ODBC : MyODBC 3.51.9 IIS : 6.0 MySQL接続時のvbscript set DB = server.createobject("ADODB.Connection") db.connectionstring="DRIVER={MySQL ODBC 3.51 Driver}; SERVER=220.158.xxx.xxx; DATABASE=hogehoge; UID=hogehoge; option=3" DB.open Set CMD = server.createobject("ADODB.Command") CMD.Activeconnection = DB dbサーバーを単体で運用し他のサーバーからアクセスさせる際には 接続される側のMySQLに特別な設定が必要なのでしょうか? ご教示のほどよろしくお願いいたします。
connection pooling
>>870 >各ユーザー毎の初回の接続を確立するのに
>約5秒から10秒ほどの遅延が発生してしまいます
そんなに掛からないと思うんだがな。
取り合えずネットワークトワーク経由での認証に時間が掛かってるのか
それとも別のところにあるのか、IISの入ってるマシンから
MySQLにコマンドラインか何かで接続してみそ。
あと
>web⇔db間のpingも0msと
これは余り当てにならない。
MySQLにコマンドラインなツールで、ちょっとしたデータでも
dump/importとかしてみて詰まるところがないか調べて
認証後のデータのやり取りに際してネットワーク上で問題がないか確認
>>863 "Sequence Generator"という名前でSQL2003で機能定義されてると思う。
基本的にはどんなRDBMSでもサポートされている/今後されるはずとおもう。
各RDBMSで使い方・振る舞いに違いがあるので、移植する際には気を付ける必要有りだけれども。
Oracleだと"Create sequence..."ってやつだっけ?
>>864 やっぱりそもそもMySQLに接続できてないじゃん。
で、何度も言ってるけど、MySQL側で一般クエリログを出すようにして、
ODBCからクエリ(接続要求)がMySQLサーバに到達してるのか確認したの?
ログ出てない=到達してなけりゃネットワーク設定その他の問題、
ログ出てればアクセス拒否なのか、何がどこまでは上手く行ったのかわかるでしょ。
>>870 クライアント側(APサーバ)とサーバ側(DBサーバ)が別筐体である場合、
違いは接続時にネットワークのオーバーヘッドがかかるだけだよ。
MySQL側に特別な設定、とかは特に何も無い。
それにしても5秒から10秒というのは、普通はありえない。
pingが0msなら、せいぜい10msくらいでMySQLへ接続できそうなもんだけど。
コネクションプールは接続のオーバーヘッドを回避する一般的な解決方法だけど、
5秒もかかる
>>870 さんの環境には、何か他に問題があるのではと思う。
DNSだろ
>>874 うん、my.cnf(my.ini)のm[mysqld]セクションに
skip-name-resolve
書いて解決熟女
トランザクションの動きを調べるためにトランザクション中に LANケーブル引っこ抜いたり、再起動したり、電源引っこ抜いたりしてみたんですが、 どちらもロールバックされます。 正常な動作だと思うのですが、クラッシュと正常にサーバを終了させる場合、 トランザクション的にはどちらもクラッシュと同じ扱いなのでしょうか? commitされる前に接続が切れたという点では同じですけど・・・・ linuxのmysqldの起動スクリプトが、終了時にkill pid 使っているのには驚きました
MARGEテーブルってcount(*)結果と実際の結果が全く違う 大損害なんだが
>>875 それ、
>>870 |db.connectionstring="DRIVER={MySQL ODBC 3.51 Driver}; SERVER=220.158.xxx.xxx; DATABASE=hogehoge; UID=hogehoge; option=3"
のような最初からIPアドレスで接続要求があったときも、
skipしてないと名前解決しにいくの?
879 :
878 :2006/02/09(木) 15:30:39 ID:???
ごめん。俺が理解してなかっただけだ。 サーバ側がするクライアントの認証の話だわな
880 :
NAME IS NULL :2006/02/09(木) 19:19:53 ID:UltP/RAl
VB6.0のADOを利用してMySQL4.1にあるデータベースに 接続したんですけど出来ないです。 どうしたらいいんですか? Dim cn As Variant Dim sql As String '** ODBC 接続 Set cn = CreateObject("ADODB.Connection") cn.Open "dsn=MySQL;uid=ユーザー名;pwd=パスワード" cn.CursorLocation = 3 で、出来なかった・・・。
881 :
MYSQL初心者 :2006/02/09(木) 21:23:44 ID:hdSwCdMB
>>
>>873 ありがとうございました。ログを解読した所ユーザー名がMYSQLインストール設定の時の名前でいれていたのが解ったので権限時の名前と違っていたのが解りました。ですが接続出来てもAccessからデータを挿入できません。入れると挿入失敗の文字が出ます。
MySQLを使用するとソースの公開義務があるのですが、 公開してますか?
>>881 Accessでデータ挿入した際にでたエラーを見て原因がわからない場合、
同じSQL文をmysqlクライアントから試してみると原因がわかるかもしれません。
一般クエリログを出すようにしておけば、Accessが発行したSQL文は全てログにも出力されるようになっていますよね。
それをmysqlクライアントからも試してみて、どんなエラーがでているのかを見てみましょう。
これって個人が非営利で使っていても公開する義務ってあるの?
>>880 別の人のケースでもそうだけど、アプリケーション側/プログラム側で得られたエラー情報から
だけでは何で接続できない/クエリが失敗するのか分からない場合には(エラー情報が少ないなど)、
とりあえず一般クエリログをサーバ側で出すようにして、実際にどんな接続要求/クエリがサーバに
実行されているのかを見てみるといいよ。
仕組みとしては、ログに出ているSQL文等をmysqlクライアントで実行するのと、サーバにとっては同じなので。
というか、一般クエリログをみんなもっとよく使おうよ。このログは「デバッグ用」、つまり今みたいなときに
問題解決をするのに使うために、実装されている機能だよ??
>>886 中の人がいたのでちょうどよく質問です。
useNewIO使うのはまだ危ないですか?
# 問題の切り分けができない連中を相手にするのは大変ですね
JDBCドライバの中の人に質問。 プリペアドステートメントのC言語APIの日本語マニュアル無いですか? 公式にある日本語訳は関数仕様変更前の情報で、あの通りに作っても動かない・・・・・ 英文の方のマニュアル見ながら作ったら、途中までは動作したけど、 何か見落としているのか、libmysqlclientの中でセグメンテーションフォールトで落ちる JDBCドライバでプリペアドステートメント対応するにあたり、参考にしたものがあれば教えてください。
>>885 ライセンス条項が理解出来ない馬鹿には使う権利が無いよ
>>885 GPLに利用にあたって個人/法人とか、
用途の営利/非営利なんて区別はない。
俺ライセンスのフリーソフトとは違うよ。
健常者と池沼は厳然と区別されているがな
894 :
892 :2006/02/10(金) 00:22:22 ID:???
「俺ライセンスのフリーソフト」を貶めるつもりは、全くない。為念。
>>887 useNewIOは今使ってないなら、使うのは止めて置いて下さい。
C/J 3.1.0で実装されたものの、使うメリット少ない(デメリットの方が大きい)と判断され、
今後この機能は将来的には削除される予定になっています。
>>888 基本的にはmysqlクライアントでコンソールでプリペアードステートメントを叩くのと同じです。
普通のステートメントを発行する際に使用するPacketでない、専用のPacketを使って
サーバとやりとりするのですが、それを各クライアントAPI(C API/JDBCドライバ他)が
実装するという形になっているとおもいます。あまり返答になってなくて御免なさい。
とりあえず、mysqlクライアントで同じクエリを発行できますか? こんな感じで。
mysql> prepare pstmt1 from 'select ? - ?';
mysql> set @a=20;
mysql> set @b=5;
mysql> execute pstmt1 using @a, @b;
まさか、JDBCドライバって、mysqlをプロセスオープンしてパイプで流し込んでいるだけ!? がーん
>>897 JDBC APIインタフェースを持ちつつ、裏ではJava Socket APIを使ってMySQLサーバにTCP/IP接続して、
MySQL client/serverプロトコルに則ってPacketを送ったり受け取ったりですよー。(^^)
あー、そういうことか。 mysqlのクライアント−サーバ間のプロトコルをそのまま喋ってるのか 手っ取り早い気もするけど、やっぱり日本語の資料は無いんだよな・・・・・ 読むの時間かかるなぁ なにはともあれ、参考になりました。ありがとうございました。
901 :
NAME IS NULL :2006/02/10(金) 02:50:22 ID:0WgiNO70
MySQL 5.0を試しに導入してみたんだが、CSEが新しいクライアントAPIに 対応してないようで、サーバから蹴られちまった orz 5.x系の管理用のクライアントツールってなんかいいのない?
903 :
NAME IS NULL :2006/02/10(金) 19:52:33 ID:XiUlTkq6
すみません、データディレクトリを変更するのは、どうやるのでしょうか? /etc/my.cnf に datadir=(新しいディレクトリ名) と指定して、/etc/init.d/mysql restart とやっても、MySQLサーバが起動しません。 インストールし直してみましたが、/etc/my.cnf に上の設定がある場合、 RPMからインストールしても、やはりMySQLサーバが起動しません。 環境はRHEL4, MySQL5.0.18 です。
/usr/local/libexec/mysqld --datadir=/hoge
905 :
903 :2006/02/10(金) 22:43:06 ID:???
>>904 これは、RPMインストールの場合は、/etc/init.d/mysql スクリプトを書き換
えろ、ということなのでしょうか?
>>905 my.cnfのdatadir=を変更するだけでいいはずだよ。
my.cnfを変更する時はdatadir=だけでなくsocket=も変更したか?
[mysqld]セクションのsocket=をデフォルトから変更したら
[client]セクションにもsocket=を指定するのを忘れるな。
>903 エラーメッセージの内容確認してる? アクセス権が無かったりしない?
908 :
903 :2006/02/10(金) 23:52:25 ID:???
すみません、他の人と一緒にいじっているうちに、 RPMからの通常のインストールすら出来なくなってしまいました。 これを解決してから、出直してきます。
909 :
NAME IS NULL :2006/02/11(土) 00:26:32 ID:yInYX5UY
質問です 4.1から日本語環境への配慮が止まっているようですが mysqld --skip-character-set-client-handshake コマンドを使ってキャラクターセットの問題をクリアーした時 どの言語が一番適しているのでしょうか?(全部同じ言語設定にしてしまおうと思っています) 是非、みなさんの経験則からの判断を教えて下さい #主観ですが入力のある様な検索システムなど、漢字を多用した時UTF8では何か問題を起こしそうな気がしてなりません やっぱsjisなんでしょうか? CentOS4.2, MySQL5.0.18
windows排除してEUC sjis使うなら、スキップするんじゃなくてsjisとして動かさないと \x5c問題とかで悩むことになりかねないと思うぞ あと、ついでだが、sjis完全準拠のOSはもう殆ど無い。 最近のwindowsはsjisを更に独自拡張したCP932 同じsjisだと思ってても一部互換が無かったりするので注意しる
>>910 909ではないがCP932なんて初めて聞いた
UTF8だとなんか問題あるの?
WinXPも今UTF8なんだよね?
913 :
909 :2006/02/11(土) 04:05:13 ID:yInYX5UY
>912 ウホッ! すばらしい回答 つまりキャラクターセットをpc932にして mysqli_query($db, "SET NAMES pc932"); を記述⇒(゚Д゚)ウマー #ちょい前にWikiさんのページ発見、熱読しました。すばらしいサイトですね。 MySQLのトラブルの殆どはキャラクターセットだと思います。そういう意味では最高に親切なサイト
>>910 CP932はMS-DOSと共に採用された物だけどな。
>>910 あと、MySQLなどのアプリケーションが使うキャラクタ
セットについて、OSは一切関知しないから、OSうんうん
はどうでも良い話。
OSとアプリケーションのキャラクタセットは合わせて
おくと何かと無難という事で、同じにする事が多いが。
(キャラクタセットという言葉も、本来はエンコーディング
と言うべきだが、MySQLは区別していないからなあ)
916 :
805 :2006/02/11(土) 10:55:52 ID:???
>>805 について誰かおしえてくださいませ
ちなみにphpmyadminでMySQLのシステム変数を調べると
以下のようでした、
変数 セッション値 グローバル値
character set client utf8 ujis
character set connection utf8 ujis
character set database ujis ujis
character set results utf8 ujis
character set server ujis ujis
character set system utf8 utf8
MySQL Query Browser 使ってるんですが、 困ったことに、クエリを実行したときに動くイルカがかわいくてたまりません。 そのため、早いクエリを探すよりもイルカを長く見られるクエリを探してしまいます。 どうすればいいでしょうか?
OSうんうん… かわいい…
./mysql.server startを実行すると Starting MySQL./mysql.server: line 136: test: /usr/local/var/linux: binary operator expected ../mysql.server: line 136: test: /usr/local/var/linux: binary operator expected ../mysql.server: line 136: test: /usr/local/var/linux: binary operator expected これが延々と続いて起動しません。 configureは ./configure --with-charset=sjis --with-extra-charsets=ujis --with-mysqld-user=mysql --with-client-ldflags=-all-static --with-mysqld-ldflags=-all-static --enable-thread-safe-client \ CFLAGS='-O3 -march=athlon-xp -pipe -m3dnow -mmmx -msse -mfpmath=sse -fomit-frame-pointer -funroll-loops -fforce-addr -frerun-cse-after-loop -frerun-loop-opt -falign-functions=4' OSはgentoo linuxです。
921 :
NAME IS NULL :2006/02/11(土) 23:55:34 ID:Czwlzcso
>>916 phpMyAdminのバージョンを落とす、、
922 :
NAME IS NULL :2006/02/12(日) 00:29:21 ID:qyYNJIo6
MySQLでは、text型にはdefaultは指定できないとのことですが、 それでも指定したいとダダをこねてもどうにか指定できませんか?
>>901 私はODBC経由で強引にCSEを使ってます。
手になじんでるからなぁ。腑に落ちないけど。
謹製のQuery Browserの使い勝手はどうなんでしょうか。
MySQLの設定を第一の目的としてる人と、
あくまでも数あるDBのうちの一つとしてMySQLを使っている
業務アプラーとでは、ツールに求める部分が違いますからねぇ。
JDBCドライバの中の方に質問です。 setAutoCommit(false); ならば、commitが実行されるまでトランザクション内なのは 触ってみてわかったのですが、 一度commitされた後は次のトランザクションはbeginを実行しなくても 開始されるのでしょうか?
MySQL 4.0.21 でUTF-8なDumpファイルをリストアできません・・。HELP! もともとはEUC-JPのデータが入っていたテーブルをバックアップして, Dumpファイルの文字コードをEUC-JPからUTF-8に変換。 正しくUTF-8に変換されていることはエディタで開いたりして確認済みです。 その後コマンドラインで mysql TABLE_NAME < DUMP-UTF-8 としたところ,インポートされたデータの文字コードはEUC-JPでもUTF-8でもない, 完全に文字化けしてる状態で格納されていました。 やり方を変えて, mysql> source DUMP-UTF-8 としてみたところ,小さなDumpファイルではうまくいくのですが, 80MB超のファイルでやってみると, No Connection, Trying to reconnect ERROR 2005: Unknown MySQL Server Host xxxxx という表示が途中から出てきてしまって,最後までインポートできません。 ちなみに,コマンドラインはWindowsのコマンドプロンプトとLinuxのコンソールの 両方で(別環境にて)チェックしましたが,症状は全く同じでした。 何かヒントだけでもあれば・・・お願いします。 ちなみにMySQL 4.0.21のバージョンは固定になります。4.1系にしたりできない環境なので・・・。
>>925 UnicodeのサポートはMySQL4.1以降の話だと思うんだが。
バイナリとして放り込みたいということ?
>>924 その通りです。Connection.setAutocommit(true)を呼び出すとドライバは
サーバに対してクエリ"set autocommit=1"を実行します。
>>927 訂正:
×→Connection.setAutocommit(true)を呼び出すと"set autocommit=1"を実行
○→Connection.setAutocommit(true)を呼び出すと"set autocommit=0"を実行
929 :
925 :2006/02/12(日) 20:01:07 ID:???
>>926 そういうことになるんでしょうか。
MySQLサイドでのUTF-8サポートは必要なくて,プログラム側から見て,
データはUTF-8にしておきたい事情があります。
930 :
NAME IS NULL :2006/02/13(月) 03:09:08 ID:0vP9u49S
>909 これを読んでの質問です Perlでデータの保存をMySQL担当してもらおうと考えています character_set_client character_set_connection character_set_database character_set_results character_set_server character_set_system これらを全部UTF-8に指定した場合 何か問題が起きるでしょうか? WinXPでは既にUTF-8が標準になっているとの書き込みを見ました WinXPで秀丸でソースを書いているのですが、これは自動的にUnicode(UTF-8)で保存されていると言う事なんですよね? と言う事であれば、あえてcp932を使わずそのままUTF-8を使った方が無難の様に思えます (昔からのデータやソースを使う人にはcp932がお勧めと言う意味という事でしょうか?) FedoraCore4 MySQL5.0.18
ここにも釣りが!
>>927 情報ありがとうございます。
でも、
Connection.setAutocommit(false)を呼び出すと"set autocommit=0"を実行
のような感じがします。
933 :
NAME IS NULL :2006/02/13(月) 14:17:43 ID:K85Z9/Z2
VB6.0でMySQL4.1のデータベースにレコードを追加したいんですけど、 MySQLに接続できません。インターネットで調べたら 以下のプログラムが出てきたんですが 両方試してもMySQLに接続できませんでした。 Set cn = New ADODB.Connection cn.Open "Provider=MSDASQL.1;Password=;User ID=root;Data Source=sample" と Set cn = CreateObject("ADODB.Connection") cn.Open "dsn=sample;uid=root;pwd=" cn.CursorLocation = 3 どうしたら接続できるか、教えてください。
>>932 あー、あ、、そうですね(^^;
>>927 であってましたね。
何を勘違いしたんだろう
>>928 は忘れてください・・・。
General Logを出して見る、あるいはソースを覗いて見ると分かりますが、
結局言いたかったのは、setAutocommit()の呼び出しは"set autocommit"の
実行と等価だということです。ついでに言うと、この設定はドライバでキャッシュされます。
混乱を招くような書き方をしてしまい失礼しました。
>>933 エラーメッセージから状況が全く読めないのなら、とりあえずtelnetおよび
General Log(一般クエリログ)を使って問題の切り分けをすることをお奨めします。
「接続できません」問題についてはおよそ以下のどこかで躓いていることが多いです。
1.そもそもサーバが起動していない。
2.MySQLでTCP/IP接続を無効にした状態で起動しているのにTCP/IP接続しようとしている。
3.サーバは起動しているがF/Wにより遮られている。
4.ホスト名を使ってサーバを指定しているが、ホスト名からIPへの解決ができていない。
5.データソース設定内容に誤りがある。
6.MySQLにアクセスするユーザの権限設定を行っていない。
7.複数のユーザ権限設定が該当しており自分が想定しているものとは違うもので判定されている。
一般クエリログに何かが出ている場合には、原因は6か7に絞れます。さらにログにどのユーザで
アクセス権限の判定がされたのかを見ることができます。
とりあえず telnet foobar 3306 で繋がるか確認するのも良い手です。telnetが繋がるなら
1〜4の可能性を排除できます。
上記はどのプログラミング言語を使っているか、どのコネクタ(ODBCやJDBC)を使用しているかに
関わらず有効な、一般的解決方法と思います。
とりあえずこれしか言えないので、あとはがんばってください。
中の人大変だなぁ・・・・・
937 :
NAME IS NULL :2006/02/14(火) 00:35:53 ID:gWyCkF2i
>>933 まずはsampleという名前のデータソースが正しく作られているかだな
プログラムと切り離して単独で接続チェックができないの?
938 :
NAME IS NULL :2006/02/14(火) 12:03:33 ID:67SbzokA
mysqlに登録してある日本語の文字列を五十音順にソートする方法はありますでしょうか? ロリポップを使っています。mysqlのバージョンは 4.0.24のようです。宜しくお願いします。
それって order じゃできないってこと?
940 :
938 :2006/02/14(火) 13:12:03 ID:67SbzokA
>939 レスありがとうございます。 試しにselect * from tabale where name order by name; とか書くと、不完全にソートされます。 これは文字コードとかの問題でしょうか? それとも上のクエリが間違っているのでしょうか?
設定が悪い。情報小出しやめて
943 :
940 :2006/02/14(火) 17:21:40 ID:67SbzokA
>942 レスありがとうございます。ローカル環境でテストしているのですが、my.ini等の設定は合っていると思います。mysqlのバージョンは同じでsjisにしています。 ところで今気がついたのですが、例えば select * from table where name order by name とやると、ひらがな五十音順、カタカナ五十音順、漢字五十音順に分けられてそれぞれ並びます。ひょっとしてこれは正常なのでしょうか? もし、ひらがな漢字カタカナ関係なく、読み通りにソートしようと思ったら、 携帯電話のアドレス帳のように、読み仮名を登録するしかないのでしょうか?
>>943 設定をそのままコピペしろって言ってんだよアホが
>>943 それは仕様だ、windowsのファイル名を名前順にソートしてみろよ
ソートは文字コード順 そこから逃れるためには、自分でも書いてるように読みがなをつけたほうが早い
>>940 >>943 補足:collationでググれ
MySQL(RDBMS)は、ORDER BY、いわゆるソート処理を行う際、collation(照合順位)に従って行う。
sjisの場合、以下のように2種類のcollationが用意されていて、デフォルトは"sjis_japanese_ci"となっている。
mysql> SHOW COLLATION LIKE '%sjis%'\G
*************************** 1. row ***************************
Collation: sjis_japanese_ci
Charset: sjis
Id: 13
Default: Yes
Compiled: Yes
Sortlen: 1
*************************** 2. row ***************************
Collation: sjis_bin
Charset: sjis
Id: 88
Default:
Compiled: Yes
Sortlen: 1
2 rows in set (0.00 sec)
SQL文にCOLLATE句を使うことで"sjis_bin"を使えると思うけれども、
どちらも自分の望みの通りの並び順ではない、という場合には
>>945 >>946 の言うように自分で何か回避法を使う必要があると思う。
948 :
NAME IS NULL :2006/02/14(火) 17:42:41 ID:67SbzokA
うっひょー!!! ものすごい勢いでレスありがとうございます。 >944 設定とはmy.iniのことですか? [mysqld] default-character-set=sjis [mysql] default-character-set=sjis [mysqldump] default-character-set=sjis な感じです。 >945 確かにそうですよね。感じの音訓まで理解できるはずないですもんね〜。 >946 読み仮名作戦は結構ポピュラーなんでしょうか? ユーザー登録とかするとき、名前の読み仮名入力させられるのはこういう理由だったりするんですかね?
>>948 漢字の読みはいろいろあるからね。
日本人なら常識なんだけど、ちょっと難しかったかな。
ふつー ソートしよう思ったら、フリガナデータくらい用意するよな、、、
もともと文字コードや環境の設定ミスでひらがなもうまくソートできない という事例が多かったので、最初の質問でみんなそっちを疑ったはず
collateって4.0系で使えるのか? 4.1以降かと思ってた
客相手に氏名を入れさせるときにふりがなはデフォだろ。 もし電話するような必要がでたときに、名前を呼び間違うような失礼をしても構わないのなら 無理に入れる必要はないと思うが。
DB仕様の管理でテーブル構造の各フィールドの意味をどう管理、ドキュメントにしてます? phpMyAdminで印刷表示にして、そのテーブルに列を追加してフィールドの意味を 付け加えているんだけど、DB構造が変わった時の効率悪くて… DBでフィールドの意味を入れる場所作ってくれればいいんだけど…
mysql って、select (select ... from hoge), (select ... from fuga) ってかんじのことできまつか?
>>957 sub-select のことでは?
>>956 試してみればわかる。
mysql> select (select 1),(select 2);
+------------+------------+
| (select 1) | (select 2) |
+------------+------------+
| 1 | 2 |
+------------+------------+
ただし MySQL4.1以上
わーい。さっそく 5 系列にでもうpしたいと思いまつ。 ありがとうございまつた。 mysql> select (select 1),(select 2); ERROR 1064: You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'select 1),(select 2)' at line 1
とおもったけど、こわいから 4.1 系でがまんしまつ。
ZendとJbossもかよ・・・
>>955 DBの仕様なんて作らないさ
中を勝手に見ろと(ry
964 :
NAME IS NULL :2006/02/15(水) 21:21:59 ID:Z1uj4S+m
1000レスで終わるんですかね〜?
PHP+MySQLの事ってどこで聞いたらいいでしょうか?
>>965 原因の切り分けすらできないの?
開発やめちゃえば?
>>966 原因の切り分けができないなら、
切り分けする方法を聞くとかね。
>>962 昨日JBossの中の人に会ったけど、一応否定してた。
「Oracleはよくこういうガセネタを流すんだ」
だってさ。本当の所はどうなのかは、知らん。
969 :
?? :2006/02/15(水) 22:37:52 ID:Z1uj4S+m
>>966 え〜厳しいなぁ…
開発はやめたくないなぁ〜
がんばろっ!
でも解らんことあったら協力してね。
971 :
NAME IS NULL :2006/02/15(水) 23:21:24 ID:g38nKAjD
すみません。くだらないかもしれない質問です。 今、tab区切りのtextをMySQLに読み込もうとしてますが、うまくいきません load data infile 'ファイルのパス' into table テーブル名 fields terminated by '\t' lines terminated by '\n' とやってみても、うまくいきません。 '\t'が間違ってるのでしょうか??何を使えばよいのでしょうか?? どなたかお教えください。 ちなみに環境は、 MacOSX10.4 Mysql 5.0.18 で、取り込むテーブルはujisをデフォルトキャラにしてます。 なんかうまい方法ないですか?? よろしくお願いいたします。
972 :
NAME IS NULL :2006/02/15(水) 23:27:16 ID:se1T/eTx
>>970 ではさっそくですが、、、
DBのテーブルにpointというフィールドがあり、
そのフィールドの値を60秒間隔で1減らし、
そのフィールドの値が0になると、閲覧できなくする。
というような感じの事、
簡単な説明だが、プログラムとしては、
PHP+MySQLで可能だろうか?
可能ならスクリプトは困難?
>>974 別に減らす必要も無く、60を入れておく必要もない。
開始時刻を入れておいて、スクリプト側で現在時刻と比較して、
60秒以上経っていたら閲覧禁止処理を行えばいい。
>>975 うんうん
要はデスネ・・・
自分がやりたいのは、各閲覧者ごとに
ポイントを振り分けたいので、DBに60秒に一度
問い合わせをして、0になったら閲覧禁止と思ったんですよ、、、
説明不足やったです。(*_ _)人ゴメンナサイ
結局、60秒に一度DBに問い合わせして、データの更新処理をすれば
いいんだよなぁ?多分・・・
もう少し自力で頑張ってみます。
>>977 セッション管理ですね。
アリガトです。
またやってみて息詰まったらご協力お願いしや〜す。。。
一応趣味で色々やってるんですが、こういうのが凄く好きらしく・・・
頑張ってみます。。。
>>971 何が、どう上手くいっていないのか、をもう少し教えてもらえないか。
Mac機は持ってないので手元での確認はできず。
現時点で気になる点
・全角バックスラッシュを使っているのは2chにカキコするためであって、実行したときは半角バックスラッシュ?
・Macの改行コードってCRだっけ?
改行コードが原因の場合は、Macの場合は、lines terminatedのところを
LINES TERMINATED BY x'0D'
という風に書くと(予想が正しければ)幸せになれるかも。
MACの改行コードはCRだけど、、、CRなら\r
昔のMacOSはCRだったけど、OSXはunixもどきなのでデフォルトはLF…
2005の使い勝手はどうですか?
>>982 ああ、MacOS10からそうだったね。
SELECT HEX('\n') を実行してみれば分かるけど、MySQLでは'\n'はOSを問わずLF固定っぽい。(Windows機で確認)
MacOS10.2でやったときに同じ問題にあたった。 ファイルの所有者を弄ろうが、パーミッションをいくら見直そうが、なぜか全く読み込めない。 もしかすると見えないところでSELinuxのような何らかの規制があるのかも!?
JBossとMySQLが合併とかしたら面白いのにね。
Jbossが特定のRDBMSとセットになるのはいやだなあ・・