MySQL 総合 Part11

このエントリーをはてなブックマークに追加
1だよもん!!!
快速 RDBMS、MySQL の総合スレです。
前スレ[MySQL 総合 Part10] http://pc11.2ch.net/test/read.cgi/db/1164490501/
[関連スレと過去ログ]
http://find.2ch.net/index.php?STR=MySQL
http://makimo.to/cgi-bin/search/search.cgi?D=db&q=MySQL&sf=0&link2ch=on

[MySQL Developer Zone] http://dev.mysql.com/
[MySQL 日本語リファレンスマニュアル] http://dev.mysql.com/doc/mysql/ja/
[MySQL Internals Manual] http://dev.mysql.com/doc/internals/en/

[MyNA] http://www.mysql.gr.jp/
[MLja] http://lists.mysql.com/mysql-ja

ここで質問をする前に、MyNAでのFAQを最初に確認しましょう。
http://www.mysql.gr.jp/frame/modules/bwiki/?FAQ

・関連ツール及びユーティリティ
・関連書籍
>>2
2NAME IS NULL:2007/05/03(木) 10:09:53 ID:???
【関連ツール及びユーティリティ】

[phpMyAdmin] http://www.phpmyadmin.net/
[phpMyBackupPro] http://www.phpmybackuppro.net/
[MySQLCC] http://www.mysql.com/products/mysqlcc/
[MySQL-Front] http://www.mysqlfront.de/
[mytop] http://jeremy.zawodny.com/mysql/mytop/

MySQL ABでの各種GUIツールは
MySQL GUI Toolsとして統合されています
(WorkbenchはGUI Toolsから独立しました。)
http://dev.mysql.com/downloads/gui-tools/5.0.html
・MySQL Administrator
・MySQL Query Browser
・MySQL Migration Toolkit

http://dev.mysql.com/downloads/gui-tools/5.0.html#Workbench
・MySQL Workbench

【関連書籍】

[MySQL Books]
http://dev.mysql.com/books/
http://www.amazon.co.jp/exec/obidos/search-handle-url/ix=books-jp&fqp=keywords%01MySQL
http://www.amazon.co.jp/exec/obidos/search-handle-url/ix=books-us&fqp=keywords%01MySQL
3NAME IS NULL:2007/05/03(木) 10:12:54 ID:???
■テンプレ補足

MyNAでの「心得の条」は最初によく読みましょう。
http://www.mysql.gr.jp/frame/modules/bwiki/index.php?%BB%A8%B3%D8%2F%BF%B4%C6%C0

【関連ツール及びユーティリティ】 *次は他項目と一緒にします。(ごめんなさい)
[Common SQL Environment] http://www.hi-ho.ne.jp/tsumiki/cse_1.html

2ch風偉人伝 AA はこちら
http://www.aadayo.com/aa/02_13.html
4NAME IS NULL:2007/05/04(金) 09:55:32 ID:???
                          刀、           , ヘ
                  /´ ̄`ヽ /: : : \_____/: : : : ヽ、
              ,. -‐┴─‐- <^ヽ、: : : : : : : : : : : : : : : : : : : : : : }
               /: : : : : : : : : : : : : :`.ヽl____: : : : : : : : : : : : : : : : : : /
     ,. -──「`: : : : : : : : : :ヽ: : : : : : : : :\ `ヽ ̄ ̄ ̄ フ: : : : :/
    /: :.,.-ァ: : : |: : : : : : : : :    :\: : : : :: : : :ヽ  \   /: : : :/
    ̄ ̄/: : : : ヽ: : : . . . . . . . . . . .、 \=--: : : :.i  / /: : : : :/
     /: :     ∧: \: : : : : : : : : : ヽ: :\: : : 〃}/  /: : : : :/         、
.    /: : /  . : : :! ヽ: : l\_\/: : : : :\: ヽ彡: : |  /: : : : :/            |\
   /: : ィ: : : : :.i: : |   \!___/ ヽ:: : : : : : :\|:.:.:.:/:!  ,': : : : /              |: : \
   / / !: : : : :.ト‐|-    ヽ    \: : : : : l::::__:' :/  i: : : : :{              |: : : :.ヽ
   l/   |: : :!: : .l: :|            \: : : l´r. Y   {: : : : :丶_______.ノ: : : : : :}
      l: : :l: : :ト、|         、___,ィ ヽ: :| ゝ ノ    '.: : : : : : : : : : : : : : : : : : : : : : /
      |: : :ト、: |: :ヽ ___,彡     ´ ̄´   ヽl-‐'     \: : : : : : : : : : : : : : : : : : イ
        !: :从ヽ!ヽ.ハ=≠' , ///// ///u /           ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
      V  ヽ|    }///  r‐'⌒ヽ  イ〉、
              ヽ、______ー‐‐' ィ´ /:/:7rt‐---、       こ、これは>>1乙じゃなくて
                  ィ幵ノ ./:/:./:.! !: : : : :!`ヽ     ポニーテールなんだから
              r‐'T¨「 |: | !:.∨:/:./: :| |: : : : .l: : : :\   変な勘違いしないでよね!
               /: : .|: :| !:.!ィ¨¨ヾ、:.:/ !: : : : l: : : : : :.\
5前スレ990:2007/05/04(金) 12:08:10 ID:???
前スレ990です。
SELECT COUNT(*) FROM テーブル名 なんて便利な構文があったとは…。
感激です。

ありがとうございました。
6NAME IS NULL:2007/05/04(金) 12:48:20 ID:???
質問です。

"SELECT * from table" の 11行目〜20行目 を取得したい場合には、どのようなSQL文を発行すれば良いでしょうか?
目的はWebアプリケーションの「次のページ」に該当するものを作ることです。

よろしくお願い致します。
7NAME IS NULL:2007/05/04(金) 13:07:37 ID:???
>>6
リミット
86:2007/05/04(金) 17:32:42 ID:???
>>7
リミットでぐぐったら解説ありました。
感激です。
ありがとうございます。

http://homepage2.nifty.com/sak/w_sak3/doc/sysbrd/mysql_10.htm
9NAME IS NULL:2007/05/04(金) 17:44:53 ID:qFF22gV4
>>9ならMYSQL公式サイトに5.0の日本語マニュアルうpされる
10NAME IS NULL:2007/05/04(金) 23:47:48 ID:L3HBUz2X
source sql.txt
で520件程度のload_fileを使ったクエリを読み込ませて
warningが4件ずつでながらもquery OK で成功してるはず
なのですが、実際にセレクトしてみるとload_fileでインサートしたはずの
画像が入っていません。
手動で1件ずつ入れる分には問題ないのですが、
なんとかする方法はないでしょうか?
11NAME IS NULL:2007/05/04(金) 23:51:15 ID:???
↑もう一回テストしてみたら入ってました。前回は念のためbeginってしたのが悪かったのかな。
12NAME IS NULL:2007/05/05(土) 10:40:57 ID:???
5.1日本語マニュアルがうP
http://dev.mysql.com/doc/refman/5.1/ja/index.html
13NAME IS NULL:2007/05/05(土) 13:53:06 ID:???
beginしている事自体、駄目だろw
14NAME IS NULL:2007/05/05(土) 16:26:28 ID:58Z5NhTT
はじめまして。
phpmyadminを使用してテーブルの作成をしたいのですが、VARCHARやTXETなどの可変長文字列を使用するとエラーがでます。

#1163 - The used table type doesn't support BLOB/TEXT columns

可変長文字列が使えないようになっているのはわかるのですが、どこで変更していいかわかりません。

どなたかご教授願います。
15NAME IS NULL:2007/05/06(日) 02:00:51 ID:VOimcpaB
>>14
もう少し詳細な情報がないとなんとも。
「お腹痛いんですけど」だけでは原因はわかりません。
16NAME IS NULL:2007/05/06(日) 03:08:09 ID:???
>>15
TYPEがHEAPじゃなくて?
17NAME IS NULL:2007/05/06(日) 03:37:23 ID:DkpI5Nmx
mysqlからデータ取り出して、PHPで表示させる時、皆何つかってる?
俺はWHILEばっかなんだけど。
18NAME IS NULL:2007/05/06(日) 05:52:01 ID:???
>>17
csvファイルに落としてあとでのんびり参照。いやマジで。
19NAME IS NULL:2007/05/06(日) 08:33:40 ID:???
質問です。

レンタルサーバでPHP+Mysqlを利用してます。

掲示板で、使用してるテーブルが 40万行 60MB なのですが、
これは一般的に大きすぎますか?
20NAME IS NULL:2007/05/06(日) 08:54:22 ID:???
質問の意図が分かりません。
40万行なんてたいしたことではありません。
21NAME IS NULL:2007/05/06(日) 09:07:51 ID:???
>>20 ありがとうございます。

レンタルサーバ側から、
『サーバに異常な負荷が起きている、Mysqlを利用できなくした。原因のPHPを削除しろ。』
とメールで連絡がきて。しかも海外の会社だから、英文で…

今、困惑中のオレ...orz

22NAME IS NULL:2007/05/06(日) 10:02:48 ID:???
>>21
データ量じゃなくてクエリーの不出来が原因だな。
たった100行1メガのテーブルでも
やり方しだいで負荷100%は楽々達成できる
23NAME IS NULL:2007/05/06(日) 13:25:21 ID:I2do9hQG
コマンドラインのmysqlクライアントでテーブル名やカラム名の補完ができるのを見かけたんですが、
使えるバージョンやconfigureオプションを教えてください。
24NAME IS NULL:2007/05/06(日) 15:34:13 ID:???
inner join と
left join + where 結合テーブル.任意のカラム is not null
っていうのは同じ結果が返ってくると思うのですが、やっぱり速度的は前者の方が速いんでしょうか?
25NAME IS NULL:2007/05/06(日) 16:52:06 ID:ixhAcene
質問です

誕生日などの記念日を日付型のフィールドに格納しています
そこで、今日から指定日数以内に記念日が含まれる人を抽出する場合の条件は
どのようにすればいいでしょうか?
26NAME IS NULL:2007/05/06(日) 22:43:56 ID:???
>>25
BETWEEN に、今日の日付関数と、日数計算関数を書く。
27NAME IS NULL:2007/05/07(月) 13:44:13 ID:???
>>23
ALTER TABLE
28NAME IS NULL:2007/05/07(月) 15:47:57 ID:???
Windows で skip-character-set-client-handshake を指定しても効かないのですが
わかる方おります?
29NAME IS NULL:2007/05/07(月) 20:03:57 ID:???
>>28
MySQLのバージョンがわからんとコメントしようがない。
30NAME IS NULL:2007/05/07(月) 20:31:05 ID:???
>>29
ここ(http://ftp.iij.ad.jp/pub/db/mysql/Downloads/)で
これ(mysql-5.0.37-win32.zip)落としました。
31NAME IS NULL:2007/05/08(火) 06:13:38 ID:???
>>30

そのオプションが4.1以降なのでと思っていたけど、5.0系ですね、、、
my.cnfの記述が気になる所ですが、
効く、効かないの確認はどのようにしていますか?
mysqlクライアントから、SHOW VARIABLES LIKE 'char%';の出力結果を確認してみましたか?
32NAME IS NULL:2007/05/08(火) 13:30:44 ID:???
>>31
skip-character-set-client-handshake の仕様ついて、かなり勘違いしてるかもです。

すべて ujis に設定したいと考え character_set_server は ujis としています。
コマンドラインで SHOW VARIABLES LIKE 'char%'; を確認すると、
character_set_client の値は ujis になっているのですが、
phpMyAdmin から SHOW VARIABLES LIKE 'char%'; を確認すると、
haracter_set_client の値が utf8 になっているので効いてないじゃないか!と考えました。

phpMyAdmin がどんな悪さしようとも必ず character_set_server と同じになるものと考えていましたが
やっぱり違うんでしょうかね?
33NAME IS NULL:2007/05/08(火) 13:39:38 ID:???
>>28 です。
実際そのように動作するからそういう仕様なんでしょうね。
phpMyAdmin にお仕置きすることにします。
34NAME IS NULL:2007/05/08(火) 15:04:49 ID:???
MySQLのBOOL型はtrue/falseじゃなくて1/0ですよね?
35NAME IS NULL:2007/05/08(火) 16:17:10 ID:???
>>34
int(1)とか、そんなの。
36NAME IS NULL:2007/05/08(火) 16:49:23 ID:???
    FOX★公認!今世紀最大の祭り!!!
俺たちのクリックで日本を一位にしようぜ!!
“30年は日本に手は出せないな”という勝ち方をしたい
http://wwwww.2ch.net/test/read.cgi/news4vip/1178602852/

1. チリ 136,836,018
2. ポーランド 135,173,390
3. イスラエル 80,308,719
4. ★日本 71,029,997★
5. スロベニア 56,818,986
6. フィンランド 40,275,252
石を投げる戦争から人は進化・進歩を遂げ、剣や槍などの武器をもって戦うようになった
人間はさらに発展し兵器を使う戦争を始めた
そして今、指先一つを武器とした電脳戦争が勃発したのであった・・・
皇国を勝利へと導くには貴様らの参戦が不可欠である
・戦場
http://www.clickclickclick.com/default.asp
・まとめサイト
http://www33.atwiki.jp/clickvip/
・mixi
http://mixi.jp/view_community.pl?id=2141035
37NAME IS NULL:2007/05/09(水) 17:33:34 ID:???
MySQLを勉強中だが、遊びながら覚えるには
権限関係やmysqlコマンドラインクライアントの環境を把握するのが
大変で、本来のデーターベースいじる前にくたばった

寝る
38NAME IS NULL:2007/05/09(水) 21:38:09 ID:???
>>37
おやすみ。MSの世界へどうぞ。
39NAME IS NULL:2007/05/10(木) 00:48:31 ID:???
>>37
おらくるがいんじゃね?
40NAME IS NULL:2007/05/10(木) 02:02:18 ID:???
おはよ。さて勉強再開しよ。いま参考にしているサイト。
ttp://wagby.com/install/howtoinstall_mysql3.html
ttp://homepage1.nifty.com/gak/webdb/mysql.html
ttp://www.geocities.co.jp/SiliconValley-Bay/1428/perl/perl_DBI.html
…なんか突っ込みくらいそう。
41NAME IS NULL:2007/05/10(木) 02:07:57 ID:???
GUIで弄れるSQL鯖とからくだよ。
42NAME IS NULL:2007/05/10(木) 02:35:51 ID:???
…とあるサービスにMySQLの空間をとってて
前に自分で勉強がてらphpMyAdminをぶちこんでいたことが発覚したが

設定全部忘れてる。最初からやり直し。
43NAME IS NULL:2007/05/10(木) 03:12:27 ID:???
…やっと -u root -p という呪文を覚えた。
すんげぇ疲れた
44NAME IS NULL:2007/05/10(木) 05:38:34 ID:???
チラシの裏に書くべき事をここに延々と書くな
45NAME IS NULL:2007/05/10(木) 17:34:55 ID:???
当たり前かもしれないのですが、レプリケーションって同じテーブルタイプじゃないとできないんでしょうか?

例えばDDLはまったく同じなInnoDBなテーブルからMyISAMなテーブルへはレプリケーションできないんですかね?
46NAME IS NULL:2007/05/10(木) 22:07:31 ID:???
>>45
違ってもok
もちろん、MasterとSalveでそれぞれcreate tableしてからレプカを走らせてね
47NAME IS NULL:2007/05/11(金) 00:10:43 ID:???
質問させてください
mysql4のときはmy.cnfにdatadir=/home/mysqlを追加するだけでよかったのですが
mysql5でdatadirを/home/mysqlにするにはどうしたらいいでしょうか?
48NAME IS NULL:2007/05/11(金) 11:53:50 ID:???
>>47
変わってないかと。
[mysqld] セッションの中に datadir=xxxx を入れて mysqldをリスタートしる
49NAME IS NULL:2007/05/11(金) 14:31:15 ID:???
検索用にMyISAMなDBを用意しておいて、データ保管用にInnoなDBを用意しておいてレプリケーションさせるのが最強?
50NAME IS NULL:2007/05/11(金) 15:05:26 ID:???
レプリカの原理上、そんなことしてもあまり意味はない
51NAME IS NULL:2007/05/11(金) 15:20:41 ID:OiGIVY/k
↓のWarnings: 6768ってどうゆう意味なんでしょう?
6768目のレコードが変ってことなのか、合計6768のレコードがおかしかったってことなのか・・・

mysql> load data infile 'new.txt' into table spict;
Query OK, 31422 rows affected, 6768 warnings (2.21 sec)
Records: 31422 Deleted: 0 Skipped: 0 Warnings: 6768
5247:2007/05/11(金) 16:03:05 ID:???
>>48
レスありがとうございます。
[mysqld] のすぐ下にdatadir = /home/mysqlと記入すると起動できません。
なぜでしょうか?・・・・
53NAME IS NULL:2007/05/11(金) 17:48:26 ID:???
>>46
おお、そうなのですか。
当たり前すぎる事なのか、書籍にも書いてなかったので困ってました。
ありがとうございます!
54NAME IS NULL:2007/05/11(金) 17:54:42 ID:NevP4AlU
interBaseのデータをMysqlにコンバートできますでしょうか?
55NAME IS NULL:2007/05/11(金) 18:19:57 ID:???
つまりレプリケーションの時点で、Myisamの高速性は無効?
56NAME IS NULL:2007/05/12(土) 01:56:52 ID:???
>>51
warning が6768個あったってこと。
show warnings すれば warning の内容が見れる。
57NAME IS NULL:2007/05/12(土) 12:47:54 ID:HqCZ1kB3
フィールドにidとnameを作って、webサイトからnameを追加したらidが1づつ増やしていくようにしたいのですが、
idにint、nameにvarchar(50)を指定しました。
intの長さはどれくらいにしたらいいでしょうか?

あと設定するところがあればご教授お願いいたします
58NAME IS NULL:2007/05/12(土) 16:16:30 ID:???
>>57
そのidに何件格納するつもりなのかと、、、、その質問は難件だな。
59NAME IS NULL:2007/05/12(土) 17:28:24 ID:5dWtySei
>>56 ありがとうございます。

show warningsの結果をファイル出力するにはどうしたらいいんでしょう?INTO OUTFILEとか>とか使ってみたんですけど何かエラーでます。

mysql> show warnings into outfile 'warnings.txt';
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 'into outfile 'warnings.txt'' at line 1
60NAME IS NULL:2007/05/12(土) 21:43:27 ID:???
intのバイトサイズは不変です
61NAME IS NULL:2007/05/13(日) 03:28:09 ID:???
データベースっておもしろいな、ハマりそう
62NAME IS NULL:2007/05/13(日) 15:06:24 ID:???
EUC-JP UTF-8 SHIFT-JIS
どれで作るのがおすすめですか?
63NAME IS NULL:2007/05/13(日) 15:56:41 ID:???
UTF-8
64NAME IS NULL:2007/05/13(日) 16:07:18 ID:???
文字化けの恐怖が・・・
65NAME IS NULL:2007/05/13(日) 18:42:27 ID:???
JISにしておくとメールの文字化け無いけどね。
66NAME IS NULL:2007/05/13(日) 20:29:37 ID:???
PHPとの連携でいちいち変換しないと
67NAME IS NULL:2007/05/13(日) 22:33:52 ID:???
>>62
クライアントに合わせれば良いんだけど。
68NAME IS NULL:2007/05/14(月) 04:13:51 ID:6ju7MXtu
Webアプリケーションで使う、MySQLのテーブル設計を勉強したいのですが、
勉強に最適なサイトはありませんか?
掲示板の時はこういうテーブル構成にするとか、
そういった設計から、設計の考え方などを勉強したいのですが、
何か最適なサイトがあれば紹介していただけると嬉しいです。
69NAME IS NULL:2007/05/14(月) 05:28:49 ID:???
>>68
phpを使ったサイトとして参考になる。
http://www.nvnetwork.com/home.php
70NAME IS NULL:2007/05/14(月) 11:43:10 ID:???
>>52
亀レスだが、/home/mysql に システム管理用のデータベース mysql ディレクトリ
が無いとか、パーミッションがおかしいとかじゃないかい。
わからなければエラーログを見るが基本。
71NAME IS NULL:2007/05/14(月) 18:28:32 ID:???
>>69
色々なところに通報しました
72NAME IS NULL:2007/05/14(月) 18:28:46 ID:???
>>70
レスありがとうございます。
もうレスがないかと思ってあきらめてました。
70さんを参考にいろいろ試して見ます。
ところでみなさんMySQLのバージョンは4ですか?5ですか?
あとdatadirはどこにしてますか?
73NAME IS NULL:2007/05/14(月) 23:39:02 ID:LAW+Ghic
phpとmysqlでどの程度のことができれば職場で苦労しない?
たとえばショッピングカートが作れれば無問題とか。
74NAME IS NULL:2007/05/14(月) 23:44:38 ID:???
>>73
そんなあいまいな質問をするようじゃ、職場で苦労する。
仕事は技術も必要だが、一般常識、人間関係のほうがもっと大事。
75NAME IS NULL:2007/05/14(月) 23:59:56 ID:Ho+ISCuc
mysqlのdbは最大64文字までですが
テーブル名は何文字までOKですか?
76NAME IS NULL:2007/05/15(火) 00:35:04 ID:???
ポータルやるなら決済系だし、業務系なら簿記も知らないと意味が無い。
77NAME IS NULL:2007/05/15(火) 06:08:34 ID:???
>>76も十分あいまいだと思うが・・w
78NAME IS NULL:2007/05/16(水) 06:03:26 ID:wVK6G4pR
リモートホストにmysqlコマンドで接続しようとしたらエラーが出るのですが、
原因として考えられることはありますでしょうか?

$ mysql -u user1 -h hoge.localhost
ERROR 2013 (HY000): Lost connection to MySQL server at 'reading authorization packet', system error: 54
79NAME IS NULL:2007/05/16(水) 09:29:06 ID:???
>>78
原因として考えられることは、たっくさんあるな。
80NAME IS NULL:2007/05/16(水) 14:44:43 ID:???
>>57
社員名簿でも作るの?俺ならとりあえず4桁にする
81NAME IS NULL:2007/05/16(水) 17:19:21 ID:???
sql5.0.27 PHP5.2.1で連携しています。
すべてUTF-8で設定していますが
「−」全角のマイナスだけがなぜか?に化けてしまいます。
みなさんはいかがでしょうか?
対策等ご存知であればよろしくお願いいたします。
その他は今のところ問題ないようです。
よろしくお願いいたします。
82NAME IS NULL:2007/05/16(水) 17:50:01 ID:???
>>81
〜 もだろ?
83NAME IS NULL:2007/05/16(水) 18:34:53 ID:???
>>82
〜 もでした。
どうしようもないんでしょか?
84NAME IS NULL:2007/05/16(水) 19:41:32 ID:???
ujisにすれば?当面不都合はないかと。
85NAME IS NULL:2007/05/16(水) 22:53:09 ID:???
cp932とeucjpmsを使えば解決しそうな予感。
86NAME IS NULL:2007/05/17(木) 20:14:52 ID:???
WindowsのMySQL Command Line CLientで操作してるんですが、Shift-Jis以外の文字表示は無理なんですか?
87NAME IS NULL:2007/05/17(木) 21:23:52 ID:???
mysqlをインストールしていたのですが、
/usr/local/mysql/bin/mysql test
と入力すると
ERROR 1045 (28000): Access denied for user 'ユーザ名'@'localhost' (using password: NO)
と言われたので、
/usr/local/mysql/bin/mysql test -p
でパスワードを入力してEnterを押したら
ERROR 1045 (28000): Access denied for user 'ユーザ名'@'localhost' (using password: YES)
と言われてしまいました。
解決法をいろいろと調べてみたのですが相変わらずわかりません。。。
だれかわかる人いましたらよろしくお願いします。
8887:2007/05/17(木) 21:42:45 ID:???
ちなみに
OS]使用で
/usr/local/mysql/bin/mysql -u root -p
上記では使用することができました。
よろしくお願いします。
89NAME IS NULL:2007/05/17(木) 21:50:42 ID:???
>>86
character_set_results
90NAME IS NULL:2007/05/17(木) 21:52:21 ID:???
>>88
grant
9187:2007/05/17(木) 21:55:49 ID:???
>>90
ありがとうございます。
最初はrootのみでしか使えないということなのでしょうか?
92NAME IS NULL:2007/05/17(木) 22:02:09 ID:???
93NAME IS NULL:2007/05/17(木) 23:59:56 ID:+ucqrGEe
マックosxにインストールしたんですが、
C―APIの動的ライブラリの場所、名前を教えて頂けないでしょうか。
94NAME IS NULL:2007/05/18(金) 00:10:32 ID:???
95NAME IS NULL:2007/05/18(金) 03:25:37 ID:96NrWpJ/
selectの後ろに\Gつけると

ERROR:
No query specified

ってなるんですけど、これどうゆう意味ですか?
96NAME IS NULL:2007/05/18(金) 12:27:11 ID:???
>>95
クエリが無いって言ってるジャン
エイゴワーカリマスカ?
\G の前に ; をつけてるだろ。
97NAME IS NULL:2007/05/18(金) 19:01:48 ID:2q7j7eIB
どちらのテーブル構造にするかでまよってます。
(1)目的
 たくさんのPCのD:ドライブについて、ファイル名とそのファイルのサイズを格納する。
 PC1 /a/b/c/d 100等
 で、これをがんがん検索する。PC1の一覧とかPC2の/a配下の一覧とか

 PC 10000台くらいまで、ファイル/PC 1000ファイルくらいまで。

(2)テーブル構造案1
 PC名、ファイルパス、サイズ
例:PC1, /a/b/c/d/e, 100 


(3)テーブル構造案2
 PC名、セグメント1.セグメント2、…、セグメント10、サイズ
    セグメント:ファイルパス中のセグメント
    例:PC1, a, b, c, d, e, , , , , 100

質問:
 システム構造案2の方が検索は早いのでしょうか?
#一見そんな気もするのですがよくわかりません。

 格納するときも、検索するときも面倒くさいので、構造案1
にしたいのです。
98NAME IS NULL:2007/05/18(金) 19:23:26 ID:???
>>97
???日本の方???
"データベース 正規化" でググって勉強しる。
99NAME IS NULL:2007/05/18(金) 19:55:20 ID:???
>>97
とりあえず 案1で、文字列index効かせればいんでないの。
ただ、フルパス限定。 c を含む物を探すとなると途端に
使い物にならんだろね。
100NAME IS NULL:2007/05/19(土) 00:57:38 ID:dKYDsDbp
osx でプログラムをコンパイルしようとすると、

/usr/bin/ld: truncated or malformed archive: /usr/local/mysql-max-5.0.27-osx10.4-powerpc-64bit/lib/libmysqlclient.a (ranlib structures in table of contents extends past the end of the table of contents, can't load from it)

何ていわれて先に進みません。対処法をご存知のかたご教授願います。
101NAME IS NULL:2007/05/19(土) 02:15:32 ID:g2N/Bu9q
>>99
検索は以下の形だけです。
「PC1の/a/b/配下の一覧表示」

案1でPC名とファイルパスでインデックスを作成する。
like '/a/b/c/%'で検索

案2でPC名とセグメント1,2,3,4,5,…,10でインデックスを作成する
 seg1=a and seg2=b and seg3=c で検索

どっちが早いのでしょうか?
インデックスの作られ方をちょっと勉強してみましたが、案1も案2も同じようなインデックスが
出来上がるように思いました。
102NAME IS NULL:2007/05/19(土) 03:51:49 ID:???
103NAME IS NULL:2007/05/19(土) 06:00:51 ID:eFxrLNmp
explainてselectにしかつけれないの?
他の命令でインデックス使ってるか確認する時は
selectに直すしかない?
104NAME IS NULL:2007/05/19(土) 07:10:09 ID:???
selectにすればいいんでねーの。 なんでダメなん?
105NAME IS NULL:2007/05/19(土) 08:35:46 ID:dKYDsDbp
>>102

英語判らんけど、ppc-g5だとコンパイルできないって事かな。

106NAME IS NULL:2007/05/19(土) 15:09:36 ID:???
mysql3.23.58でどうあがいても文字化けしちゃうのってあります?
文字化けというより検索で他のがヒットしちゃう。
バイナリーで回避できるけど、textだと指定できないことに気づき再度悩み中。
他のサイトではバグというか日本語対応してなくて、それを回避する場合、
4.1以上にと書いてあったのですがこのとおりでしょうか?
もしその場合、3.23.58からだとやっぱり今は5に切り替えるのがベストでしょうか?
107NAME IS NULL:2007/05/19(土) 16:01:19 ID:???
>>106
mysqld 起動時の charset と格納されているデータの charset が異なるとか
108NAME IS NULL:2007/05/19(土) 16:45:44 ID:???
>107
4以下は日本語は日本語として扱われず、完全には無理っぽくて
a-zA-Z に一致するバイト列があれば強制的に変換........
という感じの記述を検索で見つけたので、
質問してみたのですが、設定がパーフェクトなら、
アップしなくてもすべてうまくいくと考えてよいということで
根本的な問題は、設定間違いと考えていいということでしょうか。
109NAME IS NULL:2007/05/19(土) 19:03:36 ID:???
>107
すんません。
ご指摘の対応で解決できました。バージョンアップしなくてすみました。
どもでした。
110NAME IS NULL:2007/05/20(日) 05:30:07 ID:2GXp1HU+
下記のテーブル名AAAがあります。担当者番号は重複しているレコードが大量にあります

レコード番号(int primary key)+++ 担当者番号(int)+++取引金額(int)+++


このようなテーブルがあった場合、担当者番号ごとに取引金額が最も多いレコード番号をselectするためにはどういうSQL文になりますか?

111NAME IS NULL:2007/05/20(日) 08:29:35 ID:???
MySQL Connector/ODBC 3.51.15
ttp://dev.mysql.com/downloads/connector/odbc/3.51.html

うちでは3.51.14は問題多くて使いものにならなかったけど
今のところ問題なし
112NAME IS NULL:2007/05/20(日) 11:00:07 ID:WPBssusO
>>110

SQLの前に日本語しっかりな。
113NAME IS NULL:2007/05/20(日) 13:36:48 ID:???
チョン?
114NAME IS NULL:2007/05/20(日) 15:00:26 ID:???
>>110
MAX() と GROUP BY を使って、2秒で出来る初歩的SQLです。
あとは努力しましょう。
115NAME IS NULL:2007/05/20(日) 23:32:21 ID:???
表の作成をしようと思いCREATEを使用したのですが、
ERROR 1046 (3D000): No database selected
と表示されてしまいます。
原因がわからないのですが誰か教えていただけないでしょうか。
116NAME IS NULL:2007/05/20(日) 23:33:37 ID:???
>>115
表の前にまずDBを作れ。
117NAME IS NULL:2007/05/20(日) 23:35:14 ID:???
データベースを選択する時には、

use データベース名;

というコマンドでいけますが、データベースの選択を解除するにはどうしたら良いでしょうか?

use none; とか use; とか色々試してみましたが、無理でした。
118NAME IS NULL:2007/05/20(日) 23:39:09 ID:???
何もデータベースを選択してない、という状態が必要なの?
119NAME IS NULL:2007/05/20(日) 23:40:40 ID:???
quitしてもう一回接続すれば?
120117:2007/05/20(日) 23:42:05 ID:???
>>118
なんとなくです

>>119
やっぱそれしかないですかね('A`)
121NAME IS NULL:2007/05/20(日) 23:42:59 ID:???
>>116
わかりました!ありがとうございます。
122NAME IS NULL:2007/05/21(月) 03:03:05 ID:???
コマンドプロントでeditでエディタが起動するけど
これってどう閉じるの?&使用用途を教えてくだされ
123NAME IS NULL:2007/05/21(月) 07:25:52 ID:???
>>122
環境変数 $EDITOR に指定したテキストエディタが起動する
\! echo $EDITOR か system echo $EDITOR で確認
標準は vi かな?

エディタでSQLを編集して保存終了してから
デリミタ(普通はセミコロン)で実行

環境変数の指定方法とか、エディタの使い方はググる
124NAME IS NULL:2007/05/21(月) 12:47:48 ID:???
>>123
ちょっとわかりました。
使い方ググってみます
125NAME IS NULL:2007/05/21(月) 14:53:52 ID:???
表の作成時の指定で 011.44.134.42 や .2 などを入力するにはどの型を指定すればよいのでしょうか。
126NAME IS NULL:2007/05/21(月) 15:10:26 ID:???
>>125
IPすか?
127NAME IS NULL:2007/05/21(月) 16:56:03 ID:???
>>125
自分なら、VARCHAR(最大文字数) にするね。
128NAME IS NULL:2007/05/21(月) 18:50:19 ID:???
俺もvarchar(15)でやってる
ipをintにする関数があった気するけど視認性下がるから
129NAME IS NULL:2007/05/21(月) 20:18:41 ID:???
みなさんありがとうございます。
こちらの勘違いで011と挿入すると表示では11になって困っていたのですが、
シングルクォーテーションで囲んでいなかっただけでした。
ご迷惑をおかけして申し訳ありませんでした。
130NAME IS NULL:2007/05/22(火) 11:52:18 ID:8/PhpwlH
ストアドプロシジャのことで質問させてください。
プロシジャの中で、まず最初にselectします。結果は複数レコードになります。
この複数のレコードをプロシジャ内の変数に一度代入して、その結果セットをさらにそのプロシジャ内で条件分岐とかしたいのですが、
結果セットを代入する変数の型っていうのは何になるのでしょうか?
131NAME IS NULL:2007/05/22(火) 21:53:17 ID:???
MySQL4.1をPHP4.3から利用してます。両方UTF-8で利用していて、ORDER BYで
並べ替えしたいのですが、日本語(ひらがな)の並びが間違って出て来ます。
降順と昇順を入れ替えると間違った並びのまま逆さになります。

同じ環境で英文字の並べ替えは問題なく動作しています。
対処法などご存知の方お願いします。
132131:2007/05/23(水) 09:54:22 ID:???
>>131
自己解決。COLUMN COLLATEをutf8_unicode_ciとしたら正常に動作しました。
133NAME IS NULL:2007/05/23(水) 11:21:47 ID:???
>>130
CURSOR以外でってこと?
134NAME IS NULL:2007/05/24(木) 15:36:16 ID:rlJddH2x
二つのテーブルに共通のフィールドがあるとして、
その共通のフィールドを手がかりに、
一方しか持っていないデータを違うテーブルからセレクトして取得するにはどうすればいいんでしょうか。
135NAME IS NULL:2007/05/24(木) 16:55:19 ID:???
>>134
join して nullを探せばどうよ。
136NAME IS NULL:2007/05/25(金) 03:20:04 ID:2/gsg6oI
>>135
調べてやってみます!!ありがとう!
137NAME IS NULL:2007/05/25(金) 15:24:22 ID:???
MySQL5.0を使っています。

区分  日付     内容
1   2007/03/01  その1
2   2007/04/05  その2
1   2007/04/06  その3
3   2007/04/26  その4
2   2007/05/09  その5

このように区分と日付をキーにしたデータの入っているテーブルから、

1   2007/04/06  その3
2   2007/05/09  その5
3   2007/04/26  その4

のように、区分ごとに最新のレコードを取得したいのですが、
どのようなクエリを書けばいいのかが分かりません。

そもそも、1回のクエリでできるものなのでしょうか?
それとも、区分の回数だけループを回して、1つずつ取得しなければいけないでしょうか?

どなたか教えてください・・・
138NAME IS NULL:2007/05/25(金) 17:55:57 ID:???
>>137
SELECT *
FROM data
WHERE (kubun, hiduke) in
(SELECT MIN(kubun), MAX(hiduke) FROM data GROUP BY kubun)
order by kubun;

実行パフォーマンスは最悪なので
データ量が多い場合は、分けてループした方がいいかも。
139NAME IS NULL:2007/05/25(金) 19:55:44 ID:???
  /'           !   ━━┓┃┃
-‐'―ニ二二二二ニ>ヽ、    ┃   ━━━━━━━━
ァ   /,,ィ=-;;,,, , ,,_ ト-、 )    ┃               ┃┃┃
'   Y  ー==j 〈,,二,゙ !  )    。                  ┛
ゝ.  {、  - ,. ヾ "^ }  } ゚ 。
   )  ,. ‘-,,'   ≦ 三
ゞ, ∧ヾ  ゝ'゚  グ    ≦ 三 ゚。 ゚
'=-/ ヽ゚ 。≧    ッ    三 ==-
/ |ヽ  \-ァ,    ド     ≧=- 。
  ! \  イレ,、    コ    >三  。゚ ・ ゚
  |   >≦`Vヾ    |   ヾ ≧
  〉 ,く 。゚ /。・イハ 、、  ヒ  `ミ 。 ゚ 。 ・
140WebProg板から誘導されてきますた:2007/05/26(土) 12:01:44 ID:WWQOXdm+
■環境情報
海外DreamHostレンタルサーバー PHP 5.2.1 & MySQL 5

■データベース情報
データベース名: test
フィールド名: date (datetime型)

という環境を使用しています。

海外サーバーのため、時差設定に苦戦しています。


SET time_zone = '+09:00';
INSERT INTO `test` ( `date` ) VALUES (NOW( ));

をSQLから実行してみたところ、とりあえずSQLからは
無事日本時間がデータベースに格納されました。

しかし、これをPHPからSQL文を送って実行しようとすると、

$sql = <<<EOS
SET time_zone = '+09:00';
INSERT INTO `test` ( `date` ) VALUES (NOW( ));
EOS;

うまく動いてくれません。。。
初心者すぎてスミマセン・・・orz
141NAME IS NULL:2007/05/26(土) 14:25:46 ID:???
>>140
その$sql変数に、代わりに select * from test を入れてちゃうと動くんだろうね?
142NAME IS NULL:2007/05/26(土) 14:42:58 ID:???
>>140
mysqliのmysqli_multi_query()関数を使えば動くようになる、てオチじゃないだろうね?
143140:2007/05/26(土) 15:26:11 ID:WWQOXdm+
$sql = "SET time_zone = '+09:00'";
mysql_query( $sql );
$sql = "INSERT INTO `test` ( `date` ) VALUES (NOW( ))";
mysql_query( $sql );

で動くようになりますた。
お騒がせしますたm(_ _")m
144NAME IS NULL:2007/05/27(日) 02:47:19 ID:???
なんか効率無視だな(w
145NAME IS NULL:2007/05/27(日) 06:12:31 ID:???
効率良いのを教えてください ><
146NAME IS NULL:2007/05/28(月) 03:14:08 ID:???
レコードの件数を調べるのにselect count(*)を使うというのが分かったのですが、
以下のようにしたら「Resource id #3」と表示されてしまいます。

$sql="select count(*) from faq";
$result=mysql_query($sql);
echo $result;

どのようにすればカウント数が表示されますか?
147NAME IS NULL:2007/05/28(月) 06:40:04 ID:???
>>146
PHPのmysql_query()の説明をよく読め
148NAME IS NULL:2007/05/29(火) 00:03:08 ID:???
そこでperlですよ
149NAME IS NULL:2007/05/29(火) 01:05:43 ID:???
>>146
あんた、いい芸人になれるわ
150NAME IS NULL:2007/05/29(火) 01:08:32 ID:pWsap/AA
レプリケーションのマスタが落ちた場合、スレーブをマスタに切り替えて
運用するには RESET SLAVE でスレーブ解除すれば良いの?
151NAME IS NULL:2007/05/29(火) 21:36:12 ID:???
有料で提供するASP(アプリケーション・サービス・プロバイダ)のバッグエンドにMySQLを利用する場合、
エンタープライズで無くても大丈夫でしょうか?
152NAME IS NULL:2007/05/29(火) 22:07:27 ID:???
そんな事を2chで聞いてるお前に問題があるな、少なくとも。
153くきくき:2007/05/29(火) 23:10:32 ID:tiIImBH4
エラー内容は、error nr.1045というものです。
環境は、XP でノートンいれてあります。だけど
スクリプト遮断は、はずしております。あと、ルータも
かましています。特に、ポートを空けるとかしていないです。
空けなくてはいけないのかな?
154NAME IS NULL:2007/05/30(水) 01:48:50 ID:???
TEXT型のカラムにunique制約を追加することは可能でしょうか?

以下のエラーが表示されます。
長さを固定してやらなければならないのでしょうかね?

#1170 - BLOB/TEXT column 'col1' used in key specification without a key length

可能であればその方法を教えてくださいませ。
155NAME IS NULL:2007/05/30(水) 08:25:59 ID:???
>>154
まずマニュアルを読むこと
ttp://dev.mysql.com/doc/refman/4.1/ja/indexes.html
156154:2007/05/30(水) 22:24:35 ID:???
>155
ありがとうございます。
長さを指定すると作成することが可能ということが分かりました。

しかし、255バイトまでしか指定できず、
256文字以降は重複チェックがされないようです。

これは、格納されている値すべてを比較の対象にすることは不可能ということでしょうか?
もし可能なのであれば、ご教授頂ければ幸いです。
157NAME IS NULL:2007/05/30(水) 23:17:54 ID:???
>>156
はい、無理です。
その代わり、カラムをSHA1()関数にかけた値を保存し、
これをUNIQUEにするのはどうでしょうか?
バッティングは非常に少ないと思います。
158154 :2007/05/31(木) 18:07:20 ID:???
>157
なるほど大変勉強になりました。
また同時にmd5はイケてない事も分かりました。
ありがとうございました!
どこかで出会う事があればお酒でもご馳走したい気持ちでいっぱいです。
159157:2007/05/31(木) 18:42:04 ID:???
>>158
私が勤務する会社でSennaというソフトの開発をやっているので、
そちらを使っていただけると大変うれしいです。
TritonnというソフトでMySQLと橋渡しができます。
160NAME IS NULL:2007/05/31(木) 20:03:01 ID:???
特定しました
161NAME IS NULL:2007/05/31(木) 20:17:33 ID:???
Sennaってレコード数が増えると途端にパフォーマンスが落ちるよね。
キーワードによってはエンジンブローしたかと思うほど時間がかかる場合があり
井出有治にも負けそうな気配。
2nd入れても変わらず・・・で、検証で捨てた経験あり。
162NAME IS NULL:2007/05/31(木) 20:20:50 ID:???
md5バッティングするってマジですか?
md5でつこうてるんだけど
どのくらいの確率でバッティングするの?
163157:2007/05/31(木) 21:38:48 ID:???
>>161
激しくスレ違いだが、たぶんメモリ不足だと思う。
あとは大きなデータベースだとパラメータ設定しないと遅い。
ま、パラメータ設定するとさらにメモリを食うわけだが…

MD5でも実用上問題ないと思う、個人的には。
164NAME IS NULL:2007/05/31(木) 23:40:19 ID:???
>>162
バントしたらホームランになっちゃった くらいの確率
165NAME IS NULL:2007/06/01(金) 06:30:54 ID:???
でも業務だと、常にホームランが求められるけどな。
バッティングしたから、おまいの口座データ壊れたじゃシャレに成らん。

メモリ増やせるくらいなら、mysqlじゃなくてオラクル使ってる余裕あると思うよ。
金無いから、mysqlってのはよくあるパターン。
166NAME IS NULL:2007/06/01(金) 10:46:49 ID:???
>>162
固定長を吐き出すダイジェスト関数でバッティングしないのを作れたら
大金持ちになれそうだ。
167NAME IS NULL:2007/06/01(金) 11:08:08 ID:/eOI7xda
syaryoテーブル
 syaryo,tantosya,seibisya
tantoテーブル
 tantoID,name

tantosya seibisya はいづれも tantoID を見てnameを出させたいです。
よろしくお願いいたします。
168167:2007/06/01(金) 11:10:31 ID:/eOI7xda
結果を
syaryo | name | name  ←整備者名
       ↑
     担当者名
です。よろしくお願いいたします。
169NAME IS NULL:2007/06/01(金) 11:40:57 ID:???
MySQLのみで、フィールド中の「AAA」という文字列のみを削除する…ってことはできるのでしょうか?
170NAME IS NULL:2007/06/01(金) 12:38:24 ID:???
>>169
MySQLの文字列関数使えば余裕で出来るよ
171NAME IS NULL:2007/06/01(金) 15:26:06 ID:???
>>168
ニホンゴワカリマスカ?
リカイニクルシミマシタガ、コンナカンジデース。

select * from syaryo s
left join tanto n1 on n1.tantoID=s.tantosya
left join tanto n2 on n2.tantoID=s.seibisya;
172167:2007/06/01(金) 16:22:32 ID:/eOI7xda
SELECT s1.syaryo,t1.name,t2.name
FROM syaryo as s1,tanto as t1,tanto as t2
where s1.tantousya = t1.tID and s1.seibisya = t2.tID

でいけました。
ありがとうございました。
173169:2007/06/01(金) 17:32:56 ID:???
>>170
ありがとうございます。
今までPerlとかスクリプト側で処理していたので、MySQLの関数は活用してませんでした。
REPLACEでできそうです(まんまの関数だった…)。
174NAME IS NULL:2007/06/02(土) 01:46:08 ID:???
phpのセッションも指定しないかぎりmd5じゃん。
そんな不確かなものの上にセッションは成り立っていたのか・・・
175NAME IS NULL:2007/06/02(土) 15:46:23 ID:???
>>174
PHPのセッションはカゲロウ山のようなものです
176NAME IS NULL:2007/06/02(土) 16:39:28 ID:???
質問です!
Fedora Core3に
MySQL-server-5.0.41-0.glibc23.i386.rpm
および関係パッケージ一式をインストールして、
無事に動作したのですが、何故か終了が出来ません。

/usr/bin/mysqladmin shutdown
を実行すると反応が返ってこなくなり、
/usr/bin/mysqladmin status
も帰ってこなくなります。

ネットで調べても類例が全くなかったのですが、
どなたか原因に心当たりがありませんでしょうか。
177NAME IS NULL:2007/06/03(日) 00:42:13 ID:???
mysqladmin pingすら帰ってこない悪寒。
178NAME IS NULL:2007/06/04(月) 09:38:07 ID:???
rpmで入れたのなら/etc/rc.d/init.d/ のスクリプトで起動・終了した方がいいんでない?
179NAME IS NULL:2007/06/04(月) 15:12:08 ID:???
質問です。
レセプションの設定をし、slave startをしているのですが、どうもmasterの方で弾いてるらしく、
ちょっと詰まっています。
一応、レセプションの設定は間違いないと思うのですが、何か引っかかるところなんぞあるんでし
ょうか?
一応、/etc/serviceでポート開放し、ファイヤーウォールの設定でもポート開放をしています。
エラーメッセージは、
Slave I/O thread: error connecting to master '[email protected]:3306':
Error: 'Host 'XXX.XXX.XXX.XXX' is not allowed to connect to this MySQL server'
errno: 1130 retry-time: 60 retries: 86400
と出ていて、masterのMySQLの方の問題だと思うのですが。
180NAME IS NULL:2007/06/04(月) 15:19:14 ID:???
レプリケーションだった orz
181NAME IS NULL:2007/06/04(月) 16:37:50 ID:???
>>179
スレーブ側のmysqlクライアントでユーザreplを指定して
マスタ側のMySQLサーバにログイン出来てる?
182NAME IS NULL:2007/06/04(月) 16:52:26 ID:???
RESありがとうございます。
まだやってませんでした。
GRANTで一度リモートログインの設定をした方が良いですよね?
今の権限はレプリケーションのみなので。
183NAME IS NULL:2007/06/04(月) 18:03:45 ID:???
自己解決しました。
結局、GRANTで管理者権限を渡し、コネクト出来るようになりました。
ただ、これだとLocal上で使うものとは言え、ちょっとザルっぽいので、GRANTで権限をある程度
絞ろうかと思います。

ではでは
184NAME IS NULL:2007/06/05(火) 03:48:22 ID:???
INSERT時にある値があればそれを、無ければauto_incrementされたNoと
同じ値を入れたいカラムがあるんですが、INSERTと同時にauto_incrementされた数値を指定するような定数等ってあるのでしょうか?
今のところ、INSERTした後にUPDATEして書き換えています。
col1|col2
1|値 又は 1
185NAME IS NULL:2007/06/05(火) 13:03:24 ID:???
>>184
> 次の AUTO_INCREMENT 値は、オートキーに使用された最高値に 1 を加えた値になる。
とい特性を信じてサブクエリで更新することは出来そうだが、サブクエリを使うぐらい
なら、updateした方が良いかも。
186NAME IS NULL:2007/06/05(火) 13:22:11 ID:???
>>184
LAST_INSERT_ID()
187NAME IS NULL:2007/06/05(火) 16:20:12 ID:???
>>186
よく嫁
188NAME IS NULL:2007/06/05(火) 22:03:14 ID:???
>>184
たぶんテーブル構造を見直した方がいいと思われるけど、
いまのままならアップデートしかないんでないの。
189184:2007/06/06(水) 12:04:56 ID:???
有難う御座います。
やり方を変えれば、SELECTする際にIFでNoかこのカラムを取ってくるようにする事は出来るのですが
基本的に更新は殆ど無く、参照が大量のためこのような感じにしました。
今のUPDATEで進めて見ます。
190NAME IS NULL:2007/06/06(水) 14:22:13 ID:IsGwhVyT
質問です。

ソートした母集団にナンバリングするためには
どうしたら良いでしょうか?
100件中、自分が何番目なのかを確認したいです。

set @temp := 0;
SELECT @temp := @temp + 1 from ...
ではなく、1SQLで完結できる方法を検討したいです。
できればテーブルにインサートする方法も使いたくありません。

同着10位が3人居ても、全員10位にする方法であれば
実装できましたが
同着10位には、それぞれ10、11、12とナンバリングしたいです。
191NAME IS NULL:2007/06/06(水) 15:24:47 ID:???
>>190
変数使ってもいいなら、こういう方法があるらしいよ。

select @rank:=@rank+1 rank, t1.*
from (select * from table1 order by col1) t1,
(select @rank:=0) t2;
192191:2007/06/06(水) 15:49:09 ID:???
あ、where句で抜き出すならもう少しだけ工夫が要るか
193NAME IS NULL:2007/06/06(水) 17:09:49 ID:???
MySQL Custerの事で聞きたいんですが、基本的にClusterの利点は負荷分散とリカバリー時の即効性
と言うことでしょうか?
例えば、DB自体の容量肥大化に関する利点というものはClusterではまかなえないのでしょうか?
194190:2007/06/06(水) 20:25:01 ID:IsGwhVyT
>191
ありがとございます。
195NAME IS NULL:2007/06/06(水) 21:58:45 ID:???
>>193
メモリが……
196NAME IS NULL:2007/06/07(木) 01:53:25 ID:???
64bitにすれば理論値は十分でしょ。
あとはメモリ積めるハードを選べばおk。
197NAME IS NULL:2007/06/07(木) 23:41:41 ID:7GQ86/Vg
板違いでしたらご指摘下さい。

VS2003を使って接続しようとすると
Host 'PC-hoge' is not allowed to connect to this MySQL server
とエラーが出ます。
MySQLは別PCですが、単に接続しようとしたPCが拒否されたと思っていますが、なぜ拒否されたのか判りません。
サーバーへの接続はIPアドレスで指定し、ユーザーは「root」パスワードはコマンドラインに最初に入力するパスワードを入れています。
根本から間違えているのでしょうか?
198NAME IS NULL:2007/06/08(金) 11:14:09 ID:???
>>197
grant って知ってる?
199NAME IS NULL:2007/06/08(金) 14:07:27 ID:BCjwMJBL
こんにちは。おそらく度素人の質問だと思うのですがお許しください。
検索してもどこにも見当たらないので・・・・・
フィールドにつくフラグでnotnullはnullを許さない。autoincは自動で数字を増やしてく、ってことはわかったのですが、それ以外のunsignedとzerofillの意味がわかりません。ご教授いただけないでしょうか?
200NAME IS NULL:2007/06/08(金) 15:14:55 ID:???
符号を保存せずに値の範囲を変えたり隙間をゼロで埋めたりっつー話じゃないの?
201NAME IS NULL:2007/06/08(金) 15:25:45 ID:BCjwMJBL
>>200
すみません、それの意味することを教えていただけないでしょうか
202NAME IS NULL:2007/06/08(金) 15:32:11 ID:???
>>201
unsignedは符号ビットが必要なくなり、数値に1ビット多く使える。
ビット表現の勉強の必要がありますね。
203NAME IS NULL:2007/06/08(金) 23:05:19 ID:BCjwMJBL
>>202
signedにすると-まで使えちゃうってことですかね?
204NAME IS NULL:2007/06/08(金) 23:06:43 ID:BCjwMJBL
わかりました^^
ゼロでまえをうめちゃうって事ですね!!!
すっきり!!!!
ありがとうございました!!!!
205NAME IS NULL:2007/06/09(土) 15:19:20 ID:???
null値を置き換えたいのですが、どのようにすれば出来るでしょうか?
データベースの中身はnullのままでいいのですが、
出力するときに別のものに置き換えたいのです。例えばハイフンなどに。
どなたかご教授お願いします。
206NAME IS NULL:2007/06/09(土) 15:42:04 ID:cEEGpgqw
>>205
ifnullやisnull関数使え
207NAME IS NULL:2007/06/09(土) 18:21:21 ID:???
>>205
ifnull, isnull, coalesce たんまり判定法はある。

そんなことより、興味があるのは、こういう人の行動パターン。
googleで「mysql null」で検索結果。
検索1件目から、ページ検索(ctrl-F)で「null」を実施。
5件目でズバリが出てきた。
今回のこの人は、最大の努力で、4件目から先は調べなかったことになる。
とりあえず、ググッたかどうか教えておくれ。
208205:2007/06/09(土) 19:12:11 ID:???
>>206, 207
昨日からグーグルで検索しまくっていますが、全然わからないのです。
nullを判定するのに isnull を使うことはわかっていたのですが、
それをどうやって置き換えるのかわからなかったのです。
質問の仕方がちょっと間違っていたようでした。

select * is null = '-'
from table

こんな感じでしょうか・・・わからないので助けてください。
209NAME IS NULL:2007/06/09(土) 19:15:30 ID:???
>>208
SQLのお勉強をもうちょっとちゃんとやりましょう。
そのSQL、文法的に間違ってるでしょうが。
210205:2007/06/09(土) 19:18:44 ID:???
>>209
手元にmaysqlの本が一冊あります。
しかしどうしてもわからないのです。
勉強するにも期限は明日、仕事で必要なためどうしても解法が欲しいのです。
助けるとおもってお情けをお願いします。
211NAME IS NULL:2007/06/09(土) 19:25:23 ID:???
>>210
自分の仕事を他人に丸投げですか・・・
あきれて物が言えない
212NAME IS NULL:2007/06/09(土) 19:55:48 ID:???
select * is null = '-'

うむ。これを見たら気の毒になってきた。
ひょっとして、ネタか。

つーか、ifnull使えと答えを書いてくれている。
isnullより、ifnull、coalesceを使え。
213NAME IS NULL:2007/06/09(土) 22:01:02 ID:???
「SELECT datetime FROM test_;」 のようなSQL文を発行すると、「2007-06-09 21:59:20」 のようなデータが返って来ます。

これを、「2007/06/09 21:59:20」 のような形式にしたいのですが、良い方法は無いでしょうか?

教えていただけると幸いです。
214NAME IS NULL:2007/06/09(土) 22:14:49 ID:???
>>213
DATE_FORMAT()
215NAME IS NULL:2007/06/09(土) 22:20:25 ID:???
初歩的な質問で申し訳ありません。

氏名_c | 体重_c |
------+-------+
山田 |  50  |
田中  |   30 |
鈴木 |  45  |

こんな表 (体重_t) があったとします。

一番重い体重を探したい時には、

SELECT MAX(体重_c) FROM 体重_t;

でいけますが、

一番体重が重い人の氏名 (この場合 "山田") を求めたい場合には、
どういうSQL文を発行すればいいんでしょうか?
216NAME IS NULL:2007/06/09(土) 22:28:41 ID:???
>>215
サブクエリ
217213:2007/06/09(土) 22:38:10 ID:???
>>214
ありがとうございます。

SELECT DATE_FORMAT(datetime_c, '%Y/%m/%d %H:%i:%S') as datetime FROM table_t; でいけました。
218NAME IS NULL:2007/06/09(土) 23:06:02 ID:vL4ozbLP
MySQL + PHP で掲示板を作っているのですが、分からないことがあります。

MySQLのSQL文中にPHPの変数を入れたいです。
こんなカンジ↓

$sql = "select count(*) from post2 where tid=".$row["id"];

これで実行してみるとResource id #4 Resource id #5 Resource id #6...
といった結果が得られて思うような結果(掲示板のレス数)が得られません。

どのようにすればいいか教えてください。お願いします。
219NAME IS NULL:2007/06/10(日) 00:14:07 ID:???
220218:2007/06/10(日) 00:22:42 ID:???
>>219
ありがとう・・・そっちに逝って来ます
221NAME IS NULL:2007/06/10(日) 00:25:47 ID:???
次のようなSQL文があるとします。

SELECT
 (
  SELECT COUNT(name_c)
 FROM foo_t;
 )
  as name_c,
 (
  SELECT COUNT(message_c)
 FROM foo_t;
 )
  as message_c
FROM hoge_t

【質問1】
このようにカラム名の部分に SELECT 文をいれる方法のことを何と呼ぶのでしょうか? (副問い合わせ?)

【質問2】
SELECT 文の中の SELECT 文の部分が2つありますが、両方とも同じテーブル foo_t を参照しています。
これだと効率悪いので、これをまとめて書くことはできないでしょうか?

例えば、

SELECT
 (
  SELECT COUNT(name_c), COUNT(message_c)
 FROM foo_t;
 )
  as name_c, as message_c
FROM hoge_t

みたいに書きたいのですが、エラーになってしまいます。
222NAME IS NULL:2007/06/10(日) 03:14:26 ID:???
>215
体重でorder byして1件目とかどう?
223NAME IS NULL:2007/06/10(日) 13:57:23 ID:???
>>221
SELECT COUNT(name_c), COUNT(message_c) FROM foo_t;
じゃ、だめなの?

221のSQLは、hoge_tのレコード数 × 2つの数字を出力させるだけの意味なしSQL。
というか、へんなところにセミコロンがあるんでSQLですらない。
本での勉強や掲示板への質問も良いけど、自分でコマンド打たんと。
224221:2007/06/10(日) 15:27:27 ID:???
>>223
回答ありがとうございます。
実際に使う時には、hoge_t の 5〜6個からデータを抜き出したいので、
"FROM hoge_t" の部分が必要だったんです。

もうちょっと色々試して勉強してみます。
ありがとうございました。
225NAME IS NULL:2007/06/10(日) 18:49:31 ID:???
すみません、nullを別なモノに置き換えて出力したいのですが、
次のようにやってもうまくいきません。

select coalesce(*, 0)
from table;

*が、ひとつの列ならうまくいくのですが、すべてを対象とした*だとエラーになります。
どうやればうまくいくのでしょうか?
226NAME IS NULL:2007/06/10(日) 19:18:22 ID:???
MySql初めていじったんだが
insert文で複数レコード挿入できんのかよ?
気持ちわるい・・
insert into table values(), (), ()・・・
227NAME IS NULL:2007/06/10(日) 19:18:56 ID:???
>>225
都合よく考えないで、coalesceとは何か?というのを調べて。
調べてMySQLの仕組みに沿ったSQLを作ってください。

228NAME IS NULL:2007/06/10(日) 19:27:25 ID:???
なぜここの連中は解法をひとつ教えれば済むことに
一々難癖をつけて答えないのか?
一度答えを教えてくれさえすればすぐに質問者は消えるし、みんなにとって有意義であることは間違いない。
文句だけ言って何も答えない輩は立ち去って欲しい。
229NAME IS NULL:2007/06/10(日) 19:27:55 ID:???
>>226
気持ちよくなる前に抜けた方がよい。
漏れは既に抜け出せん。
insert & selectを union allして繋げるなんて嫌だ。
230NAME IS NULL:2007/06/10(日) 19:37:13 ID:???
>>226
バルクインサート、サポートされてなかった?
231NAME IS NULL:2007/06/10(日) 20:01:24 ID:???
>>228
なんで人の仕事の解法を手取り足取り丁寧に教えてやらなきゃならないんだ。
上のレスをちゃんと見返せば解法のヒントが書いてあるというのに。
それを読もうともせずに、「とっとと答えだけ教えろよ」的な
ことを無遠慮に言う奴こそ立ち去って欲しい。
232NAME IS NULL:2007/06/10(日) 20:17:05 ID:???
結局、辞書代わりなのさ。俺らは。訊かれたら答えてりゃ良いんだよ。
どうせ、質問に答えて虚栄心を満たしたいだけなんだろう。
神!とか言われたいんだろう。俺らは。      
Oracleは知らないんだろ?
ちゃいまっせ。
せっせ。
233NAME IS NULL:2007/06/11(月) 00:08:11 ID:???
>>228
教えてるジャン。親切に。 つーか、質問するときは
あらかじめ自分で答えを考えておいて YesかNoで
答えられるようにするか、 ヒントだけもらえるように
工夫するか のどっちかなんだよ。
234NAME IS NULL:2007/06/11(月) 00:39:44 ID:???
答えがわかっていればそのままズバリ言えば済む問題
わかっていても言わないのは色々なものが小さい
1.人間的に小さい
2.器量が小さい
3.声が小さい
4.ティムポが小さい
5.視野も小さい
ほかなんかある?
235NAME IS NULL:2007/06/11(月) 02:47:20 ID:???
>>234
簡単に答えだけを教えてあげるような人は
相手を思いやる心、成長を願う心 が小さいかな。
ちょっとしたきっかけを与えるに留めるのが
人間的に一番大きい人
236NAME IS NULL:2007/06/11(月) 02:48:56 ID:???
googleで最初の数ページに答が出てくるような
それでいて それだけでは決して全ての解答にはならない
そんなレスが一番もらって嬉しいし楽しい
237NAME IS NULL:2007/06/11(月) 03:43:43 ID:???
俺の場合、その日の気分で

ヒントを教える時とぐぐれかすを使い分けてる。
238NAME IS NULL:2007/06/11(月) 03:56:40 ID:???
俺の場合、聞かれてもないのに教えまくる
239NAME IS NULL:2007/06/11(月) 05:22:08 ID:???
小銭をくれよ、という見知らぬ人に会った気分。
で、断ったら捨て台詞を言われたときの気分。>>234
240NAME IS NULL:2007/06/11(月) 06:11:39 ID:???
>>239 わかる気がする。

小銭を持っていればそのままズバリ渡せば済む問題
持っていても渡さないのは色々なものが小さい
1.人間的に小さい
2.器量が小さい
3.声が小さい
4.ティムポが小さい
5.視野も小さい
ほかなんかある?

きっと>>234は街中で寄付しまくりなんだろうな。
241NAME IS NULL:2007/06/11(月) 06:55:07 ID:???
盛り上がってる、
と思ったら、これかい。
242NAME IS NULL:2007/06/11(月) 08:53:31 ID:???
「よお、おっさんちょっと小銭恵んでくんね?」
「いや、ちょっと持ち合わせが無い。金ならそこでバイトを募集している。働けば小銭くらいにはなるぞ。」
「そんなタリーことやってられるかよ。なんだよ。このケチ、貧乏人。死んじまえ!」
まあ、こんなところか?

243NAME IS NULL:2007/06/11(月) 09:04:38 ID:???
>>242
おっさんの最初の台詞はいらないよ。
244NAME IS NULL:2007/06/11(月) 09:53:19 ID:???
そのおっさんが、この後オヤジ狩りに合おうとは!
245NAME IS NULL:2007/06/11(月) 10:27:52 ID:???
>>244
そのおっさんが空手の有段者だったとは!・・・・ってつまらん。

ところであるところにMySQLは5000万件でも大丈夫って書いてあったけど、
そんな実績あるのかいな?

246NAME IS NULL:2007/06/11(月) 14:54:51 ID:???
>>245
んなもんいくらでもあるだろ
247NAME IS NULL:2007/06/11(月) 18:35:01 ID:???
>>225
coalesceでnullになり得るカラムを1つずつ設定するのが正解だが、coalesceは
スペルが難しいし(関係ない)カラムの初期値を設定して既存のnullを更新しちゃうとか、
caseを使うとかはどうか?
248NAME IS NULL:2007/06/11(月) 19:11:21 ID:???
> update config set value='aa' where key='XXXXXXXXXX';
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 'key='XXXXXXXXXX'' at line 1

これってMySQLのバグですか?

mysql> desc config;
+-------------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------------+--------------+------+-----+---------+-------+
| key | varchar(255) | NO | PRI | | |
| value | text | NO | | | |
| description | varchar(255) | NO | | | |
+-------------+--------------+------+-----+---------+-------+

OS: Fedora Core
MySQL: 5.0.37-log Source distribution
Java: 1.5.0_11
Tomcat: 5.5.23
249248:2007/06/11(月) 19:36:00 ID:???
ひとまず代替案できりぬけました。
key=

CONVERT( `config`.`key` USING utf8 ) =
とすれば大丈夫でした。

なぜだかわかりませんが、hibernateを使っているのでどうにもならないんでSQLで実行するようにしました。
ありがとうございました。
250NAME IS NULL:2007/06/11(月) 23:55:25 ID:???
単に key を `key` と書けば良くね?
251NAME IS NULL:2007/06/11(月) 23:56:47 ID:???
>>250
俺も思った
単にkeyが予約語なだけじゃないのかね?
252NAME IS NULL:2007/06/12(火) 21:20:58 ID:gRZ6KvS4
質問スレが見当たらないので、こちらに書かせて頂きます。
間違えて、テーブルをdropしてしまったのですが、
ib_logfile0、ib_logfile1、ibdata1等から、
テーブルを復旧する方法があれば、ご教授頂けないでしょうか?
宜しくお願いします。
253NAME IS NULL:2007/06/13(水) 01:48:06 ID:???
MySQL 5.0.41
Tomcat5.5.23
Connector/J 3.0.6
上記の環境なのですが、TomcatでInitialContextからlookupすると下記のエラーが発生します。

Server connection failure during transaction. Attemtped reconnect 3 times. Giving up.

別のマシンに同環境・同設定で問題無く接続とDB操作ができるのですが、
サーバマシンでは何故か上記のエラーが出てしまいます。
どなたか回避策をご存知ではないでしょうか?
254NAME IS NULL:2007/06/13(水) 02:54:49 ID:???
           _-─_- 、
       // ___vヘ
      / i'  '´ i   i   i V' ヘ-‐勹  `ヽ
       | i/i  l   l   l  v小 ̄  `ヽ '
       | i! l  l _L -≦ i! |_ハ       'ようわからんのぅ
   仁二| l斗‐<    == j从 }}__     わからぬことだらけじゃ
     !| lヘ z≠        ムィ'7⌒丶、
.     j从乂ヽ      _  /| | |     `丶、
    / r<  ̄|\__'´_ ィ | | |_      〉
    / l/  \| | ー_ 二「`|只   ̄〉   /
    / /   , 「`| ̄      | ト、 ヽ. /  , ′
.   / /   /-| ト、      | |'^ヽ ∨   /     __
  / /   /丶| l \_,ニ-‐'j乂  V   'ー¬二 ̄  / ̄
. / /   /   从ハ、 \       /  /   / _ 二7
/ /   /     /\  \   /  〈 \/ ̄   _/
255NAME IS NULL:2007/06/13(水) 06:46:02 ID:???
>>252
mysqlbinlog
256252:2007/06/13(水) 09:22:32 ID:???
>>255
ありがとうございます。
「〜-bin.xxxxx」と言う形のバイナリログは作っておらず、
mysqlbinlogでは不可能でした…
257NAME IS NULL:2007/06/13(水) 11:26:41 ID:???
>>252
データディレクトリにあった "テーブル名.*" を削除ファイルを復活させるソフト
とかで救い出すしかないな。
削除後、ファイルに書き込みが続くと削除領域が食いつぶされて復活できない
ケースが多いが。
258NAME IS NULL:2007/06/13(水) 11:30:02 ID:???
>>253
iptablesかな・・
259257:2007/06/13(水) 12:08:26 ID:???
>>257
ありがとうございます。
復元ソフトの体験版を使用して試してみようと思います。
260252:2007/06/13(水) 12:16:21 ID:???
すみません、名前間違いました。
252です。
261252:2007/06/13(水) 13:08:25 ID:???
試しに、InnoDBでテーブルを作成、
テーブル名.frmをコピーし、テーブルをdrop、
その後コピーしたfrmファイルを戻し、
select文を実行したところ、
ibdファイルが開けないと言われました。
frmのコピーを行った際には、
ibdファイルは存在しなかったのですが…

どうすれば正常に元に戻るのでしょうか?
262NAME IS NULL:2007/06/13(水) 15:44:49 ID:???
>>261
そりゃ、innodb_file_per_tableがOFFになってるから。
263NAME IS NULL:2007/06/13(水) 16:10:51 ID:???
>>261
つか、frmとibdだけじゃ、むりだろ。大元のibdataのバックアップ戻しが必要。
264248:2007/06/13(水) 16:33:31 ID:???
>>250>>251
確かにその通りでした。

設定ファイルにカラム名を`key`として偽装すれば対応できました。
<id name="key" column="`key`" type="string" >

ありがとうございました。
265NAME IS NULL:2007/06/13(水) 19:45:17 ID:???
select `hoge` FROM `hoge_tbl`;

この時、`hoge`の値が 「あ」 じゃないときは 「ほげ」を返して欲しいのですがどのようにすればいいでしょうか?
266NAME IS NULL:2007/06/13(水) 20:04:41 ID:???
>>265
select `hoge` FROM `hoge_tbl` where ○○○○;
○○○○のところは自分で考えてね。
267NAME IS NULL:2007/06/14(木) 00:01:00 ID:???
2次元のテーブルの要素を1セルずつ持っているテーブルがあります。
構造は、id int, col int, value int; の3つのカラムを持っています。
idは行番号、colは列番号で、valueには、その行・列の値が入っています。

このテーブルから、

id, value0, value1, value2, ... , valueN (Nはcolの最大値) というように、
2次元のテーブルを素早く得たいときの定石があれば、教えていただけませんか?

Nの値を類推して、多重に join をするぐらいしか思いつきませんので、
えらい人おしえてください。
268253:2007/06/14(木) 01:06:47 ID:???
FW関係を見ても問題無さそうだったので、Connectorのバージョンを上げさせてもらいました。
Connector/J 3.0.17にしたら問題無く接続できました。
同環境別PCだと駄目な理由が分かりませんが、とりあえず回避できたのでこれで良しとします。
スレ汚し申し訳ありませんでした。
269NAME IS NULL:2007/06/14(木) 05:36:53 ID:???
>>267
>2次元のテーブルを素早く得たいと

1,A,B,C
2,E,F,G
3,H,I,J

つー並びで表示したいってこと?
手法によってはバージョン縛りあり。
270NAME IS NULL:2007/06/14(木) 07:40:22 ID:???
>>265
select if(hoge='あ',hoge,'ほげ') from hoge_tbl;
271NAME IS NULL:2007/06/14(木) 08:21:54 ID:???
>>269
はい、
id, col, value
1, 1, 10
1, 2, 20
1, 4, 30
2, 2, 40

というデータから

id, value1, value2, value3, value4
1, 10, 20, null, 30
2, null, 40, null, null

というテーブルを得たいんです。
( 歯抜けの部分は null でも 0 でも良いです。 )
バージョンは、MySQL 5.0.22 を使っていますが、
もっと新しい物に良い手法があるなら、変えても良いです。
272NAME IS NULL:2007/06/14(木) 09:01:29 ID:???
>>271
nullありなら、言う通りで結合しなきゃむり。
無いものはselectできない。

存在するデータだけでよいならgroup_concatで括る。

>歯抜けの部分は null でも 0 でも良いです。
なら、自分でデータを補完する仕組みを作る。
もしくは呼び出しアプリ側で補完。
273NAME IS NULL:2007/06/14(木) 12:02:11 ID:???
>>272
かなり希望に近いです。
なんとか歯抜けを処理できないかな。

昨日5.1の英語マニュアルを読んでいたら、
5.1の日本語マニュアルがまだ完全ではないものの公開されていました。
これまで 4.1 しか日本語になってなかったので、これはうれしいですね。
274NAME IS NULL:2007/06/14(木) 12:05:02 ID:SdR9kA2a
>>272
select id,GROUP_CONCAT(CONCAT(col,':',value) ORDER BY col) from table group by id;
こんなかんじでデータを取得した後、クライアントで分解すれば、なんとかなりますね。
ありがとうございました。
275NAME IS NULL:2007/06/14(木) 13:22:24 ID:???
>>274
一応解決っぽいんですけど、GROUP_CONCAT でなく、
create table <name> as select 〜〜〜
って形で2次元tableを作る方法があれば、引き続きお願いします。
276NAME IS NULL:2007/06/14(木) 14:02:58 ID:???
で、2次元テーブルにしないといけないわけ?
どうせアプリで取り込んでから、その様な処理や
表示するわけでしょ?
別に1次元縦並びで、idでソートしてすりゃいいじゃん。
277NAME IS NULL:2007/06/14(木) 14:12:35 ID:SdR9kA2a
>>276
もちろんそれでもいいのですが、SQL内で view を定義できたりすると、
より便利なので、できるとうれしいです。
そういう技があれば知っておきたいですし。

もちろん、group_concat でも表示などには困らないし、とても感謝しています。
278NAME IS NULL:2007/06/14(木) 14:25:41 ID:???
>>275
結局、selectするんだから、nullを入れなければならんしょ。

select id,max(c1),max(c2),max(c3),max(c4) from
(select id,if(col=1,val,null)c1,if(col=2,val,null)c2,if(col=3,val,null)c3,if(col=4,val,null)c4 from t)t
group by id;

けどさ。
むりくり、SQLでやるより、アプリ側でやったほうが絶対的にはやい。
上記のSQL(ひどいけど)をexplainしてみたら、ひっくりかえる。
所詮DBは入れ物なんだから、出し入れが速ければよいと思う。
279NAME IS NULL:2007/06/14(木) 14:28:07 ID:???
>>278
>でもさ
他の人が指摘してたね。
知識と実践は異なるから、理解できる。
スマソ。
280269:2007/06/14(木) 15:51:57 ID:???
>>278
はい、今の実装では必要はないのですが、
こういう要求は結構多いので、なにか定石的な技があれば知りたいな、とおもったわけです。
あと、何度が sageるの忘れてました。すみません。
281NAME IS NULL:2007/06/14(木) 22:11:08 ID:???
>>280
アプリ側で対応が定石じゃね?
282NAME IS NULL:2007/06/15(金) 06:42:28 ID:???
答えだけ求める香具師は有料サポートでも使えばいいじゃん。
無料で訊いてるくせに、答える内容の文句言うな。
283NAME IS NULL:2007/06/15(金) 10:10:13 ID:???
>>280
技とかそんなのからいきなり入ったって…。

これはそもそもが、そんな表を念頭に置いてないテーブルを
無理矢理そうした所で、スピードも遅いし技術的に意味もない。
やりたいのであれば、テーブル設計から全て変更して、
SQL時点で負荷をかけない様にするべき。
284NAME IS NULL:2007/06/15(金) 11:35:31 ID:???
結構上司が帳票を出せ、とか言ってくるんじゃないの?
不得手な人はデータベース≒エクセルのセルみたく考えているから、こういう要求も実は多い。
そういう職場に居る不幸な人をあんまり責めるんぢゃないよw
特に280は、マニュアルも読んでいるみたいだし、頭空っぽ宿題おせーて君とは違うっぽ。
285NAME IS NULL:2007/06/16(土) 00:21:10 ID:???
むしろ、そういう要求をうまく処理するのがDBで飯食ってるプロの腕の見せ所だと思うが。
出来ませんって言うだけなら、素人でも出来るよ。

表作りながら、こういう要求来そうだなとイメージできないとプロとは言えないよ。

mysqlはオープンソースだから、力技でソースに機能追加も出来る訳だし。
286NAME IS NULL:2007/06/16(土) 02:05:04 ID:???
API側で最適化するような奴にDB屋さんを自称して欲くないね。
287NAME IS NULL:2007/06/16(土) 07:50:14 ID:???
俺は272,278,279のヒドイSQLを書いた者ですけど。
285,286なら、今回の271,275の疑問をどのようなSQLを書いて解消しますか?

288NAME IS NULL:2007/06/16(土) 10:26:04 ID:???
見せてもらおうか、プロな腕の表作りとやらを
289NAME IS NULL:2007/06/16(土) 11:18:58 ID:???
APIというより、mysqld内部な。ヲレSQLにして組み込んでもいい訳だし。
create2dとかつくればよろし。
290NAME IS NULL:2007/06/16(土) 11:28:56 ID:???
で、「API側で最適化するような奴」って何?
291NAME IS NULL:2007/06/17(日) 11:25:00 ID:7X42UV05
いろいろとググってみたのですが、見つからなかったので質問します。

WHERE節で「@(アットマーク)」を使用したいのですが、どのようにしたらいいのでしょうか?

具体的には、テーブルからメールアドレスが該当するデータを抽出したいのです。

SELECT * FROM テーブル名 WHERE email = '[email protected]'

のようなSQL文で試したのですが、どうも「@」が入っていると上手く抽出できないようです。

基本的なことなのかも知れませんが、「@」や「アットマーク」で検索しても、求める情報にめぐり合えませんでした。orz
よろしくお願いします。
292NAME IS NULL:2007/06/17(日) 11:38:48 ID:???
>>291
当方普通に結果を選択できますが
WindowsXP + MySQL5.0.37

select * from テーブル名
を行った結果、本当にemailフィールドに文字列 「[email protected]」が入ってる?
293NAME IS NULL:2007/06/17(日) 13:41:37 ID:???
>>292
お返事ありがとうございます。
きちんと入っているのですが、抽出できませんでした。

XSASを使ってローカルで試したのですが、環境は
WindowsXP
Apache updated to 2.0.54;
MySQL updated to 4.0.26;
PHP updated to 4.3.11;

です。

使用するサーバで試したところ、無事に抽出できましたので、とりあえずは解決というか、何と言うか。
294NAME IS NULL:2007/06/17(日) 16:33:04 ID:???
phpmyadminでrootユーザーでのログインを禁止したいのですが
そのような設定は可能でしょうか?
295NAME IS NULL:2007/06/17(日) 18:05:16 ID:???
>>294
君の質問文よか、検索ワードの方が短い。
「phpmyadmin rootユーザー ログイン 禁止」
さあ、ググレ。
296NAME IS NULL:2007/06/17(日) 18:29:57 ID:???
mysqlヴァージョン5でストアードプロシージャ一覧を見る方法
を教えてください
297NAME IS NULL:2007/06/17(日) 18:47:24 ID:???
>>296
そういうのはmysqlデータベースの表に格納されている。
select type,name from mysql.proc;
298NAME IS NULL:2007/06/17(日) 19:01:53 ID:???
ありがとうごさいます↑
299NAME IS NULL:2007/06/17(日) 23:05:02 ID:???
>>298
SHOW PROCEDURE STATUS;
SHOW FUNCTION STATUS;
こちらの方が一般的らしい。
300NAME IS NULL:2007/06/18(月) 23:10:47 ID:???
>>287
私の何気ない書き込みが波紋を広げてしまいました。 m(_ _)m
2chらしい精神論もいいのですが、私も具体的なテクニックが聞きたかったです。
(emacsスレみたいな雰囲気になるとイイですね。)

仕事でさわり始めたSQLですが、少し慣れてくるととても奥が深いですね。
プロのみなさんには当たり前のことかもしれませんが、
クエリやキーなどのちょっとした工夫で性能が劇的に上がったり、
フロントエンドの大幅な省力化が出来たりと、感動の連続です。
301NAME IS NULL:2007/06/19(火) 11:45:08 ID:???
>>300
で、結局どうやった?
302NAME IS NULL:2007/06/19(火) 16:25:09 ID:???
>>301
group_concat 作戦を使いました。
仕事の合間にいろいろ調べてますが、今のところこれ以上のTIPSは見つかりませんねー。

全然関係ないけど、MySQL 5.1 の partitioning がなかなかおもしろそう。
はやく5.1の安定リリースがでないかな。
303NAME IS NULL:2007/06/19(火) 17:05:36 ID:???
>>302
278だが、俺の書いたNULLを入れられるSQLの方はどう?

まとめたやつ。

select id,
max(if(col=1,val,null))c1,
max(if(col=2,val,null))c2,
max(if(col=3,val,null))c3,
max(if(col=4,val,null))c4
from t group by id;

こいつをcreate and select

mysql> create temporary table temp_t
-> as
-> select id,
-> max(if(col=1,val,null))c1,
-> max(if(col=2,val,null))c2,
-> max(if(col=3,val,null))c3,
-> max(if(col=4,val,null))c4
-> from t group by id;
Query OK, 2 rows affected (0.16 sec)
レコード数: 2 重複数: 0 Warnings: 0

mysql> select * from temp_t;
+------+------+------+------+------+
| id | c1 | c2 | c3 | c4 |
+------+------+------+------+------+
| 1 | 10 | 20 | NULL | 30 |
| 2 | NULL | 40 | NULL | NULL |
+------+------+------+------+------+
2 rows in set (0.00 sec)
304NAME IS NULL:2007/06/19(火) 19:42:23 ID:???
でた!テンポラリ攻撃!
305NAME IS NULL:2007/06/19(火) 20:03:30 ID:???
>>304
めんどくせぇな。
275の質問があって、303があるんだよ。
temporaryにしたのは、俺がdropコマンド打たなくてもすむだろ。
drop table temp_t;
ココで書いちまったじゃねぇか。
306NAME IS NULL:2007/06/19(火) 22:20:21 ID:???
bind-address 設定するのって常識か?
307302:2007/06/20(水) 00:48:36 ID:???
>>303
colの最大値を知った上でクエリを作らないといけないけど、
出力形式は理想の形です!
数十万しかデータがないので、呼び出しもそれほどかかりませんし。
次の設計の時は提案してみようかな。
( えらい同僚に怒られるかもしれないけど、そんなの平気! )
308NAME IS NULL:2007/06/20(水) 03:03:47 ID:???
見える、見えるぞ! 1ヶ月後、その同僚がここでそのやりかたを質問しているレスが!
309NAME IS NULL:2007/06/20(水) 06:47:08 ID:???
偉いのに同僚?

同僚が変な表を作って困っています。どうやって辞めさせればいいでしょうか?
負荷がかかるから辞めろと採算逝っても訊いてくれません。orz
って感じ?
310NAME IS NULL:2007/06/20(水) 07:07:23 ID:???
>>303
sum(if(col=0,value,0))
にすると、null じゃなく 0 で埋められますね。
なかなかイイ!
311NAME IS NULL:2007/06/20(水) 08:52:06 ID:???
>>310
最初の用件>>271がNULLを埋めたい、つーことだった。でnull。
俺の考えじゃないよ。
312NAME IS NULL:2007/06/20(水) 22:33:01 ID:???
MySQLのコマンドラインクライアントからなら問題無くUPDATEできるのですが、
TOMCAT5.5とコネクタ5を使ってUPDATEしようとしてもUPDATEされません。
SELECTは出来ているのですが、、、
何か設定とか必要でしょうか?
313312:2007/06/20(水) 22:35:34 ID:???
すいません、解決しましたorz
誰かがcontext.xmlにdefaultAutoCommitをfalseにしてました。。。
スレ汚し失礼しました。
314NAME IS NULL:2007/06/21(木) 12:00:03 ID:???
使わなくなったカラムは削除するべきですか?
それとも使わなくなったものは削除フラグだけたてとくべきですか?
データ削除した時に番号に穴があくのが気になります。
315NAME IS NULL:2007/06/21(木) 12:23:34 ID:???
復元する必要が無ければ削除
316NAME IS NULL:2007/06/21(木) 13:45:01 ID:???
>>314
質問1: カラムとロウ、列と行を言い(書き)間違えてない?
質問2: 番号に穴があくとなんか不都合でもあるの?
317NAME IS NULL:2007/06/21(木) 13:58:28 ID:/r3UPCk3
レプリケーションに関して質問です。

1. データディレクトリごとバックアップ
2. マスタから特定のテーブルをtruncate
3. バックアップからリストア(データディレクトリにバックアップを上書き)

この状態だとマスタは正常にリストアされますが、スレーブ側で
truncateしたテーブルがないとエラーが出ます
マスタ側でtruncateしたテーブルをdropして再作成すると直るんですが、
良いリストア方法はないでしょうか?

データ量が多いので、hotcopyやmysqldumpは使えないです。
318NAME IS NULL:2007/06/21(木) 15:11:54 ID:???
>>317
reset slave
319NAME IS NULL:2007/06/21(木) 16:06:15 ID:???
reset slaveだと全体のリカバリになってしまいますよね。
他にやるとしたらやはりbinlogから手動復旧しかないのでしょうか。
320NAME IS NULL:2007/06/21(木) 16:34:50 ID:???
>>317
3の後、スレーブ側でのリストアを行わないのは何故でしょうか?

ちなみにバージョンと下記パラメータ設定値を教えてください。
innodb_support_xa
sync_binlog
innodb_safe_binlog
321NAME IS NULL:2007/06/21(木) 17:10:06 ID:yai2bY76
質問です。

商品のマスタテーブル
id name
1  大根
2  人参
3  豆腐



商品に関するキーワードテーブル(それぞれのレコード数は非固定)
id keyword
1  野菜
1  国産
2  外国産
3  特価
3  国産大豆使用
3  健康

があり、ユーザがWEBサイトにて半角スペース区切りで入力した複数のキーワードに
and検索で完全一致した結果を表示したいのですが、上手いSQLが思いつかず悩んでいます。

皆さんならどうされますか?
322NAME IS NULL:2007/06/21(木) 17:17:25 ID:???
>>321
条件数分のサブクエリでも連鎖させときなさい
323NAME IS NULL:2007/06/21(木) 17:30:46 ID:???
ヒット数と入力キーワードの総数を比較するとかどうかしら?
324NAME IS NULL:2007/06/21(木) 17:45:44 ID:yai2bY76
>>322
絞り込んで、絞り込んで、という感じですね。
参考になります。

>>323
なるほど、or検索でヒットしたレコードをgroup by idにしてcount(id)すると。
SQLがシンプルでよさげです。


さっそく試してみます。ありがとうございました。
325317:2007/06/21(木) 18:09:59 ID:???
>320
すいません抜けてましたが、3の後にスレーブで「テーブルがないよ」的な
エラーがでるので、skip_counter+1してます。

バージョンは4.1(myisam)なので下記パラメータのみ設定してます。
sync_binlog = 0 #速度優先なので

やりたいことは、1テーブルのみデータ更新に失敗した場合、迅速に
リストアする方法が知りたいです。(スレーブ側も同期を取りたい)
326NAME IS NULL:2007/06/21(木) 22:19:07 ID:???
slave側にもマスタの全データを入れて CHANGE MASTER TO から設定して
やんないと出来なくないか。
327NAME IS NULL:2007/06/22(金) 01:42:53 ID:???
>>325
知っているかもしれんが、http://www.mysql.gr.jp/
場末の掲示板でするような質問でないかもしれん。
由緒正しいMySQL掲示板へ行って質問しなおしたほうがよいかも。
ちゃんと名乗るんだでw
328NAME IS NULL:2007/06/22(金) 02:01:24 ID:???
そして何よりも 速さが足りない
329NAME IS NULL:2007/06/24(日) 08:57:16 ID:???
萌えすきゅーえる
330NAME IS NULL:2007/06/24(日) 16:05:52 ID:???
phpMyAdmin と GUI Tools両方ともインスコしてみたんだけどさ、
MyAdminの方がいいとこってなに? ブラウザで使えるってことだけ?
331NAME IS NULL:2007/06/24(日) 16:37:35 ID:???
GUI ToolsはWin限定じゃん。
332NAME IS NULL:2007/06/24(日) 18:01:45 ID:???
>>330
phpMyAdminとQueryBrowser(以下QB)の比較ってこと?

phpMyAdminの方が表定義など変更がちょっとだけ楽だな。
例えば、フィールドタイプなどを変更するときに、Typeのリストが出るので選ぶことができる。
一方、QBの方はリストは出ない。

QBは、日本語表示に弱い。
SQLに日本語は表示することはできるけど、なんか見づらい。
経験則だけど、日本語あり(カラム名でない)のSQLを書いていると突然落ちたりする。
それは、一回や二回でない。
phpの方があまり日本語で困ったことはないかな。
333NAME IS NULL:2007/06/24(日) 18:52:52 ID:???
セマフォって何ですか?
334NAME IS NULL:2007/06/24(日) 19:08:00 ID:???
おまえのかぁちゃんセーマーフォー
335NAME IS NULL:2007/06/25(月) 03:43:03 ID:???
PerlかPythonかRubyか、PHP以外で書かれたphpMyAdminみたいなのありますか?
336NAME IS NULL:2007/06/25(月) 04:40:57 ID:???
クライアントが Windows でサーバが Debian だと
コネクション貼るだけだったりクエリを叩くだけで数秒かかります
(クエリの実行時間は数ミリ秒で完了)
サーバを Windows にすると即応答が返ってきます

Debian で動作している SSH 等の接続の応答は問題なしです
同じ現象の方っています?

Windows - Query Browser 1.2.12
Debian - MySqlServer 5.0.32
Windows - MySqlServer 5.0.41
337NAME IS NULL:2007/06/25(月) 09:34:03 ID:Zjd7F7GG
質問です。
1件の得意先情報を抽出するために得意先テーブルと
9つのテーブルと結合する必要があります。
PHPでプログラムを書いています。

1、left join等を使用し9つのテーブルを結合し一つのsql文で結果を得る方法
2、まず、得意先テーブルの値を抽出し、その結果を元に他の9つのsql文にて他テーブルの値を得る方法

のどちらがパフォーマンス的にいいでしょうか?
よろしくお願いいたします。
338NAME IS NULL:2007/06/25(月) 12:25:45 ID:+ngh1xNX
再起動の方法について教えてください。
Redhat使っているんですが。
/etc/rc.d/init.d/
にmysqlがないんです。
こういう場合はどこから再起動かけるんでしょうか?あとなぜ無いんでしょうか?
お分かりできるかたお願いいたします。
339NAME IS NULL:2007/06/25(月) 12:53:22 ID:+ngh1xNX
>>338
自己解決しました
340NAME IS NULL:2007/06/25(月) 13:36:58 ID:???
XAMPP Liteを使ってみたところ、innoDBがデフォルトでは使用できないようになっているのですが、
これにはどういう理由が考えられるのでしょうか?
また、innoDBでテーブルを作成したところ、
その後、テーブルにカラムを追加等の処理に数十秒時間がかかったりするのですが、
それはフラッシュメモリへのアクセス速度等が理由となるのでしょうか?

どなたかご存知の方教えてください。
341NAME IS NULL:2007/06/25(月) 14:29:38 ID:???
質問ばっかだけど。
回答うけとって、どうだったとか、
自己解決でも解決したら、自分はこう解決したみたいなやつ、書いてくれよ。
こんなスレで、回答する気にならんよな。
342NAME IS NULL:2007/06/25(月) 15:47:04 ID:DgJUlJQr
MySQL、4.1以降日本語の自動変換処理による文字化け問題あり、それを日本国内向け
にソース手入れしたMoSQL(萌えSQLと呼ぶ)を発表、ダウンロード開始。

http://MoSQL.jp/

343NAME IS NULL:2007/06/25(月) 16:36:28 ID:???
>>335
MySQL GUI管理ツール でググレ。
344NAME IS NULL:2007/06/25(月) 16:38:36 ID:???
>>336
F/Wかも iptablesを止めてみたら。
345NAME IS NULL:2007/06/25(月) 16:53:21 ID:???
MoSQL スレまだー?
346NAME IS NULL:2007/06/25(月) 22:47:37 ID:???
>>336
DNSかも。mysqld に --skip-name-resolve つけてみては?
347336:2007/06/25(月) 22:57:58 ID:???
>>346
ビンゴでした。
IPアドレス直で接続してるのに/(^o^)\

解決しました。ありがとうございました。

>>344さんもありがとうございました。
348NAME IS NULL:2007/06/25(月) 23:23:06 ID:???
>>347
        ___
      / ̄   /\
    /     - /,-  |
   |( (■) ll (◎ )
   (6 、_,/  , ヽ  |
   | /ヽ(__(_ノ)、ノ  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
    |,  ( 'ー─一ノ|< 逆引きしたんだよ  ホスト名を・・・
     \λ_ ⌒ ,ノ    \______________
349NAME IS NULL:2007/06/26(火) 04:02:51 ID:???
「MySQL,PostgreSQLとFirebirdの性能をユーザー会メンバーが徹底比較,判明した"意外な結果”」---OSC2007.DBより
http://itpro.nikkeibp.co.jp/article/NEWS/20070624/275673/?ST=middleware
350NAME IS NULL:2007/06/26(火) 15:58:44 ID:???
INSERTの際、(`number`値のMAX+1)を入れたいのですが一クエリで実行可能でしょうか?
`number`はユーザー毎のユニーク数字のためauto_incrementにはできません。

一応、テーブルも書いておきます。

CREATE TABLE `hoge_tbl` (
`auto_seq` int(11) unsigned NOT NULL auto_increment,
`user_seq` int(11) unsigned NOT NULL,
`msg` text,
`number` tinyint(4) unsigned NOT NULL,
PRIMARY KEY (`auto_seq`),
INDEX (`user_seq`),
INDEX (`number`)
) TYPE=MyISAM DEFAULT CHARSET=ujis;
351NAME IS NULL:2007/06/26(火) 16:41:07 ID:???
サブクエリを使えば可能です。
352NAME IS NULL:2007/06/26(火) 20:16:16 ID:???
> `number`はユーザー毎のユニーク数字のためauto_incrementにはできません。
?どうして auto_increment を使えないの?
353NAME IS NULL:2007/06/26(火) 21:14:47 ID:???
>>350
`auto_seq`と`number`の違いが激しく謎。
354NAME IS NULL:2007/06/26(火) 21:17:15 ID:???
>>352
そうだよな。auto_increment使えばいいじゃん。
unique indexでも問題ないよ。
なんか問題があるなら、おせーて。
355NAME IS NULL:2007/06/26(火) 22:12:53 ID:???
エスパーするとuser_seq毎にnumberを振りたいんジャマイカ?
つかuser_seqをPRIMARYにできるんじゃね?
356NAME IS NULL:2007/06/26(火) 22:39:04 ID:???
357NAME IS NULL:2007/06/27(水) 09:40:27 ID:???
すみません、質問です
mixiみたいな会員数不特定のブログサービスがあったとして、
ああいうサービスの日記のログ管理DBってどうなってるんですか
トラックバックのないコメント機能だけの日記だと、
全会員のログを一つのnikkiTABLEで管理してるんでしょうか?

nikkiTABLEのフィールドの内訳は以下のみたいな感じでしょうか?
userID kijiID p_kijiID(コメント用) title content(text) date

書いてみてこれじゃ返信機能つき掲示板と変わらないって思いましたが、
自分にはこれくらいしか思いつきません(初心者です)
他にどんな機能がいりますか? それとも、全ユーザの日記を同じテーブルで
管理なんてしないんでしょうか? 上のはありえない馬鹿仕様ですか?
358NAME IS NULL:2007/06/27(水) 13:01:48 ID:???
>>357
ネットに腐るほど情報あるが今回だけはバグとったばかりで気分が良いので教えてあげよう。
ttp://itpro.nikkeibp.co.jp/article/NEWS/20060330/233820/
359NAME IS NULL:2007/06/27(水) 14:31:05 ID:???
うまく探せばMySQLのユーザー会かなにかの発表で使ったぱわぽんのデータもあるよ。
結構な事をやってるから、357の段階で引っかかってるならやらない方がいいと思う。
360NAME IS NULL:2007/06/27(水) 19:16:04 ID:???
他のサーバーに移管したいので、
DB内のデータをSQL文でとりたいのですがどうすればいいでしょうか?

ほかに簡単に移管する手がありましたら教えてください。
自鯖から専用鯖への移管です
361350:2007/06/27(水) 19:20:20 ID:???
`user_seq`ごとに
`number`が存在するからプライマリにはできません(多分)
`user_seq`=1の人の`number`が1,2,3,4,5
見たいな感じです。

引き続きお願いします
362360:2007/06/27(水) 19:27:50 ID:???
訂正します。
自鯖からxreaへの移管です。
363NAME IS NULL:2007/06/27(水) 19:35:15 ID:???
>>360
大型ダンプでいいんじゃね?
364360:2007/06/27(水) 19:49:07 ID:???
>>362さん
レスありがとうございます。
度々で申し訳ないのですが、正式名称を教えてください。

検索してもでてきませんでした。。
http://www.google.com/search?hl=ja&client=opera&rls=ja&hs=CsU&q=%E5%A4%A7%E5%9E%8B%E3%83%80%E3%83%B3%E3%83%97%E3%80%80MySQL&btnG=%E6%A4%9C%E7%B4%A2&lr=
365NAME IS NULL:2007/06/27(水) 20:49:52 ID:???
>>363-364
ワロタ
366NAME IS NULL:2007/06/27(水) 20:53:41 ID:???
>>360
大型ダンプじゃなくても双方近しいバージョンならDBファイルをまんまコピー
でも大丈夫。(まれにバージョンによっていけない場合もある)
367NAME IS NULL:2007/06/27(水) 20:57:01 ID:???
>>350
良くわからんが 351が答えてる。
368NAME IS NULL:2007/06/27(水) 22:14:07 ID:???
>>361
多分とか、言っててビビるんだが。
質問者がわからんテーブル構成を漏れが判断できるわきゃねーだが。
複合インデックスにすりゃーいいだが。
その前にサブクエリーを使えって誰か言っているわけだが、なぜ黙殺するのか、答えろ。
369360:2007/06/28(木) 12:10:20 ID:???
>>363さん
364はアンカーミスです。
すみません。
>>366さん
XREA(共有サーバ)なのでDBファイルの置き場所にアクセスできません。
mysqldumpでSQL文として吐き出してもらうのが、一番手っ取り早いとは思うのですが
マニュアル見てもどこに書いてあるのか分かりません。(mysqldumpの項)

くれくれですみませんが、詳しく解説しているサイトなどありましたら教えていただけませんでしょうか?
370NAME IS NULL:2007/06/28(木) 13:01:51 ID:???
>>369
どこ見てんだか…
[Mysql ダンプ]でググれば一発
371NAME IS NULL:2007/06/28(木) 13:16:27 ID:???
>>369
mysqldump でググレばトップじゃねーの。これは久々に偉人が出るな。
372360:2007/06/28(木) 13:47:26 ID:???
>>370-371さん
レスありがとうございます。
マニュアルのmysqldumpは既に見ています。
ただ、コマンドを書いてもうまくいかないのです。

mysqldump --c database > backup.sql;
これでやってみましたがエラーになります。。
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 'mysqldump -c datebase > backup.sql' at line 1
373NAME IS NULL:2007/06/28(木) 14:58:17 ID:???
今後の展開に期待
374NAME IS NULL:2007/06/28(木) 15:11:58 ID:???
>>372
自分で「コマンド」って書いてるのになんでSQLクエリとして実行するかね。
375NAME IS NULL:2007/06/28(木) 16:06:47 ID:???
笑った。
376NAME IS NULL:2007/06/28(木) 16:25:01 ID:???
>>372
mysql内でなくて、コマンドプロンプト等で以下コマンド発行でつ。

mysqldump --user=ユーザー名 --password=パスワード データベース名 > backup.sql

これが基本だが、ホントはもう少しパラメータが必要。
ソケットや、キャラクターセットなどのパラメータ。
innodbだけをしている場合とそうでない場合など。
blobのデータがある場合。

色々なケースによりパラメータが違うのでつ。


>>373-374
中学生がホームレス襲撃して遊んでいる構図と一緒でつ。
傍目からみていると醜いでつ。
377NAME IS NULL:2007/06/28(木) 17:54:35 ID:???
>>358-359
ありがとうございました!
テーブル分割という概念を知らなかったので勉強になりました
378NAME IS NULL:2007/06/28(木) 18:19:17 ID:???
>>376
コマンドをクエリとして打っちゃうような人に対して
その説明で足りると思ってるの?
所詮自己満足、>>374と50歩百歩だよ
379NAME IS NULL:2007/06/28(木) 22:57:41 ID:???
start transaction;
SQL文1;
SQL文2;
SQL文3;
IF エラーが無ければ THEN
COMMIT;
ELSE
ROLLBACK;
END IF;

こう言うSQL文を書きたいのですが
エラーが無ければの部分が分りません
教えてください
380NAME IS NULL:2007/06/28(木) 22:59:53 ID:???
>>379
アプリ側でやれ
381NAME IS NULL:2007/06/28(木) 23:03:36 ID:???
>>380
アプリは無いのでsql側でお願いします
382NAME IS NULL:2007/06/28(木) 23:24:02 ID:???
どんなときエラーになるのさ?
383NAME IS NULL:2007/06/28(木) 23:30:06 ID:???
create table aaa(
bbb int
);

start transaction;
insert into aaa(bbb) values(0);
insert into aaa(bbb) values(3);
insert into aaa(bbb) values(bbb); <<ここです。
IF エラーが無ければ THEN
COMMIT;
ELSE
ROLLBACK;
END IF;
384NAME IS NULL:2007/06/29(金) 00:18:16 ID:???
>>379
それってさ。
ttp://forums.mysql.com/read.php?98,139540,139582
このサイト見て自分も同様にやりたかったが、ストプロ使えないバージョンだった。
で、代案をココで訊いてみた。
つーこと?
バージョンくらい書いてくれよ。

ファイルにそのsql文を書いて実行すれば代用できる。

start transaction;
うまく通りinsert文1;
うまく通りinsert文2;
うまく通らないinsert文3;
commit;

mysql -uユーザ名 -pパスワード -Dデータベース名 < 上記sql文.sql

「うまく通らないinsert文3」があるから、ロールバックされとるやろ?
385360:2007/06/29(金) 11:44:33 ID:???
>>376さん
ありがとうございます!
無事SQL文として取り出せました。
ご親切にありがとうございます。

ただ、深刻な問題があります。
取り出したSQL文の日本語が文字化けしてしまうのです。

こちらは376さんのアドバイスを参考に自力でやってみます。
386NAME IS NULL:2007/06/29(金) 12:43:51 ID:???
>>384
やりたかったのはそのサイトに書いてあるやつです。


start transaction;
うまく通りinsert文1;
うまく通りinsert文2;
うまく通らないinsert文3;
commit;
としてもロールバックされなかったのでそのサイトのように
できたらいいかなと
versionはmysql5です
387NAME IS NULL:2007/06/29(金) 12:51:51 ID:???
start transaction;
うまく通りinsert文1;
うまく通りinsert文2;
うまく通らないinsert文3;
rollback;  <<明示的にロールバックするとロールバックされます。
388NAME IS NULL:2007/06/29(金) 13:38:54 ID:???
>>386
なぬぅ?

つーことはさ。
MyISAMでテーブルを作ってないか?
InnoDBで作ったやつで再度やり直してみてくだつぁい。

と書いたところ、
>>387
が更新されていた。

つーことは、InnoDBで作っているみたいだねぇ。

>>384
このstart 〜 commit;までをファイルに書いてリダイレクトすんだよ?
mysql -uユーザ名 -pパスワード -Dデータベース名 < 上記sql文.sql

これはmysqlの中で打つコマンドじゃないよ。
mysql> exit
c:\> mysql -uユーザ名 -pパスワード -Dデータベース名 < 上記sql文.sql

まあ、バージョンが5.xxらしいのでストプロも研究してみてくだつぁい。
389NAME IS NULL:2007/06/29(金) 14:24:05 ID:???
入っている文字(日本語)が奇妙な形で文字化けします。
以下のような感じなのですが、どなたか同じ経験ありますでしょうか?

サーバから見たときやPHPMyAdminから見た時は日本語が文字化け
PHPで取り出して表示すると普通に見れる(この際、EUC-JPからSJISに変換している)
入れる際の文字コードの問題か、とも思いましたがきちんと(SJIS->EUC-JPに)変換していた。
データベースによってこの現象が起きるDBとおきないDBが存在(testというDBでは正常に入っているのにtest2だと文字化け)→DB内部文字が原因?

こんな感じなのですが、もし何かご存知の方、宜しくお願いします。
私も引き続き調べてみますが私の知識レベルではなかなか原因の究明が出来ません。。
390NAME IS NULL:2007/06/29(金) 14:50:35 ID:???
>>389
こちらの環境ではまったく問題がないです。
バージョン5.027
WindowsXP

version
mysqlサーバのos、あるいはクライアントのos
show variable like 'char%';
create database時のcharacter set
create table時のdefault charset

これらを聞かされていないのに調査のしようがありません。

基本的にサーバとクライアントのキャラクターセット不一致が原因ですから、
その辺りから調査されてはいかがでしょうか。
391NAME IS NULL:2007/06/29(金) 14:57:58 ID:???
>>390
あと、
insert時のキャラクターセット
phpスクリプトによるinsert文発行なら、phpスクリプト・ファイル自体のキャラクターセット。
コマンドプロンプトなら、set namesもしくは、charcter_set_client。

392389:2007/06/29(金) 16:28:02 ID:???
>>390-391
ありがとうございます。
mysqlサーバのOSはFedoraCore5です。
クライアントはWindowsXP(これは関係ないと思います)

以下がshow variable like 'char%';の結果です。
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+

各テーブルをstatusで調べてみると以下が違うことが分かりました。

■文字化けするほう
Db characterset: utf8
■文字化けしないほう
Db characterset: latin1

これが原因っぽい…
Db charactersetをlatin1にしてみます
393NAME IS NULL:2007/06/29(金) 16:40:04 ID:???
>>392
utf8なら、insert時に
set names utf8;
でインサートすればよい肝。

latin1だと日本語で困りそうですが、その辺りは問題ないですか?
むしろcharcter_set_database、charcter_set_serverをutf8にする検討をしたほうがよさそう。

あ。
>入れる際の文字コードの問題か、とも思いましたがきちんと(SJIS->EUC-JPに)変換していた
insert時にeuc変換?、utf8のサーバに?

ちょっとこの辺が意味不明ですねぇ。

394NAME IS NULL:2007/06/29(金) 16:44:13 ID:???
データが
"渋谷駅:5分"
という形で格納されています。
この5という数字に対して比較演算子を使いたいのですが、どのような方法があるでしょうか?
正規表現を使っても後方参照が無いので意味ないですし・・・
テーブルの設計を間違えたのは重々承知ですが、何かいい方法があればアドバイスお願いします。
395389:2007/06/29(金) 16:48:28 ID:???
>>393
何度もご解答いただきましてありがとうございます。

普通にUTF-8じゃなくEUC-JPでいれてました。。
でも文字化けしてないし、きちんと見れる。。
なんかやばいですね^^;(既に稼働中)
latin1ですが、文字化け等していないです。

度々の質問で申し訳ないのですが、
既にデータが入っているんですがcharcter_setを変えちゃって大丈夫でしょうか?
396NAME IS NULL:2007/06/29(金) 17:09:23 ID:???
>>395
いやぁ、それはヤバイっしょ。
文字コード毎に固有の文字がありますんで。
sjis -> cp932とかなら、良いかもですが。

>>394
やもえないということなので、文字列をこねくり回す方法があります。
「mysql 関数」でググッた方が速いです。

mysql> create table test (c varchar(20));
Query OK, 0 rows affected (0.64 sec)

mysql> insert into test values
-> ('渋谷:10分'),('渋谷:5分'),('新宿:5分');
Query OK, 3 rows affected (0.17 sec)
レコード数: 3 重複数: 0 Warnings: 0

mysql> select * from test where replace(substring(c,locate(':',c)+1),'分','')='5';
+------------+
| c |
+------------+
| 渋谷:5分 |
| 新宿:5分 |
+------------+
2 rows in set (0.00 sec)
397NAME IS NULL:2007/06/29(金) 17:13:37 ID:???
>>394
文字操作関数はかなり充実しているので、INSTR CHAR_LENGTH MID なんかを使えばいっと
数字だけ取り出せるであろう。

ttp://dev.mysql.com/doc/refman/4.1/ja/string-functions.html
398NAME IS NULL:2007/06/29(金) 18:22:17 ID:???
>>388
なるほどクエリでやってました。
コマンドからバッチを流すと出来ました。

しかしクエリで処理する方法は無いのでしょうか?

ストアドプロシージャはストアドプロシージャを
呼び出せないためリンク先の方法は難しいようなきがします
399NAME IS NULL:2007/06/29(金) 19:14:44 ID:???
>>398
そのストプロからストプロを呼び出す云々は聞いていない用件だし、
詳細不明なので割愛させてもらいます。
俺はふつーにやってるけどな。
バッチもストプロもダメなら、ない。
400400:2007/06/30(土) 05:19:00 ID:???
400get
401NAME IS NULL:2007/06/30(土) 16:11:31 ID:???
MySQL 3.23なのですが、レコードの複製で効率的なものはないのでしょうか?
同じテーブルでのINSERT ... SELECTは、このバージョンでは無理とのこと。

一度SELECTしたものをINSERT ... VALUEするしかありませんでしょうか?
402NAME IS NULL:2007/07/01(日) 01:05:45 ID:???
>>401
temporaryテーブルを介すればいいんじゃまいか
403NAME IS NULL:2007/07/01(日) 05:06:59 ID:???
>>395
小さいDBなら、DB側はこんな感じでちょこちょこっと弄ればよい(ujis→utf8への変換例)

1)ダンプを吐き出し
mysqldump -uユーザ名 -pパスワード --default-character-set=binary DB名 > dump

2)dump.sql内のcharset置換
sed 's/DEFAULT CHARSET=ujis/DEFAULT CHARSET=utf-8/g' dump > dump_tmp

3)nkfで文字コード変換
nkf --utf8 -Lu dump_tmp > dump_utf8


4)
DBの作り直し
mysqladmin -uユーザ名 -pパスワード drop DB名
mysqladmin -uユーザ名 -pパスワード create DB名

5)ダンプデータを流し込む
mysql -uユーザ名 -pパスワード DB名 < dump_utf8

以上

mysql> SHOW VARIABLES LIKE 'character\_set\_%';

尚、当然ながら、自己責任でおながいします。いきなり本稼働中環境にやらないように。
404NAME IS NULL:2007/07/01(日) 10:57:43 ID:9kR/4Q9k
myspl5で
int unsigned
のカラムにマイナスの値をいれると0が挿入されたり
値がマイナスになるように引き算をしアップデートすると
最大値近くの値になるのは仕様でしょうか?
405NAME IS NULL:2007/07/01(日) 14:42:37 ID:???
>>404
create table からinsertまで画面ログを見せてくだつぁい。
漏れの環境では再現できなかったでつ。
5.0.27。
詳しいバージョンもよろ。
406NAME IS NULL:2007/07/01(日) 21:56:24 ID:???
mysql 5.0.26
create table testtable(
testcol int unsigned
);

insert into testtable(testcol) values(-6)

これで入ってしまいます。一応警告はでるのですが
407405:2007/07/01(日) 22:49:58 ID:???
>>406
降参。
一応漏れのshow create tableと結果を書いておきます。
mysql> show create table testtable;

mysql> show create table testtable;
+-----------+-------------------------------------------------------------------
----------------------------------------+
| Table | Create Table
|
+-----------+-------------------------------------------------------------------
----------------------------------------+
| testtable | CREATE TABLE `testtable` (
`testcol` int(10) unsigned default NULL
) ENGINE=InnoDB DEFAULT CHARSET=sjis |
+-----------+-------------------------------------------------------------------
----------------------------------------+
1 row in set (0.00 sec)

mysql> insert into testtable(testcol) values(-6);
ERROR 1264 (22003): Out of range value adjusted for column 'testcol' at row 1

mysql> select * from testtable;
Empty set (0.00 sec)
408406:2007/07/02(月) 00:24:28 ID:Jq59+b9l
別のVersionでためしたら405さんのように跳ねられました。
バグか設定がへんな用です。
409NAME IS NULL:2007/07/02(月) 00:33:12 ID:???
不正な値の扱いなら、SQL_MODEで指定するんじゃないの?
MySQLの配布元によって初期値が異なる可能性はある。
http://www.mysql.org/doc/refman/5.1/ja/server-sql-mode.html
410405:2007/07/02(月) 00:48:42 ID:???
>>409
おービバビバ。409、ありがとん。再現できた。

mysql> SELECT @@global.sql_mode;
+----------------------------------------------------------------+
| @@global.sql_mode |
+----------------------------------------------------------------+
| STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION |
+----------------------------------------------------------------+
1 row in set (0.00 sec)

mysql> SELECT @@session.sql_mode;
+----------------------------------------------------------------+
| @@session.sql_mode |
+----------------------------------------------------------------+
| STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION |
+----------------------------------------------------------------+
1 row in set (0.00 sec)

mysql> insert into testtable values (-1);
ERROR 1264 (22003): Out of range value adjusted for column 'testcol' at row 1

mysql> set sql_mode='';
Query OK, 0 rows affected (0.00 sec)

mysql> insert into testtable values (-1);
Query OK, 1 row affected, 1 warning (0.01 sec)

mysql> select * from testtable;
+---------+
| testcol |
+---------+
| 0 |
+---------+
1 rows in set (0.00 sec)
411406:2007/07/02(月) 17:55:26 ID:Jq59+b9l
なるほどこんな設定があるとは
ありがとうございます
しかしこんな設定を使うシステムもあるんですかね
412406:2007/07/02(月) 21:02:52 ID:???
CREATE TABLE `testtable` (
`testcol` int(10) unsigned default NULL
) ENGINE=InnoDB

insert into testtable(testcol) values(300);
update testtable testcol = testcol - 400;
-->NG
update testtable testcol = testcol -(100*4);
-->OK

こんな結果が出ました。
ちょっと不安になってきました。
413NAME IS NULL:2007/07/03(火) 00:44:12 ID:???
MySQLって商用として使えるの?
414NAME IS NULL:2007/07/03(火) 00:48:40 ID:???
>>413
使えるでござる。
ただしクライアント部でリンクしている部分は
バイナリ保有者にソース公開の義務があるゆえ
徹底した機能分割にて非GPL部分との隔離を
図る必要があるでござる
415NAME IS NULL:2007/07/03(火) 08:46:11 ID:???
>>413
ライセンス購入で無問題
416NAME IS NULL:2007/07/04(水) 00:38:47 ID:???
お金出すなら、無料でダウンロードできるという採用価値の意味は無くなるけどな。

GPL除去がめんどいのでオラクルを使ってる。
ライセンス量はお客負担だし。
417NAME IS NULL:2007/07/04(水) 01:27:03 ID:???
>>416
>GPL除去
詳しく。

接続してSQL投げて結果を取得するだけのプログラムの場合、
SQL投げるところは、非公開でOK。
SQLを受け取ってDBに接続、SQL結果取得する部分は、公開の義務。

ちゅーこと?

418NAME IS NULL:2007/07/04(水) 10:10:58 ID:???
つか、MySQLはBSDライセンスじゃんか。
GPLがどうして出てくるんだろうか・・・・
419NAME IS NULL:2007/07/04(水) 11:00:56 ID:???
>>418
オレはてっきりPostgreSQLの方がBSDライセンスで
MySQLはGPLと商用のデュアルライセンス形態だと
ばかり思っていた。 反省しなくてはいけないな。
教えてくれてありがとう。
420NAME IS NULL:2007/07/04(水) 12:06:41 ID:???
整理しよう。(笑)
MYSQLはLGPLライセンス・・だっけか?
PostgreSQLはBSDライセンス・・・かな?

もう何が何だか全然分からなくなってきたな。(笑)
421NAME IS NULL:2007/07/04(水) 16:09:51 ID:???
すみません 質問させてください
出会い系でもミクシでもいいんですが、「友達リストに登録」機能って、
ユーザプロフィール用のテーブルとは別に、友達一覧専用のテーブルを持ってると
考えるのが自然でしょうか?

ユーザプロフィール用のテーブルと一緒だと、friendsフィールド中にカンマセパレーションで
流し込むことになるのかなと思いますが…
422NAME IS NULL:2007/07/04(水) 18:35:11 ID:???
>>421
friends テーブルとか作って、会員テーブルの主キーを自分と相手でマップする感じに作るのが理想。
423336:2007/07/04(水) 20:16:15 ID:???
>>418
ソースをみせてくれ

GPLでしょ
http://dev.mysql.com/doc/refman/5.1/ja/what-is-mysql.html

Postgres がBSD
424NAME IS NULL:2007/07/04(水) 20:19:07 ID:???
MySQL のコードを利用しないアプリに関しては BSD ライセンスってこと?
俺も分からなくなってきましたよw
425NAME IS NULL:2007/07/04(水) 22:41:08 ID:???
>>424
今オレが書いてるこのソースもMySQLのコードは使ってないから
自動的にBSDライセンスになるってことか。BSD強いなぁ。うん。
426NAME IS NULL:2007/07/05(木) 11:02:35 ID:3+rCMbiR
3.23です。

自動インクリメントする整数型フィールド id を持つ、テーブル hoge があります。
まず、新規レコードをINSERTし、その後コネクションを切断します。
次に、別途MySQLに接続し、UPDATEでこのレコードを更新しました。
この時、MySQLの関数などを用いて、このレコードの id を取得することは可能でしょうか?

LAST_INSERT_ID() はちょっと違いますし……。
現在、アプリ側でSELECTする方法を考えています。
427426:2007/07/05(木) 11:05:11 ID:???
hoge には、id 以外にも幾つかのフィールドを持ちます。
その中にはユニークなものもあり、SELECT〜WHEREで id を取得することは可能です。
428NAME IS NULL:2007/07/05(木) 11:23:43 ID:???
>>426
文面通りなら、max()使えばよろし。
ただし、3.23は、使ったこと梨。
429NAME IS NULL:2007/07/05(木) 12:55:06 ID:???
430NAME IS NULL:2007/07/05(木) 13:02:58 ID:???
申し訳ありませんが質問させてください。

UPDATE `table` SET `name` = '名前1' WHERE `id` = 1;
UPDATE `table` SET `name` = '名前2' WHERE `id` = 2;

このような複数のUPDATE文を一つのSQL文にまとめたいと思います。
どのように書けば良いでしょうか。
431NAME IS NULL:2007/07/05(木) 13:15:13 ID:???
>>430
UPDATE `table` SET `name` = '名前'+id;
'名前'+idのとこは文字列化して文字列連結
あとは冴子先生に聞け
432NAME IS NULL:2007/07/05(木) 13:22:32 ID:???
>>431
ありがとうございます。お陰様で解決致しました。
今までSQLは一文ずつしか送れないのだと勘違いしていました・・
433NAME IS NULL:2007/07/05(木) 13:53:44 ID:???
hoge_tblのhogeが空の場合(NULLのものと空白のもの)のみを取り出したいのですが以下ではうまく動作しません。
どうすれば意図した動きをしてくれるでしょう?

SELECT * FROM hoge_tbl WHERE (`hoge`=NULL || `hoge`='');
434NAME IS NULL:2007/07/05(木) 14:19:11 ID:???
>>433
IS NULL
あとは冴子先生に聞け
435NAME IS NULL:2007/07/05(木) 14:55:51 ID:???
>>424
>>429 に補足。特定のオープンソースのライセンスの場合は例外条項があります。

FLOSS ライセンス除外規定
http://www-jp.mysql.com/company/legal/licensing/foss-exception.html
http://en.wikipedia.org/wiki/List_of_content_management_systems
436426:2007/07/05(木) 17:38:19 ID:???
>428
ありがとうございました。

UPDATEを行う前に他のコネクションからINSERTされる可能性を考えると、MAX()は使えなさそうです。
素直にSELECTすることにします。
437NAME IS NULL:2007/07/07(土) 10:28:11 ID:???
GPLは汚染されるからねえ。
438NAME IS NULL:2007/07/07(土) 12:36:16 ID:???
MySQLをCygwinか、若しくはコマンドプロンプト以外のターミナルで
実行することはできますか?
コマンドプロンプトでは全角/半角の切り換えに
いちいちAltを押さないといけないので、その手間が煩わしいのです。

なお、当方の環境(WinXP Pro)では、Cygwinでmysqlコマンドを打つと、
何も表示されず、実行されている気配も無いです。
439NAME IS NULL:2007/07/07(土) 14:29:42 ID:???
>>438
サービスに登録すれば?
440NAME IS NULL:2007/07/07(土) 14:42:23 ID:???
>>439
438はクライアントの話をしているんじゃ?
441NAME IS NULL:2007/07/07(土) 16:38:26 ID:???
>>438
teratermでcygterm
あとは冴子先生に聞け
442NAME IS NULL:2007/07/07(土) 20:57:15 ID:???
すみません、ちょっとここで聞くことなのか悩んだんですが質問です

あるサーバで、サイトをA B Cの三つ作るとして、SSLを導入することに
なったときに、全サイトに入れると経費かかるから、そのうち一つに入れて
他からの代用にするって出来ますか?

B・Cのサイトから、 https://www.A.com/ のフォームを開き、そこからB・C用のsqlDBに
登録するっていう流れになると思うんですが、それでセキュリティは問題なく保持されるでしょうか?
443NAME IS NULL:2007/07/07(土) 21:37:28 ID:???
>>442
SSLじゃなくてSQLだえお
つーかフォームを開くのかよやめろよそういうのは裏でやれよ
クロスサイトすんなお
444NAME IS NULL:2007/07/07(土) 22:04:26 ID:wxVu8uZj
kkk
445442:2007/07/08(日) 02:12:47 ID:???
>>443
回答ありがとうございます
>SSLじゃなくてSQLだえお

どういうことでしょう? あのー、ベリサインとかのあのSSLを導入したいって
意味なんですが… すみません知識不足でご指摘の部分が理解できてないかもしれません
板違いだろーという意味でしたら、ごめんなさい
>フォームを開くのかよやめろよそういうのは裏でやれよ
つまり、www.B.comからwww.A.comのフォームを開くの自体がまずいってことでしょうか?
それがクロスサイトスクリプティングにつながると…?
B.comのフォームを開いて、そこからA.comのSSLを利用するなんて出来ないですよね
446NAME IS NULL:2007/07/08(日) 02:31:08 ID:???
違うホストの証明書が利用出来たらSSLの意味ない
板違いを自認してるならサッサとお帰りください
447NAME IS NULL:2007/07/08(日) 03:03:29 ID:???
たしかに! そりゃそうですね
ごめんなさい ありがとうございました
448NAME IS NULL:2007/07/08(日) 10:09:07 ID:/xzmDBMK
MysqlAdministratorについて質問です。

DBサーバが別サーバになっていてローカルIPを振られているような
環境でも設定次第では接続可能でしょうか?

クライアントがローカルネットワーク上であれば単にHOSTを
ローカルIPにすれば大丈夫だと思うのですが、そうではなく
ローカルネットワーク外から上記環境に接続したいと思っています。

よろしくお願いいたします。
449NAME IS NULL:2007/07/08(日) 14:44:23 ID:???
目的を書いたら?
社内LANとかで他のMySQL鯖に繋ぎたいってこと?
ローカルネットワーク外からローカルネットワークに通信できるのか?って疑問がある。
450NAME IS NULL:2007/07/08(日) 21:35:53 ID:???
トンネル掘れば(port forwarding)一応何でも出来る けどね。
451NAME IS NULL:2007/07/09(月) 15:58:00 ID:???
>>448
できるよ。 ウォール他、ネットワークの話しになりますね。
452NAME IS NULL:2007/07/10(火) 01:30:40 ID:???
ポート転送は邪道だけどな。動けばいいならそういう解決法もあるが。
453NAME IS NULL:2007/07/10(火) 17:47:02 ID:NqzHTtFx
mysqldumpで--add-drop-databaseのオプションが機能しないのですが、何か他に必要なことがあるのでしょうか?
コマンドラインにてmysqldump --add-drop-database --user=hoge -phoge HOGE_DB > c:\hoge_db.sql
を実行したところ、ファイルは作成されたのですが、
中をのぞいてもdrop database HOGE_DBの文あるいは該当する記述が見当たりません。
このオプションは使用できないのでしょうか?
xamppliteのmyxql4.1.14を使用しています。
どなたかご存知の方教えてください。
454NAME IS NULL:2007/07/10(火) 22:04:34 ID:???
>>453
いや、そのDBもうDROPされてるよ。 確認した?
455NAME IS NULL:2007/07/10(火) 23:20:40 ID:???
つまらない釣りだ。orz
456NAME IS NULL:2007/07/11(水) 15:44:43 ID:0py3B+oq
質問です
DB一つの中に10個テーブルつくるのと、DB2つの中に5個づつつくるのとで
どう違うんでしょう
一つにまとめると負荷が大きくなって危険とかあるんでしょうか?
両パターンでのバックアップとるときの短所や長所などがあれば教えてください
切り分けルールをどう定めていいのか分かりません

よろしくお願いします
457NAME IS NULL:2007/07/11(水) 16:25:27 ID:???
>>456
切り分ける必要が無いなら切り分けない。絶対に。
458NAME IS NULL:2007/07/12(木) 02:08:23 ID:???
アクセスするとき、テーブル違いを意識するかしないか程度。
テーブル単位でバックアップ?なんて変な事するなら多少のご利益はあるだろうけど。
普通はデータベース単位でバックアップ取るから関係ない。

負荷が集中したら、テーブル分けるだけじゃ駄目で、鯖を分散化しないと意味が無い。
テーブル単位でロックするなら、テーブル分ければロックの競合頻度が下がって処理時間が短くなる可能性はあるだろうけど、その次元に逝ったらオラクルとか自動的にロック回避のメカニズムを持ってパフォーマンスが出せるデータベース製品に乗り換えを考えるべき。
459453:2007/07/12(木) 13:23:42 ID:???
>>454
2つの異なるDBを同期するのに試してみたのですが、
同期元で削除したテーブルが、mysqldumpで作成したファイルから復元した同期先のDBから削除されませんでした。
また、作成したファイル内にて全てのテーブルについてdrop tableが付加されているので
やはりDBがdropされていないと思うのですが、
何か必要な手順が他にあるのでしょうか?
460NAME IS NULL:2007/07/12(木) 22:19:16 ID:U0XvRs/R
郵政公社の郵便番号CSVから住所データをMySQLに取り込みました。
構成は
area_id int 11 not null auto_increment primary
zip_code int 7 not null
pref_id tinyint not null
middle_area varchar(255) not null INDEX
middle_area_kana varchar(255) not null
small_area varchar(255) not null INDEX
small_area_kana varchar(255) not null

という構成でデータは119000件くらい入っています。

select * from area order by area_id limit 10
とやると一瞬で結果がかえってきます。
select * from area order by rand() limit 10
とやると、タイムアウトになってしまいます。
order by rand() ではレコード数が増えると扱えなくなるのでしょうか?

バージョンは5.0.41です。
461NAME IS NULL:2007/07/13(金) 01:06:02 ID:???
>>460
EXPLAIN してみ。すぐわかる。
462NAME IS NULL:2007/07/13(金) 01:47:25 ID:???
実際どうすればいいんだろうね
463NAME IS NULL:2007/07/13(金) 04:33:09 ID:9zDJRs1G
1対多の関係のレコードを1発でinsert/updateする方法はありますか?
464NAME IS NULL:2007/07/13(金) 07:34:58 ID:??? BE:575928364-2BP(0)
散々、既出だと思いますが質問させてください。
ttp://www.geocities.jp/kimura804/rdb/InterBase/ip_ib_strings_j.htm
ttp://dev.mysql.com/doc/refman/4.1/ja/blob.html
ここらへんを100回ぐらい読んだのですが、text型とblob型の使い分け方が分かりません。
みなさんはどういった使い分けをしていますか?
(例えば掲示板の書き込みは?とか商品紹介は?とか検索対象になるかどうかとか)
465NAME IS NULL:2007/07/13(金) 10:47:07 ID:???
>>464
どんなプログラム言語からMySQL使ってるのかしらないけど、
文字列型の変数にバイナリデータを入れるっていう概念が理解できないと
わからないと思う。
文字として扱う限りはtext型でいいでしょ。
466NAME IS NULL:2007/07/13(金) 12:48:52 ID:???
>>460
これ前に悩んだけど潰せなかった。
rand 用のインデックスなんて作れそうも無いし。
アプリで主キーの乱数を取って欲しい分回すしかないのかな。
467NAME IS NULL:2007/07/13(金) 12:49:35 ID:???
>>463
ない
468NAME IS NULL:2007/07/13(金) 13:50:22 ID:???
>>460 >>466

select * from area where area_id in ( select area_id from area order by rand() ) limit 10;

とかどうよ?
469NAME IS NULL:2007/07/13(金) 14:58:45 ID:???
>>468
あれ?登録順に出てくるぞ。
470NAME IS NULL:2007/07/13(金) 15:25:25 ID:???
>>469

ごめん

select * from area where area_id in
(select * from
(select area_id from area order by rand() limit 10) as a
);

でやってみてちょ 、

ちなみに 2行目を取っ払うと
This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery' と言われてしまうっす mysql (5.0.27)
471469:2007/07/13(金) 15:36:01 ID:???
>>470
補足
select * from itemregsub where area_id in (select area_id from (select area_id from area order by rand() limit 10) as a)
order by rand();

最後にorder by rand() が必要だった。

一応ランダム抽出でかつ初めに area_id のインデックスが効くから速くなると思うけど、、
472464:2007/07/13(金) 15:54:42 ID:???
>>465
返信ども。主にPHPから使ってます。
>文字列型の変数にバイナリデータを入れるっていう概念が理解できないと
>わからないと思う。
概念というか理由がイマイチ理解できないのですよ。
作る人のクセかも知れないけど、1000文字ぐらいの文字列なんかも
blob型で保存してたりして「なんでだろー」と。
473460:2007/07/13(金) 15:57:09 ID:ujex21Rt
答えてくれたみなさんありがとうございます。

なんだか複雑ですね。

>>470, >>471 のSQLでやってみたらできました、がやっぱりちょっとレスポンスが悪いですがしかたないですよね。
サブクエリの入れ子とは難しいですね。
とりあえず、教えていただいたものでやってみます。

ありがとうございました。
474NAME IS NULL:2007/07/13(金) 16:02:57 ID:???
>>473
area_id に対して
create index してる?

explain さっきのSQL で、 Using index て出てこないなら、してみたら?
475470 471:2007/07/13(金) 16:18:02 ID:9Bt5Ot0u
何度もスレ汚しごめん、しかもコテハン番号間違えてるし、、

select v1.* from
area as v1,
(select area_id from (select area_id from area order by rand() limit 10) as a) as v2
where v1.area_id=v2.area_id order by rand();

がたぶん最速

もっといい方法あったら教えて、エロい人。
476NAME IS NULL:2007/07/15(日) 18:37:44 ID:OG/QKv5e
初めまして。一つ質問させてください。
group_concat等で「4,1,4,1,1」と言う値が取れたとします。
この値から「1が連続している回数の最大値」をSQLで取るにはどうすれば
いいのでしょうか?
事情ありましてSQL限定での処理をしなくてはなりません。
恥ずかしい質問ですが、お助けください。

以下現在のソース
SELECT
group_concat(c) as c_t
FROM c_table
WHERE name = 197029

477NAME IS NULL:2007/07/15(日) 18:46:23 ID:???
>>476
group_concat()を使わなければならない理由は?
cでgroup byしたもののcount()で最大値とればいいんじゃないの?
478476:2007/07/15(日) 22:06:24 ID:OG/QKv5e
>>477
そうすると結果が「3」になってしまいます。
上記のケースで取りたい値は「2」なのです。(末尾の『1,1』の部分)
group_concatを使ったのは複数レコードをまとめられたのでこのままイケるかな?
と思いまして><
php使えれば一発なのに・・・
479NAME IS NULL:2007/07/16(月) 00:07:29 ID:???
はじめまして。質問なのですが現在タグでデータを管理するシステム
(youtubeやニコニコに似た感じです)を開発しています。

テーブル構成ですが、

Tags には TagId, Caption
Items には ItemId, Caption, Data
ItemsInTags には TagId, ItemId

というフィールドがあります。
アイテムとタグを関連付けるために、ItemsInTagsというテーブルを使用しています。

こうすることで、アイテムに関連付けられたタグ一覧と、ひとつのタグに関連付け
られたアイテム一覧を取得できるようになりました。

しかし、二つ以上のタグに関連付けられたアイテム
(たとえば、「TagId=10に関連付けられており、かつ、TagId=8に関連付けら
れている」という条件です)を一覧するSQL文を考えようとして分からなく
なってしまいました。

こういう場合、どういうふうにSQL文を記述すればよいのでしょうか?
サブクエリを何重にもネストしたりするのでしょうか?
ご教授いただけると助かります。

ちなみに、現在一つのタグに関連付けられたアイテムを取得するために
SELECT i.*
FROM ItemsInTags it INNER JOIN Items i ON (i.TagId = it.TagId)
WHERE i.TagId = 10
という風にしています。
480NAME IS NULL:2007/07/16(月) 00:32:20 ID:q17Bppan
>>478 ファンクション使っていいなら こんな感じ? 一応動くが大量レコードへの実行は遅そう。変数名わかりにくいのはすまん
drop function if exists get_cnt;
delimiter //
create function get_cnt(in_c int,in_num int) returns int
begin
declare maxc ,tmpc,lastval,nowval,eod int;
declare cur1 cursor for select c from c_t where name = in_num ;
declare continue handler for not found set eod=1;
set maxc = 0; set tmpc = 0; set lastval = 0; set eod = 0;
open cur1; fetch cur1 into nowval ;
while eod=0 do
if lastval <> nowval then set tmpc = 1 ;
else set tmpc = tmpc + 1; end if;
if nowval = in_c then
if maxc < tmpc then
set maxc = tmpc ;
end if;
end if;
set lastval = nowval;
fetch cur1 into nowval ;
end while;
close cur1;
return maxc;
end;
//
delimiter ;

こんな感じで作っておいて
select get_cnt(1,197029); ←1の数の場合
select get_cnt(4,197029); ←4の数の場合
みたいに呼んでカウントをとる。
481480:2007/07/16(月) 00:39:49 ID:???
>>480
set lastval = 0; は必要なかった。 あったら0のときカウントがずれる。
482NAME IS NULL:2007/07/16(月) 10:17:53 ID:J+xm2Lgb
>>479
自己連結を勉強しる
483476:2007/07/16(月) 12:13:36 ID:???
>>480
>>481
レス有難う御座います。
一見見ただけではまだ理解出来ていないphpとSQLとHTMLとJAVASCRIPTしか
触っていないプログラム一年生な自分でありますが、解読して役立たせて
頂きます。
上手くいきましたら報告させていただきますね
484NAME IS NULL:2007/07/16(月) 12:37:58 ID:???
DBにDateTimeで予定を入れてるんですが、
問い合わせする時って、時間ごとにSQL文作ってていいんでしょうか。

1回のビューで24回DBに問い合わせる事になるんですが、
スマートな方法って何かありますか?
485NAME IS NULL:2007/07/16(月) 15:44:02 ID:4NQxSNLF
CREATE TABLE `t1` (
`a` char(2) default NULL,
`b` char(2) default NULL,
`c` char(2) default NULL
) TYPE=MyISAM;

INSERT INTO `t1` (`a`, `b`, `c`) VALUES ('01', '02', '22');
INSERT INTO `t1` (`a`, `b`, `c`) VALUES ('01', '03', '23');
INSERT INTO `t1` (`a`, `b`, `c`) VALUES ('01', '04', '24');

CREATE TABLE `t2` (
`a` char(2) default NULL,
`b` char(2) default NULL,
`d` char(2) default NULL,
`e` char(3) default NULL
) TYPE=MyISAM;

INSERT INTO `t2` (`a`, `b`, `d`, `e`) VALUES ('01', '02', '01', 'aaa');
INSERT INTO `t2` (`a`, `b`, `d`, `e`) VALUES ('01', '02', '02', 'bbb');
INSERT INTO `t2` (`a`, `b`, `d`, `e`) VALUES ('01', '02', '03', 'ccc');

INSERT INTO `t2` (`a`, `b`, `d`, `e`) VALUES ('01', '03', '01', 'ddd');
INSERT INTO `t2` (`a`, `b`, `d`, `e`) VALUES ('01', '03', '02', 'eee');

INSERT INTO `t2` (`a`, `b`, `d`, `e`) VALUES ('01', '04', '01', 'fff');
INSERT INTO `t2` (`a`, `b`, `d`, `e`) VALUES ('01', '04', '02', 'ggg');
INSERT INTO `t2` (`a`, `b`, `d`, `e`) VALUES ('01', '04', '03', 'hhh');

こんな感じに二つテーブルをつくっていて、

SELECT t1.a, t1.b, t1.c, t2.d, t2.e
FROM t1, t2
GROUP BY t2.a, t2.b, t2.d

これで問い合わせると8件でてきます。

これを項目a,bの3グループ中の先頭2グループ分だけ表示したいとき
1度のSQLで問い合わせできるでしょうか?

いまはこれで件数を出し、3+2=5件をとってきてから
select count(*)
from t2
group by t2.a , t2.b
limit 0 ,2

SELECT t1.a, t1.b, t1.c, t2.d, t2.e
FROM t1, t2
GROUP BY t2.a, t2.b, t2.d
limit 0 , 5
と、2回問い合わせています。

わかりにくい質問の仕方ですいません。
486NAME IS NULL:2007/07/16(月) 18:48:16 ID:???
>>485
途中にsqlを抜けるのがいやなだけで、

実質的な問い合わせ回数は2回のままでもいいのなら
480みたいにファンクション作ってやってみれば?
487NAME IS NULL:2007/07/16(月) 19:05:54 ID:???
すみません。質問です。
MySQLで初めてViewを使ってみようと思ったのですが

CREATE VIEW test_view AS SELECT * FROM table_name;
すると
ERROR 1044 (42000): Access denied for user 'user_name'@'localhost' to database 'db_name'
と出てしまいViewが作成できません。

SELECT * FROM table_name; だけなら問題なく、ちゃんとQueryが通り、普通に結果が表示されます。

GRANT ALL してあるので、権限的には問題ないかと思うのですが
これはどのあたりが問題なのでしょうか…??皆目わからず困っております。。
何かお気づきの点などありましたらアドバイス下さい。

使用しているMySQLのバージョンは
mysql-5.0.27-1で、DBはInnoDBです。

どうぞよろしくお願い致します。
488NAME IS NULL:2007/07/16(月) 19:25:06 ID:???
>>487
もう一回、

[root@localhost]# mysql -uroot

mysql> use mysql
mysql> select Host,User, Create_view_priv,Show_view_priv from user ;

して

| Host | User | Create_view_priv | Show_view_priv |
| localhost | ユーザー | Y | Y |

ってなってるか確認汁
489NAME IS NULL:2007/07/16(月) 19:40:06 ID:???
>>484
いまいち曖昧な質問だけど、between とかで時間帯絞り込んで、1日分を一回で取得してくれば良いだけじゃないの?
490NAME IS NULL:2007/07/16(月) 20:27:02 ID:4NQxSNLF
>>486
いえ、PHP+mysqlなのでSQL抜けることには
全然問題ありません。

SQLの文法を詳しく知らないので簡単な方法があるなら
問い合わせ回数を減らした方が良いかと思い質問しました。

ありがとうございました。
491NAME IS NULL:2007/07/16(月) 23:59:41 ID:???
ここでいいのかわかりませんが、初心者質問です。
EasyPHP1.8にてPhpMydminからMysqlを見たいのですが、/loachost/mysql/にアクセスすると以下のようなエラーが出て表示できません。
何が悪いのでしょう。
EasyPHP上のMysqlはStartしてます。
環境はWindowsXPでローカルでのみテスト用に運用するだけです。
http://new1314.freespace.jp/log/up/log/210.jpg
492487:2007/07/17(火) 15:21:14 ID:???
>>488さん
ご回答ありがとうございます。指定されたコマンドを打ちましたら

mysql> select Host,User, Create_view_priv,Show_view_priv from user;
ERROR 1054 (42S22): Unknown column 'Create_view_priv' in 'field list'
m

と出ました。という事はこれは、Viewが使えないという事でしょうか。。。
MySQLのバージョンの問題でしょうか??
493NAME IS NULL:2007/07/17(火) 16:12:48 ID:???
>>492

じゃぁとりあえず、
select * from user;
で良いじゃん、中を見てみ。

(rootでmysqlに接続することをお忘れ無く)
494479:2007/07/17(火) 19:00:03 ID:???
>>482
自己結合のことですか?
AがBを参照し、BもAと同じテーブルに存在するという場合(社員テーブルの社員と上司など)
に使えると記憶していますが、どういうふうにこの問題に応用できるんでしょうか?
最近使うようになったばかりでまだ知らない部分が大いにあるので教えて
いただけるとありがたいです。


色々調べていて他のSQLサーバーでは以下のようにすればいけることが分かりました。
(SELECT i.*
FROM ItemsInTags it INNER JOIN Items i ON (i.TagId = it.TagId)
WHERE i.TagId = 10)
INTERSECT
(SELECT i.*
FROM ItemsInTags it INNER JOIN Items i ON (i.TagId = it.TagId)
WHERE i.TagId = 8)

これをMySQLサーバー用に書き換えるにはどうすれば良いでしょうか?
495NAME IS NULL:2007/07/17(火) 21:58:15 ID:jLoUe55A
orderby で質問があります。
MySQLはVer5です。

http://www.geocities.jp/livrersdream/1.html

上にある表が現在のデータです。
それをORDER BY句で下の表の並びで取得したいのですが、1回のクエリでできますでしょうか?
試したのは

SELECT * FROM `bg_category` ORDER BY IF(category_parent_id > 0, category_parent_id * 1000 ,sort_order)

ですが、当然期待通りにはなりません。 PHPと絡めて複数回のクエリを送ればできるのですが……

よろしくおねがいします。
496NAME IS NULL:2007/07/17(火) 22:12:57 ID:Nmyq7DKR
MySQL4.1.2 を使用しています。

重複行の削除をしようとしているのですが、
オラクルのように rowid がないので悩んでいます。
やはり一度 distinct したデータで一時テーブルつくって、drop したらまた元に戻してという方法しかないんでしょうか?
497NAME IS NULL:2007/07/18(水) 00:16:27 ID:???

Windows2000 + mysqld-5.0.45 + ODBC 3.51 Driver + ADO.NET2.0

上記のような環境で、ADO.NETからUTF-8の日本語文字をINSERTしようとしているのですが、
QueryBrowserで見ると文字化けしてしまいます。以下のような設定にしているのですが、
何か間違いありますでしょうか。他に設定すべき項目はありますでしょうか。
(VisualStudio上のウォッチでSQL文にはUTF-8で設定されていることを確認済)

character_set_client | utf8
character_set_connection | utf8
character_set_database | utf8
character_set_filesystem | binary
character_set_results | utf8
character_set_server | utf8
character_set_system | utf8
※「my.ini」で「skip-character-set-client-handshake」指定

ちなみに、MySQLをsjisで設定して、ADO.NETからMS932(Shift-JIS)でSQL文を
発行すると文字化けせずに表示されます。ただし、ODBC3.51にバグがあり、
ダメ文字(ソ、十とか)が文字列の最後に来ると例外が発生して更新できません。

よろしくお願いします。
498NAME IS NULL:2007/07/18(水) 01:02:47 ID:???
>>497
mysql> SHOW VARIABLES LIKE 'character\_set\_%';でどうなってる?
499NAME IS NULL:2007/07/18(水) 01:06:09 ID:???
>>497
追補 my.cnfはこんな感じか?
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
old_passwords=1
default-character-set=utf8
init-connect=SET NAMES utf8
character-set-server = utf8

[client]
default-character-set=utf8

[mysqldump]
default-character-set=utf8

[mysql]
default-character-set=utf8

[client]
default-character-set=utf8
[mysql.server]
user=mysql
basedir=/var/lib

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
500NAME IS NULL:2007/07/18(水) 01:13:43 ID:???
>>496
mysqlには無いのでなんとか工夫しましょう。
501497:2007/07/18(水) 01:37:46 ID:???
>>498 以下のような感じです。
mysql> SHOW VARIABLES LIKE 'character\_set\_%';
+--------------------------+--------+
| Variable_name | Value |
+--------------------------+--------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
+--------------------------+--------+

>>499 mysql5.0を使用しているので、my.iniで良いですよね?

[client]
port=3306
[mysql]
default-character-set=utf8
[mysqld]
port=3306
basedir="C:/Program Files/MySQL/MySQL Server 5.0/"
datadir="C:/Program Files/MySQL/MySQL Server 5.0/Data/"
default-character-set=utf8
skip-character-set-client-handshake

「mysqldump」の領域はありませんでした。
502NAME IS NULL:2007/07/18(水) 02:14:38 ID:???
>>501
[client]
default-character-set=utf8

って必要なかったっけ?ぱっと見コレが無いんだが、

あとは
ODBC側の Initial Statement→ SET NAMES cp932
が必要だったっけなぁ、

あんまり使わないんで、うろ覚えでスマン 知っている人つっこんでください。
503NAME IS NULL:2007/07/18(水) 02:26:59 ID:???
>>495
一発でとろう30分考えたけど挫折した。
こんな時はいつもファンクションに逃げる。phpで複数回クエリ投げるよりは速いと思う。スマン
504NAME IS NULL:2007/07/18(水) 03:31:37 ID:???
>>494
select B.* from Items as B where
exists
(
select * from ItemsInTags as A
where exists
( select * from ItemsInTags as it where it.TagId = 8 and A.ItemId=it.ItemId)
and A.TagId=10 and B.ItemId=A.ItemId
);

とか、
もっと美しくできんかなぁ
505504:2007/07/18(水) 03:42:54 ID:???
>>494
select it.* from Items as it , ItemsInTags as a1, ItemsInTags as a2
where a1.TagId=8 and a2.TagId=10 and a1.ItemId=it.ItemId and a2.ItemId=it.ItemId
でいいね、>>504は忘れてください
506475:2007/07/18(水) 04:01:30 ID:???
>>460 >>473
あとで見返してみたら
select
v1.*
from
area as v1,
(select area_id from area order by rand() limit 10) as v2
where
v1.area_id=v2.area_id
order by rand();

でいけるね。
507NAME IS NULL:2007/07/18(水) 19:47:09 ID:???
>>497
ODBCってあまり経験ないが、Initial Statement に"SET NAMES SJIS" とか入れんじゃねぇ。
508479:2007/07/19(木) 06:28:49 ID:???
>>505
あぁなるほど!
そういうふうに使えるわけですね。目からうろこです。
すっかり上司と部下のイメージに取り付かれてそういう発想ができません
でした。まだまだ勉強不足です。

とても助かりました。心から感謝します。
509NAME IS NULL:2007/07/19(木) 07:17:54 ID:???
>>508
気分的には
select it.* from Items as it , ItemsInTags as a1, ItemsInTags as a2
where a1.TagId=8 and a2.TagId=10 and a1.ItemId=it.ItemId and a2.ItemId=it.ItemId
and a1.ItemId = a2.ItemId

ってした方がなんか落ち着くね。
510NAME IS NULL:2007/07/19(木) 17:02:01 ID:+h4+/7J/

mysqldumpの出力するテーブル作成SQLで
CREATE TABLE IF NOT EXISTS `table` ・・・ と
「IF NOT EXISTS」を付けるオプションってありますでしょうか?

mysqldump --help で調べた範囲ではそれらしいものがなかったので
すいませんがご存知の方、お助けください。
511NAME IS NULL:2007/07/19(木) 17:52:39 ID:???
-n, --no-create-db 'CREATE DATABASE /*!32312 IF NOT EXISTS*/ db_name;' will
not be put in the output. The above line will be added
otherwise, if --databases or --all-databases option was
given.}.
だから↑をつけなきゃいいじゃねぇ?
512NAME IS NULL:2007/07/19(木) 21:05:45 ID:RSThEGcc
CREATE DATABASE IF NOT EXISTS ではなく
CREATE TABLE IF NOT EXISTS となるようにしたいのですが・・・
513NAME IS NULL:2007/07/19(木) 21:30:36 ID:???
>>512
mysql> create table if not exists hoge ( fuga int);
Query OK, 0 rows affected, 1 warning (0.00 sec)

出来たけど?(5.0.27)
514NAME IS NULL:2007/07/19(木) 22:02:41 ID:RSThEGcc
>>513
ありがとう。
申し遅れましたが、私512は510でもありまして
事の発端は>>510のmysqldumpでCREATE TABLE IF NOT EXISTSの付いた
出力ができないかと・・・という問題を抱えております。
515NAME IS NULL:2007/07/19(木) 22:31:50 ID:???
>>513
dump結果を直でいじれば。
または、create table をdumpさせないとか。
516NAME IS NULL:2007/07/20(金) 02:49:32 ID:???
>>514
sedで一括置換なら
mysqldump -uroot --default-character-set=binary hoge_db > dump
sed 's/^CREATE TABLE/CREATE TABLE IF NOT EXISTS/g' dump > dump_tmp
sed 's/^DROP TABLE IF EXISTS/--DROP TABLE IF EXISTS/g' dump_tmp > dump_conv

dump_convを使ってDB再構築

みたいなこんな感じ?(未テストだけど、たぶんうまくいく気がするけど、テスト環境つくってやってみてね)
517NAME IS NULL:2007/07/20(金) 04:29:05 ID:X7gTU+GY
>>516
やっぱりそうゆうオプションには無いみたいですね。
ちなみにDROPは--skip-add-drop-tableで出力しないようにできました。
ありがとう。
518NAME IS NULL:2007/07/20(金) 21:22:03 ID:???
GRANTコマンドでSYNTAXエラー続発で嘆いております。

GRANT ALL PRIVILEGES ON pp.* TO pp@'192.168.1.%' IDENTIFIELD BY 'pp' WITH GRANT OPTION;

自分で何が悪いのかさっぱりわかりません。
間違い個所を指摘してください。お願いします。
519NAME IS NULL:2007/07/20(金) 21:25:39 ID:???
× IDENTIFIELD
○ IDENTIFIED

520518:2007/07/20(金) 21:28:44 ID:???
>>519
ありがとうございます。2時間ぐらい気付きませんでした。
521NAME IS NULL:2007/07/21(土) 13:48:06 ID:???
select * from table where column1 = *** order by column2
これにcolumn3にある単語を含む情報を上位に持ってくるようにしたいんですけど
なにかいい方法はありますか?
column2 でソートした上で column3でソートしたいです。
where column3 = ('%abc%')とかにしてしまうと含まないものは出てこないし…。
わかる方どうかお願いします。
522NAME IS NULL:2007/07/21(土) 16:24:14 ID:RWw8kA+l
質問です
winXP php5.2.3 mysql5 apache2 で開発してます

phpで書いたフォームからdbに日本語のデータを登録できない状況です
SQL文は 
  $sql = "insert into dbtest values(0,'$name')";
  mysql_query($sql);
アルファベットでなら登録できます。なにが原因に考えられるでしょう?
phpの文字コードはutf-8 mysqlの文字コードもutf-8です

今、以下のコマンドをcmdから実行しました。
insert into dbtest values(0,'bakamono');
insert into dbtest values(0,'ばか者');
上のほうは反映されますが、下の方は以下のようなエラーが出ます。
mysql> insert into dbtest values(0,'ばか者');
ERROR 1366 (HY000): Incorrect string value: '\x82\xCE\x82\xA9\x8E\xD2' for colum
n 'name' at row 1

ご意見よろしくおねがいします。
523NAME IS NULL:2007/07/21(土) 20:17:25 ID:???
5.0.45来た。
524NAME IS NULL:2007/07/21(土) 21:03:45 ID:???
ALTER DATABASE pp
DEFAULT CHARACTER SET utf8
DEFAULT COLLATE utf8_general_ci;
COMMIT;


上述のようなSQL文を実行したのですが、実行した事実をいつでも確認できるようにしたいです。
ppの今現在のCHARACTER SETやCOLLATEを見るにはどうしたらいいでしょうか?
よろしくお願いします。
525NAME IS NULL:2007/07/21(土) 21:35:22 ID:???
phpMyAdminで「character set」を変更したいのですが、どうすれば良いでしょうか?
526524:2007/07/21(土) 21:53:27 ID:???
CHARACTER SETはSHOW CREATE DATABASE pp;で見ることができました。
COLLATEの方は見ることができないようです。
527NAME IS NULL:2007/07/22(日) 02:47:09 ID:???
>>522
俺のときは
set names utf-8
を先に実行してからinsertしたら出来た。
528NAME IS NULL:2007/07/22(日) 08:38:38 ID:ihfm4iWJ
>>527
ありがとうございます しかし解決しません。
調べたところ Mysql4.Xまでは my.cnf で set names utf-8 と同じ処理を
デフォルト定義できたみたいですが、 自分のMysqlフォルダの中を探しても
my.cnfが見つかりません。
これが関係してるんでしょうか。。

Mysql 5 以降では my.cnf は存在しないものなんですか?

もう2日もここで止まってる…はぁ〜〜
529NAME IS NULL:2007/07/22(日) 10:39:49 ID:???
>>528
php側で

$name = "ほげ”;
$name = "'" . mysql_escape_string($str) . "'";
$sql = "insert into dbtest values(0,$name)";
@mysql_query("SET NAMES utf8");
@mysql_query($sql);


してもだめ?
530NAME IS NULL:2007/07/22(日) 11:00:51 ID:???
>>521
order by column2, column3 とかすればいいんじゃなかったけ。
531530:2007/07/22(日) 11:05:11 ID:???
あ、ごめん。そういうことじゃないのか。
532NAME IS NULL:2007/07/22(日) 15:51:36 ID:ihfm4iWJ
>>529
ありがとうございます
ただ、もうどうしてもダメだったのでmysql5から4にバージョンダウンしました
そしたら一応入力はできるようになりました。
今度はphpでブラウザに表示すると文字化けしてますが…
mysql4に比べてmysql5の長所ってどんなとこだったんでしょうか?
533NAME IS NULL:2007/07/23(月) 00:23:59 ID:???
すみませんが、間違い個所を指摘してください。お願いいたします。

create table USER_TBL
(
USER_NAME VERCHAR(10) CHARACTER SET 'latin1' NOT NULL  PRIMARY KEY,
PASSWORD VERCHAR(10) CHARACTER SET 'latin1' NOT NULL,
USER_ID INT NOT NULL  UNIQUE KEY,
Created timestamp,
Last_Modified timestamp,
Last_Accessed timestamp
);
534533:2007/07/23(月) 01:11:20 ID:???
実行ユーザーに権限が無いのかも・・・と、今考えています。
ユーザーの権限の調べるのも時間かかるなあ・・・
535534:2007/07/23(月) 01:28:27 ID:???
権限の問題かと思いましたが、エラーメッセージを見るとどう考えても権限ではありませんでした。

エラーコード 1064, SQL 状態 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 'VERCHAR(10) CHARACTER SET 'latin1' NOT NULL PRIMARY KEY,
PASSWORD VERCHAR(10' at line 3
1 行目 1 文字目
536NAME IS NULL:2007/07/23(月) 02:52:21 ID:???
原因がわかりました。
VERCHAR ==> VARCHAR

NetBeans5.5.1で編集していたのですが、VERCHARでも色が変わるんです。まったく疑いもしませんでした。
537NAME IS NULL:2007/07/23(月) 03:42:45 ID:???
また質問なのですが、INT型の列(甲とする)に1,2,3,4,5,6・・・・・・nとあるとき、その幾つかがデリートされたとします。
このとき、1,,3,,5,6・・・・・・・nとなったとします。削除された2と4に新しくINSERTするのに効率的な手段はありますでしょうか?

私が考えた手法は、
1. 新たに1,2,3,4,5,6・・・・・・nという内容の列(乙とする)のあるテーブルを作り、WHERE 甲 != 乙 で存在しない2と4を見つける。
2.
538537:2007/07/23(月) 03:47:16 ID:???
途中でエンター押しちゃった。orz

2. 他のプログラミング言語からループでSELECT i++ FROM 〜 WHERE 甲 != i++; で存在しない2と4を見つける。
539537:2007/07/23(月) 03:55:40 ID:???
続き・・・


3. 1,,3,,5,6・・・・・・・nを定期的に1,2,3,4,5,6・・・・・・nとなるように詰め直す。(普段は最後にINSERTした数字を記録しておき、
  INSERTが必要になったら、+1してINSERTする。)



自分が考えたのは以上、三つです。いっそのこと、ハッシュコードみたいなの生成して、デュプリケートがめったに起こらないようにする方がいいのかもしれないとも思います。
でもそうすると、メモリー食いそうな気もするし・・・難しいです。
540538:2007/07/23(月) 03:59:09 ID:???
ミステイクに気付きました。i++を二回も呼んだら同じ数字にならないですね。毎日徹夜で頭がおかしくなっているのかも・・・。orz
SELECT i++ FROM 〜 WHERE 甲 != i++;
541537:2007/07/23(月) 04:04:58 ID:???
また間違ってた・・・。

WHERE 甲 != 乙   ===> WHERE 乙 != 甲

もう寝た方がよさそうだ・・・・orz
542NAME IS NULL:2007/07/23(月) 04:19:18 ID:???
詰めないとならない、という仕様にする無駄。
543537:2007/07/23(月) 08:56:04 ID:???
>>542
レスありがとうございます。
なるほど、3.はDELETEした数字をすべて記録しておいた方が効率よさそうですね。
544NAME IS NULL:2007/07/23(月) 09:26:07 ID:???
>>528
Windowsにおいてmy.cnfは短縮ファイルとして表示されてしまうので
右クリックから「送る」からテキストエディタを指定するか、
テキストエディタの「ファイル」→「開く」から編集します。

コマンドプロンプト上で日本語を取り扱う場合、
[mysqld]
default-character-SET=utf8
skip-character-set-client-handshake

とskip-character-set-client-handshakeを追記しておかないと
一つ目は接続とクライアントのデフォルトのキャラクタセットがlatin1で
固定されてしまいます。(statusで確認できます) 
545NAME IS NULL:2007/07/23(月) 09:59:01 ID:???
>>537
とりあえずお茶でも飲んで落ち着け。書き込むのはそれからだ
546537:2007/07/23(月) 10:09:51 ID:???
>>545
文章だけで焦りが伝わってしまっているようで申し訳ないです。
547NAME IS NULL:2007/07/23(月) 10:23:38 ID:lWbeE31F
>>544
ありがとうございます。
僕のmysqlは4.1.7なんですが、これだと
C:\Program Files\MySQL\MySQL Server 4.1 にも
C:\Program Files\MySQL\MySQL Server 4.1\bin にもmy.cnfがありません
C:\Program Files\MySQL\MySQL Server 4.1 以下のどこにもないのです。
これって普通ですか? その場合はc\my.ini を修正するしかないの考えてOK?

また、文字化けする原因はクライアントとサーバの文字コードが違うからだとあるサイトに
書いてありましたが、現状は以下の通りです
Server characterset: utf8
Db characterset: utf8
Client characterset: utf8
Conn. characterset: utf8
これに加えて[mysqld]skip-character-set-client-handshake としてるんですが
まだ化けます。。 どうしたらいいんでしょう? 4.0にダウンした方がいいんでしょうか…
548NAME IS NULL:2007/07/23(月) 10:27:31 ID:???
>>537
まさか、AUTO_INC 項目の数字を詰めようとしているのか…?
549537:2007/07/23(月) 10:33:10 ID:???
>>548
いや、AUTO_INCREMENT 属性などという便利なものを知らずに無駄な質問をしてしまったようです。
すみませんでした。
550NAME IS NULL:2007/07/23(月) 10:46:12 ID:???
>>547
4.1系はc:\my.cnf または c:\Windows\my.iniでおこなうようです。
書き忘れましたが私の環境では5.0系です。
http://www.y2sunlight.com/ground/?MySQL4.1%2F3.MySQL%A5%B5%A1%BC%A5%D0%20Windows%C8%C7%A4%CE%C0%DF%C4%EA

それで文字化けするのはphpスクリプトもしくはコマンドプロンプト上のどちらですか?
551500:2007/07/23(月) 10:54:09 ID:???
たいした量じゃないので両方書いておきます。
PHPの場合の対策は下記のblogにまとめられています。
http://www.asial.co.jp/blog/206

コマンドプロンプト上ではコードページ932(Shift-JIS)しか扱えないのと
いわゆるダメ文字によって挙動がおかしくなるので、私の場合は毎回
mysql -u root -p --default-character-set=cp932
set names cp932
をしています。
552NAME IS NULL:2007/07/23(月) 11:03:54 ID:???
>>547
Windows なら、%WinDir%\my.ini
Linux なら /etc/my.cnf

553NAME IS NULL:2007/07/23(月) 11:13:35 ID:lWbeE31F
>>550 ありがとうございます
文字化けするのはphpスクリプトとcmdの両方です
以下のphpスクリプトで文字登録して
<html><head><meta http-equiv="content-type" content="text/html;charset=UTF-8"></meta>
<title>登録</title><body>
<?php
extract($_POST);
$db=mysql_connect('localhost','root','oraora');
mysql_select_db('peartest');
if($name != ""){
$sql = "insert into dbtest values(0,'$name')";
mysql_query($sql);
}
?>
<form action="adodb_write.php" method="post">
名前:<input type="text" row=1 name="name">
<input type="submit"></input></form></body></html>

続きます
554NAME IS NULL:2007/07/23(月) 11:17:56 ID:lWbeE31F
以下のスクリプトでMysqlから読み込んでいます
<html><head>
<meta http-equiv="content-type" content="text/html;charset=UTF-8"></meta>
<title>表示</title>
<body>
<?php
require'adodb/adodb.inc.php';
$sqltype = "mysql";
$server = "localhost";
$user = "root";
$password = "oraora";
$dbname ="peartest";
$DB = NewADOConnection($sqltype);
$DB -> pconnect($server, $user, $password, $dbname);
if(!$DB)die("接続に失敗しました");
$DB->Execute("SET CHARACTER SET EUC-JP;");
$result = $DB->PageExecute("select * from dbtest",100,1);
if(!result){
echo "エラー:".$DB->ErrorMsg()."\n";
}
echo "<pre>";
while($array = $result->FetchRow()){
print_r($array[1]."<br>");
}echo "</pre>";
?>
</body></html>

また、phpから登録したデータをcmdで確認しても、cmdからinsert文で直接登録しても
select * で化けています
あと、良ければ教えて欲しいのですが、mysql5以上にバージョンアップした理由はなぜですか?
決定的な優位性があるんでしょうか?

>>552 ありがとうございます。安心しました、myiniを編集しています。
555NAME IS NULL:2007/07/23(月) 12:25:04 ID:???
>>553 
データベースとhtmlはutf8としている一方で
$DB->Execute("SET CHARACTER SET EUC-JP;");
とクライアントのキャラクタセットはeuc-jpにして下さいと
命令しているのはおかしいと思いませんか?

それとあれもこれもやるのは混乱の元なので、
まずはmysql関数のみで動作をしてから(変数分離の原則)
次にadodbを確認をお願いします。
556NAME IS NULL:2007/07/23(月) 14:07:52 ID:???
>>555
ありがとうございます
$DB->Execute("SET CHARACTER SET EUC-JP;"); に関しては、
これなしでやっても上手く行かなかったので、試しにやってみたものです。
でも、PEARを一旦やめてテストするのは有効そうですね 試してみます
557556:2007/07/23(月) 17:54:26 ID:???
だめだ… 下のスクリプトでもまともに日本語表示しないです
mysql_connect($server, $user, $password);
mysql_select_db($dbname);
$sql ="select * from dbtest";
$result = mysql_query($sql);
while($row = mysql_fetch_array($result)){
print($row["name"]."<br>");
}

もう4.0にバージョン落とすか… 4.1以降の方が優秀なんですかね…
558NAME IS NULL:2007/07/24(火) 00:03:04 ID:???
[MySQL Server] -> [MySQL Client] -> [PHP] -> (HTTP Header) -> [表示アプリケーション]
この5箇所でどの時点でおかしくなったかわからないとどうしようもない。
559NAME IS NULL:2007/07/24(火) 06:58:14 ID:???
>>557
select文を発行する前にmysql_query("SET NAMES 'sjis'");
を追加する、もしくはprintの行を
print mb_convert_encoding($row["part"],"SJIS")."\n";
と置き換えることでコマンドプロンプト上からも日本語が表示できました。

私の環境は以下の通りです。
XAMPP1.6.2(Apache HTTPD 2.2.4 PHP 5.2.3 MySQL 5.0.43)

php.ini
extension=php_mbstring.dll
[mbstring]
mbstring.language = Japanese
mbstring.internal_encoding = UTF-8

my.cnf
[client]
default-character-set=utf8

[mysqld]
default-character-set = utf8
skip-character-set-client-handshake
560556:2007/07/24(火) 09:28:34 ID:lv4xBGF9
>>559
ありがとうございます
PHPでDBに接続後 SET NAMES UTF8 とすることで、
DBからの日本語引き出しを化けることなく成功できました。
cmdでSELECT * すると全部化けてるんですよね これはしょうがないのかなぁ
LINUXで作れば化けないんですかねー
561NAME IS NULL:2007/07/24(火) 09:48:44 ID:???
>>560
どう考えても表示する側の問題
562NAME IS NULL:2007/07/24(火) 12:02:44 ID:???
どう考えても作り手の問題、っていうか同じ話題でスレ汚し杉
563NAME IS NULL:2007/07/24(火) 12:26:16 ID:???
コマンドライン(BASH)からコマンドを実行するにはどうすればいいでしょうか?
以下のようにやっているのですが出来ません。

mysql --user=hoge --password=hogehoge prof -e 'SELECT * FROM `user_data` WHERE `reg_time`>='2007-06-
01' and `reg_time`<='2007-06-30'
564NAME IS NULL:2007/07/24(火) 13:17:33 ID:???
>>563
おお外のクォーテーションはダブルクォーテーションで囲み、
中のクォーテーションはシングルクォーテーションを使ってみ。
また、カラム名は予約語っぽくないのでざわざわ囲む必要なし。
565NAME IS NULL:2007/07/24(火) 17:08:39 ID:NeXV1fCV
すみません。下のphpコードがうまく動きません…

$db = DB::connect("mysql://".DB_USERNAME.":".DB_PASSWORD."@".DB_HOST."/".DB_NAME);
ここで止まる
if (DB::isError( $db )) {
die($db->getMessage());
}

試しに1行目を
$db = DB::connect("postgresql://".DB_USERNAME.":".DB_PASSWORD."@".DB_HOST."/".DB_NAME);
に変えるとなぜか動きます…

どこに原因があるかすらわかりませんのでどなたか教えてください。
566565:2007/07/24(火) 17:09:30 ID:NeXV1fCV
565です。
ちなみにエラーはでなく画面は真っ白になります。
567NAME IS NULL:2007/07/25(水) 02:21:17 ID:???
>>565
$db = DB::connect("mysql://".DB_USERNAME.":".DB_PASSWORD."@".DB_HOST."/".DB_NAME);
じゃなくて
$db = DB::connect("mysqli://".DB_USERNAME.":".DB_PASSWORD."@".DB_HOST."/".DB_NAME);
じゃなかったっけ?mysqlじゃなくてmysql「i」。
568NAME IS NULL:2007/07/25(水) 04:06:36 ID:???
>>565
情報少なすぎ
まずWEBサーバかPHPのエラーログを確認するのが先決
569565:2007/07/25(水) 11:41:51 ID:ANMV9j4t
>>567
$db = DB::connect("mysqli://".DB_USERNAME.":".DB_PASSWORD."@".DB_HOST."/".DB_NAME);

でやると

DB Error: not found

が表示されます。

でも

$db = DB::connect("mysql://".DB_USERNAME.":".DB_PASSWORD."@".DB_HOST."/".DB_NAME);

でやると
真っ白で何も表示されません。
ちなみにこの行の前に

echo "hoge";

とやると表示するのですが、
行の後に書くとやはり何も表示されません。

んで、
$db = mysql_connect(DB_HOST, DB_USERNAME, DB_PASSWORD);
if (!$db) {
die();
}
else {
echo "OK";
}

こうするといけるんです;

>>586
申し訳ありません。

環境としては、

OS:CentOS 3.6
PHP Version 4.3.2
MYSQL Version 2.6.3-pl1
PEAR.php,v 1.50.2.4

になります。

WEBサーバとPHPのエラーログを見てみたんですが特にエラーは出てないんです。
どうもDB::connect()のどこかでdieみたいな感じで止まってるような気が…

申し訳ありませんが引き続きお願いします。

570565:2007/07/25(水) 12:07:28 ID:ANMV9j4t
訂正です。

MYSQL Version 3.23.58

です。

phpMyAdminのバージョンを書いてしまいました;
571NAME IS NULL:2007/07/25(水) 12:10:24 ID:vso8Zt4w
>>565
構成が古いみたいだけど
既存システムのメンテナンスかなんかの作業?
だとしてら今まで動いてたとおもうんだけど
動いてたときと動かなくなったときの違いを
示してみたら?
572565:2007/07/25(水) 12:26:16 ID:ANMV9j4t
>>571
実は今年の5月に借りた専用サーバなんです。
(ちなみにマイティサーバのスタンダード)

んで今回開発用のローカルサーバ(Win)で作成して、
そのファイルを本サーバでテストしようとしたら今回の問題に遭遇してしまいました。

最悪PEARを使わない手もあるんですが、そうなるとDBまわりのソースを全部書き換えないといけないんで
出来ればそれは回避したいです。

引き続きお付き合いお願いします。
573NAME IS NULL:2007/07/25(水) 12:35:36 ID:vso8Zt4w
実機と開発環境のツール類の違いは?
574565:2007/07/25(水) 12:52:03 ID:ANMV9j4t
>>573

| 実機 | ローカル
OS | CentOS 3.6 | Windows Vista Ultimate
PHP | 4.3.2 | 4.4.6
MYSQL | 3.23.58 | 3.23.49
PEAR | 1.50.2.4 | 1.98

こんな感じになります。
Windows…と思われるかもしれませんが、テスト用のlinuxが社内になく、
致し方なくwinでテストしています;

575NAME IS NULL:2007/07/25(水) 12:59:47 ID:???
今年借りたサーバでMySQL3ってなんか嘘くさいっつーか。
576NAME IS NULL:2007/07/25(水) 14:06:03 ID:vso8Zt4w
今皿おそいがWindowsを実機と同等のツールで環境を張った方がよかったね
>テスト用のlinuxが社内になく
っていうのは共感するけどw
linuxのインストールと設定ができるのであればWindowsにVMWare
とかで構築するといいよ。オレはそうしてるから。
577565:2007/07/25(水) 15:48:54 ID:ANMV9j4t
今プライベートのテストサーバ(さくらの共有サーバ)
でさっきのを動かしてみたんですが、問題なく動きました;
どうもPEARのインストールあたりでつまづいてる感じがします…
(レンタルサーバなんでデフォルトでインストールされてる物なんですが…)
一度PEARを再インストールしてみてもう一度試してみようと思います。

>>576
>linuxのインストールと設定ができるのであればWindowsにVMWare
>とかで構築するといいよ。

ありがとうございます。早速試してみます。
社内にテストサーバが無いのは自分とこだけだと思ってましたが、
結構あるんですねw
578565:2007/07/25(水) 16:21:10 ID:ANMV9j4t
追加情報

$db = DB::connect("mysql://".DB_USERNAME.":".DB_PASSWORD."@".DB_HOST."/".DB_NAME);

の"mysql://"の所に"mysql"とか"pgsql"とか本来使えるDBの種類を指定するとだめみたいです。

その代わり"aaaaa"とかありえない文字列にすると$dbにエラーが返ってくるので、
まったくDB.phpが動いてないってわけじゃないみたいです。

ん〜〜Pear自体にバグがあるんですかねぇ?
579NAME IS NULL:2007/07/25(水) 16:34:55 ID:vso8Zt4w
ん〜〜
借りてる専用サーバにどこまで手を入れられる自由度が
あるのか知らないけど
環境更新ができるんだったらyumしてみたら。

これまでの流れで一番疑わしいのはPEARだし。
580NAME IS NULL:2007/07/25(水) 17:39:37 ID:???
>>578
エラーメッセージじゃなくて、PHPとMySQLの
「エラーログ」を見せてよ。
MySQLに繋がったなら、接続ログ残ってるはずだし
それに続いて何か記録されてるでしょ。
581565:2007/07/25(水) 18:49:36 ID:ANMV9j4t
>>580
phpのエラーは出てないみたいでログは無いです。
MYSQLのログはなぜか見つからなくて…
(保存設定の場所に何故か無い)
現在そっちで格闘中ですw
582NAME IS NULL:2007/07/25(水) 20:55:16 ID:dIip1FAH
とみーたのメーリングリストはきもーい
583NAME IS NULL:2007/07/26(木) 00:38:49 ID:pBQax6Oq
データインポート後に、後から各レコードにユニーク番号を振ろうとしてるんですが
いくら修正しても、255以降のレコードが全部勝手に255になってしまう、という現象に悩まされてます。
何が原因なんでしょう?
584NAME IS NULL:2007/07/26(木) 01:33:04 ID:???
>>583
データ型の問題
585NAME IS NULL:2007/07/26(木) 01:42:35 ID:???
>>581
phpのエラーがでないのは
display_errorsがoffになってるからじゃないだろか
586565:2007/07/26(木) 10:17:08 ID:l0TK3yeO
>>585
いえ、他のエラーはちゃんとログに残っているんでそれはないです。
587NAME IS NULL:2007/07/26(木) 10:45:44 ID:ZNlBUxEh
何故に、Using temporary; Using filesort が行われてしまうのか、
エロい人お答えください。
(MySQL 5.1.9にて)


DROP TABLE IF EXISTS TABLE1;
CREATE TABLE TABLE1 (
FIELD1 INT(11) NOT NULL DEFAULT 0,
PRIMARY KEY (FIELD1)
);

DROP TABLE IF EXISTS TABLE2;
CREATE TABLE TABLE2 (
FIELD1 INT(11) NOT NULL DEFAULT 0,
FIELD2 INT(11),
KEY INDEX1 (FIELD1,FIELD2)
);

INSERT INTO TABLE1 VALUES(1);
INSERT INTO TABLE1 VALUES(2);

INSERT INTO TABLE2 VALUES(1, 1);
INSERT INTO TABLE2 VALUES(1, 2);

EXPLAIN SELECT * FROM TABLE1,TABLE2 WHERE TABLE1.FIELD1=TABLE2.FIELD1 ORDER BY TABLE1.FIELD1;


588NAME IS NULL:2007/07/26(木) 12:21:22 ID:???
ORDER BYで2つのカラムから並び順を指定したい場合、どのようになるでしょうか?

例えば
hogeテーブルのseqの降順で並べて同じseqのものはtimeの昇順で並べるといった感じです。
SELECT * FROM `hoge` ORDER BY `seq` DESC `time` ASC
これだとエラーになりました。
589NAME IS NULL:2007/07/26(木) 12:38:52 ID:???
>>588
カンマが抜けてるだけとか
>ORDER BY `seq` DESC `time` ASC 
ORDER BY `seq` DESC , `time` ASC 
590565:2007/07/26(木) 12:42:22 ID:l0TK3yeO
565です

やっと解決しました!!
PEARが問題あると思ってヴァージョンアップしたんですが…

結果は×…

そこで
上のソースには書いてなかった部分ですが、
インクルードパスの部分で

ini_set('include_path','.:/usr/share');
require_once('pear/DB.php');

ini_set('include_path','.:/usr/share:.:/usr/share/pear');
require_once('DB.php');
に変えたら…


いけました!

元々shareにはsmartyやらなんやら入れていたんで、
そのパスにしていたんですが、DB.phpがrequireしている
PEAR.phpの中の諸々のパスが通ってなかったみたいでした…

でもなんでエラーログに残ってなかったんだろう…

とりあえず原因もわかったのでスッキリです!

571さんをはじめレス頂いた皆さんどうもありがとうございました!!

591565:2007/07/26(木) 13:00:36 ID:l0TK3yeO
今思ったんですが激しく板違いな質問でしたね…

本当にお騒がせしました;
592NAME IS NULL:2007/07/26(木) 14:50:37 ID:???
>>589さん
ありがとうございます。
自分の視野の狭さにびっくりです。。。
593NAME IS NULL:2007/07/26(木) 23:46:03 ID:???
phpMyAdminをインストールしたのですが
データベース一覧に「information_schema」というデータベースが表示されます。
これをユーザーが見えないようにしたいのですがどうしたらいいでしょうか?

参考:ttp://www.blockgroup.jp/phpmyadmin/tableadd.html
よろしくお願いします。
594NAME IS NULL:2007/07/26(木) 23:57:40 ID:???
えー加減、phpの問題はそっち関連の板でやれや
595NAME IS NULL:2007/07/27(金) 00:03:57 ID:gg0JCmU1
Windows Vista に MySQL を入れたら異様に接続に時間がかかるんだけど(3秒くらい)
そういった症状ありますか?ver.4.1でも5.0でも変わらず。
ファイアーウォールとかアンチウィルスなんかを切っても変わりません。
接続した後はなんら問題ないんですけども。
596593:2007/07/27(金) 00:28:34 ID:???
解決しますた。
597595:2007/07/27(金) 02:18:11 ID:???
なぜか今やってみたら正常ですた・・・。
なんだったんだろうか。
598NAME IS NULL:2007/07/27(金) 14:33:57 ID:Xo6cJhj9
DATE型のフィールドに誕生日を保存しているのですが、
そこから20歳未満のデータを取得したいのですが何かいい方法はありませんか?

年齢で別に保存しておかなくてはいけないのでしょうか?
599NAME IS NULL:2007/07/27(金) 17:03:26 ID:???
>>598
where 誕生日 > date_sub(curdate(), interval 20 year)
600NAME IS NULL:2007/07/28(土) 14:53:20 ID:X4hyAVEd
自作PHPスクリプトからだとMySQLに接続できるのですが
phpMyAdminを使って接続しようとすると、
Access denied for user 'username'@'localhost' (using password: YES)
とエラーが出てしまいます。
どうすれば良いのでしょうか…?
601NAME IS NULL:2007/07/28(土) 15:18:38 ID:eFtPhvG6
テーブルをまたいでsum値をとりたいのですが、SQLで可能でしょうか?

select sum(data) from table1;

これで、table1のdataの積算が取れますが、同じテーブル構造の

table1,table2,table3

があり、三つのdataの合計値を求めたいんです。
602NAME IS NULL:2007/07/28(土) 16:17:42 ID:???
>>600
phpMyAdminに設定されてるパスワードを確認しる
603NAME IS NULL:2007/07/28(土) 17:08:03 ID:???
>>601
sum(table1.data)+sum(table2.data)+sum(table3.data)

ブルブルブル
604NAME IS NULL:2007/07/30(月) 00:46:38 ID:???
fedoraでmysqlに接続出来るCのサンプルプログラムないですか
ttp://www.mysql.gr.jp/mysqlml/mysql/msg/2834
ここのプログラム参考にしたんですが,undefined reference to `mysql_init'
上記のエラーが出るんですが・・・
605NAME IS NULL:2007/07/30(月) 01:12:51 ID:???
>>604
その質問の仕方だと、Cの初心者?
言語そのものをもう少し勉強するか、使いやすいスクリプトにかえたほうがいいんじゃない?
606NAME IS NULL:2007/07/31(火) 00:03:55 ID:???
mysqlコマンドのソースぐらい解析してパクればいいのに。
607604:2007/07/31(火) 00:49:52 ID:???
クライアントライブラリにリンクしていないだけなのか?
プログラムの問題より開発環境を整えなければ・・・
608NAME IS NULL:2007/07/31(火) 01:16:05 ID:???
WHERE INで検索する値は最大何個なんでしょう。
公式ドキュメント見ても書いてない…。
609NAME IS NULL:2007/07/31(火) 02:03:27 ID:???
ざっと400
610NAME IS NULL:2007/07/31(火) 13:59:13 ID:WUqKUQvr
tbl1
[id][name][point]

[1] [山田][25]
[2] [大川][69]
[3] [東野][78]
[4] [品川][11]

というデータがあり、

tbl2
[id][test][date]

[1] [30] [2007-07-31]
[3] [43] [2007-07-28]
[4] [88] [2007-06-30]
[2] [29] [2007-06-27]
[1] [21] [2007-06-14]
[3] [57] [2007-05-27]

というデータを結合させたいのですが、
tbl2のデータはそのidごとの最新の1件のみ結合させたいのです。

つまり、これをLEFT JOINしてみると
SELECT * FROM tbl1 LEFT JOIN tbl2 ON tbl1.id = tbl2.id

[1] [山田][25] [30] [2007-07-31]
[1] [山田][25] [21] [2007-06-14]
[2] [大川][69] [29] [2007-06-27]
[3] [東野][78] [43] [2007-07-28]
[3] [東野][78] [57] [2007-05-27]
[4] [品川][11] [88] [2007-06-30]

と、同じIDでも複数行になってしまいます。
これを
[1] [山田][25] [30] [2007-07-31]
[2] [大川][69] [29] [2007-06-27]
[3] [東野][78] [43] [2007-07-28]
[4] [品川][11] [88] [2007-06-30]

のように、dateが一番最新の1件のみずつ結合させたいのですが可能でしょうか?
611NAME IS NULL:2007/07/31(火) 14:49:21 ID:HtfeXAjK
>>551
質問する前にログ呼んでいたら俺にとって神っぽいのがあったyo!
612NAME IS NULL:2007/07/31(火) 16:38:23 ID:???
>>610
山田君が心配でなりません
613NAME IS NULL:2007/07/31(火) 16:41:36 ID:WUqKUQvr
>>612
たまたま苦手な科目だったので大丈夫です。
彼は結構努力家なので頑張ればできる子だと思います。
614NAME IS NULL:2007/07/31(火) 19:37:47 ID:???
>>610
グループ化中の最大小値の行抽出は
サブクエリ使うしかなかった様な(?)
615NAME IS NULL:2007/07/31(火) 23:07:36 ID:???
viewってどのタイミングでデータ取得してるんですか?
参照してるテーブルがちょっとでも変わるとコロコロデータ変わるの?
それともviewを参照した時点で変わるんですか?
616NAME IS NULL:2007/08/01(水) 03:27:49 ID:???
>>612
品川君の心配もしてあげてください。
617NAME IS NULL:2007/08/01(水) 11:59:19 ID:???
test
618NAME IS NULL:2007/08/01(水) 12:14:05 ID:???
>>610
tbl2 を id で group by した結果を join する訳だが、group byで
チョイスされるレコードを制御できれば解決だよね?
group by は最初に見つかったレコードをチョイスする特性があるので、
まずサブクエリで並べたい順番に order by した結果を group by する。
619NAME IS NULL:2007/08/01(水) 12:19:08 ID:???
DISTINCTしたテーブルの行をCOUNTで返すことは可能でしょうか?

以下のようなsql文で行の数を返した見たのですが、
重複したすべての行の数も返されてしまいます。

SELECT DISTINCT host, COUNT( host ) AS `行` , `url`
FROM access
GROUP BY `host`
ORDER BY `行` DESC
LIMIT 0 , 30
620NAME IS NULL:2007/08/01(水) 15:57:17 ID:UEnuxYzb
質問、、というかおねがいです。
今、「mysql入門以前」という本を使っていて、ユーザはroot でのみ作業しています。
それで、PHPとの連携とかは多少できるようになったんですが、DBのバックアップなど運用系については
知識皆無です  rootユーザで全部やるとまずいんだろうと思いますが、どのヘンがまずいかなども
よくわかっていません。
なので、その辺について詳しく書いている本を教えてもらえないですか?
単純にcmdからの操作やコードについてでなく、mysqlの運用・保護・セキュリティまで
概念の面でもさっくり解説している解説書を希望してます。
皆さんの経験上これは良かったぞというものがあったらお願いします。

また、ついででいいですが、LINUX+APACHEでのwebサーバ運用のセキュリティ本
(初級〜中級レベル)でオススメの物があったらそれもおねがいします。

済みませんが、よろしくおねがいします。
621620:2007/08/01(水) 16:00:01 ID:UEnuxYzb
すみません 書き忘れてました。
mysqlのバージョンは5です
今の開発はwinXP+apache2ですが、将来は
centOS4 + apache2 で運用したいと思います
どなたかお暇な方おねがいします。
622NAME IS NULL:2007/08/01(水) 16:59:55 ID:???
>>621
ttp://www.atmarkit.co.jp/flinux/index.html

でも、興味のある物から片っ端から読んでみれば
623NAME IS NULL:2007/08/01(水) 20:01:20 ID:???
それぞれのCollationが
どういう順序で照合していくのかは
どうやれば分かりますか?
624NAME IS NULL:2007/08/01(水) 20:37:31 ID:???
show collation
625NAME IS NULL:2007/08/01(水) 21:35:21 ID:???
>>624
それぞれのcollationの詳細が知りたいんです
たとえばutf8_general_ciとutf8_unicode_ciがどう違うのかとか…
626NAME IS NULL:2007/08/01(水) 23:00:11 ID:???
mysqlにおける
データベース名、テーブル名、カラム名の
最大長はいくつでしょうか?
627NAME IS NULL:2007/08/02(木) 01:13:20 ID:???
>>619
count(distinct host) で、どない?
628620:2007/08/02(木) 06:39:25 ID:???
>>622
ありがとうございます
読んでみます
629NAME IS NULL:2007/08/02(木) 18:39:48 ID:???
UPDATE文の中でINNER JOINを使うには
どう書いたらよいでしょうか?
630NAME IS NULL:2007/08/02(木) 18:40:31 ID:???
>>629
UPDATE tbl1 INNER JOIN 〜 ON 〜 SET
でいけるんじゃない?
631629:2007/08/02(木) 19:15:24 ID:???
>>630
できました!構文の順序を間違ってたみたいです。ありがとうございます。
632NAME IS NULL:2007/08/02(木) 20:48:47 ID:???
テーブルではなく、テーブル内の特定行を誤って削除してしまいました。
操作ログはどうやらないようなのですが、これを復旧する方法はあるのでしょうか?

もしあれば、教えていただけないでしょうか……。
633NAME IS NULL:2007/08/02(木) 22:23:02 ID:???
mysql 4.1.20 です。

以下のように、varchar(100) のカラムを作りました。

create table foo (
hoge varchar(100) NOT NULL
)

PHP で、101 文字以上の文字列をこのカラムに insert しても、
桁あふれエラーにならず、100文字で切り捨てられて格納されます。

↓をみても、このような動きは正しいようなのですが、
http://dev.mysql.com/doc/refman/4.1/ja/char.html
> CHAR 型または VARCHAR 型のカラムに、そのカラムの最大長を超える値を割り当てると、
> カラムのサイズに合わせて値が切り捨てられます。

MySQL ってこういうものなのでしょうか??
Oracle とかだと桁あふれで ORA-ほにゃらら が発生するので、
いつもアプリ側で桁チェックしていたのですが・・・
634NAME IS NULL:2007/08/03(金) 08:52:42 ID:zkXqSFX2
MySQL Version 5
UTF-8
という作りのレンタルサーバーを利用しています。

このサーバーに、SJISからEUC-JPにエンコードしたデータを格納し、
EUC-JPからSJISにエンコードして参照している状況なのですが、
「ひらがなによるソート」を試みたときに並びが滅茶苦茶になってしまいます。

「あ→か→さ→た」となるべきところが「た→あ→か→さ」となる感じです。

サーバーのサポートが当てにならないのでここにきました。どこに問題があるのか分かる方がいましたら教えてください。
635NAME IS NULL:2007/08/03(金) 10:46:42 ID:???
>>633
5.0以降ならsql_modeを指定すればOracleのようにできます。
4.1でもsql_modeを指定すればできるかもしれないけど調べてません。
636NAME IS NULL:2007/08/03(金) 10:49:55 ID:???
>>633
create table時にcharsetにujisかeucjpmsを指定すればいいでしょう。

あるいはtextじゃなくてblobにすればソートされる気がするけど、お勧めはしない。

637634:2007/08/03(金) 10:57:30 ID:zkXqSFX2
>>636
このレスは>>634宛とみてよいでしょうか?
ありがとうございます。
早速試してみて、また経過を報告させていただきます。
638NAME IS NULL:2007/08/03(金) 11:09:31 ID:???
>>632
バイナリログか定期的なdumpをしていないのならば諦めるほかあるまい。
639NAME IS NULL:2007/08/03(金) 12:28:57 ID:???
mysql 5.0.x MyISAM だけれども、

・あるはずのデータがqueryされないことがある
・count(*) では正しい件数が出てくる
・原因不明なので、テーブル repairすると特にエラーがあった訳ではないがその後正しくqueryされる

という怪現象に遭遇中、同じ経験をし克服したヤツいますか?
640NAME IS NULL:2007/08/03(金) 12:50:28 ID:???
>>639
indexが壊れてる気がする
myisamchkとかしてみそ
641NAME IS NULL:2007/08/03(金) 15:00:20 ID:???
>>640
ありがとう。
check table すると壊れてないって言ってくるけど、repairすると直る。やはりエラーはなし。
"myisamchk -r xxx" = "repair table xxx" だと理解しているが今度出たらやってみる。
クエリキャッシュがなぜかリフレッシュされないことがあるのか?
と思ってきたので、RESET QUERY CACHE をしてみる。
642634:2007/08/03(金) 19:59:18 ID:???
色々といじってみましたが、解決しないのでもう一度お願いします。
試行したことは以下の通りです。
MySQL の文字セットは UTF-8 Unicode (utf8) ブラウザはShift_JIS
・接続照合順序、テーブルの照合順序をujis_japanese_ciにしてSJISで格納しSJISで出力→ソートが上手くいかず、「か」等の文字で文字化け
・接続照合順序、テーブルの照合順序をujis_japanese_ciにしてSJISで格納しEUC-JPで出力→文字化け
・接続照合順序、テーブルの照合順序をujis_japanese_ciにしてEUC-JPで格納しSJISで出力→「か」やさ行の文字で文字化け
・接続照合順序、テーブルの照合順序をujis_japanese_ciにしてEUC-JPで格納しEUC-JPで出力→文字化け
・接続照合順序、テーブルの照合順序をeucjpms_japanese_ciにしてSJISで格納しSJISで出力→文字化け
・接続照合順序、テーブルの照合順序をeucjpms_japanese_ciにしてSJISで格納しEUC-JPで出力→文字化け
・接続照合順序、テーブルの照合順序をeucjpms_japanese_ciにしてEUC-JPで格納しSJISで出力→文字化け
・接続照合順序、テーブルの照合順序をeucjpms_japanese_ciにしてEUC-JPで格納しEUC-JPで出力→文字化け
・接続照合順序、テーブルの照合順序をutf8_general_ciにしてSJISで格納しSJISで出力→文字化け
・接続照合順序、テーブルの照合順序をutf8_general_ciにしてSJISで格納しEUC-jPで出力→文字化け
・接続照合順序、テーブルの照合順序をutf8_general_ciにしてEUC-JPで格納しSJISで出力→文字化けはないがソートに失敗
・接続照合順序、テーブルの照合順序をutf8_general_ciにしてEUC-JPで格納しEUC-JPで出力→文字化け
・接続照合順序、テーブルの照合順序をutf8_general_ciにしてUTF-8で格納しUTF-8で出力→文字化けはないがソートに失敗

phpmyadminで格納されたデータをみると、どの場合でも「??????」あるいは他の意味不明な文字列になっていました。
localhostではソートも上手くいっていたのですが・・・なぜ上手くいっていたのかもわかりません。
どなたかご指摘お願いします。
643NAME IS NULL:2007/08/03(金) 20:14:59 ID:???
>>642
その調子だと、格納がちゃんとされているのかも怪しいけど
644634:2007/08/03(金) 20:34:38 ID:???
>>643
insertしたい文字列を
$str = mb_convert_encoding($str, "EUC-JP", "SJIS");
としたあとにinsertしていますが、こことは違う問題でしょうか?
645NAME IS NULL:2007/08/03(金) 21:33:44 ID:???
>>642
クライアントの文字セットが何になってるか確かめてちょ。

とりあえずeucjpでつっこむなら、一番最初のSQLで
set names eucjpms

set names ujis
を実行すること。
(上がダメなら set names binary って手もあるけど、オススメはしない)
646634:2007/08/03(金) 21:46:49 ID:???
>>645
643さんとあわせてありがとうございます。

クライアントのほうは| character_set | sjis となってます。
インストールしたままの状態で利用しています。

set namesについては今から試してきます。
647634:2007/08/03(金) 22:23:15 ID:???
>>645
set names UJISを実行したうえで
接続照合順序、テーブルの照合順序をeucjpms_japanese_ciにしてEUC-JPで格納したところ
phpmyadmin上では綺麗にひらがなで表示されていました。うれしいです。

しかしこれをSJISに出力しようとするとやはり文字化けしまうようです。
648NAME IS NULL:2007/08/03(金) 22:49:21 ID:???
>>647
データベースに格納している文字セットに関わらずクライアントで指定している文字セットで取得するので、
(よーするに格納している文字セットとクライアントの文字セットが違う場合は変換してくれるワケ)
クライアントの文字セットが
ujisやeucjpmsになってるなら出力する前にsjisに変換する必要があるし、
sjisやcp932なら変換する必要はないです。

これ以上はたぶんスレ違いなのでPHPスレでどーぞ。
649634:2007/08/03(金) 23:03:18 ID:???
>>648
すみません、言葉足らずだった部分があったのでここだけ訂正します。
PHPの話題になってしまうのですが、
$str = mb_convert_encoding($str, "SJIS", "XXX")
を実行して変換は行ったうえで、なお文字化けしてしまうということをお伝えしたかったのです。

アドバイスを元にまた試行錯誤してきます。丁寧に対応してくれてありがとうございました。
650NAME IS NULL:2007/08/04(土) 13:59:02 ID:HPcoDndd
すみません、質問させてください。
今まで2台のサーバでPHPで作ったウェブサイトのデータベースを運用していました。
それぞれ、my.cnfにて文字コードをutf8とujisに設定してました。
が、このたび、それを1台にまとめて、utf8とujisのデータベースを共存させたいのですが、
うまくできません。

ためしに、my.cnfでdefault-character-setを設定せずに、従来のデータベースをmysqldumpからエクスポートしたものを
そのまま新しいサーバに入れてみましたが、ブラウザからみると見事に文字化け。
その後いろいろと試してみましたが、うまく行きません。
PHPを全くいじらずに、mysqlサーバの設定だけで全てがうまく行く方法はないものでしょうか?
651NAME IS NULL:2007/08/04(土) 14:12:28 ID:???
>>650
運用中である2台のサーバのMySQLバージョンは?
そして1台にまとめたあとのバージョンは?
652650:2007/08/04(土) 15:06:54 ID:HPcoDndd
レスありがとうございます。
元のサーバのバージョンが4.1.20
移行先のサーバのバージョンが5.0.22です。
653NAME IS NULL:2007/08/04(土) 15:34:19 ID:???
>>652
運用中の2台をそれぞれA,Bと、以降先のをCとします。

まず、AとBのダンプをmysqldumpで、オプションに
--default-character-set=utf8を指定して出力する。

そのダンプをCに突っ込めばうまくいくんじゃないのかな?
654NAME IS NULL:2007/08/04(土) 16:17:50 ID:???
質問です。
WHERE句で
`age' = 10 OR `age` = 20 OR `age` = 30

`age` IN (10, 20, 30)
とやるのでは、効率などに違いはないのでしょうか?
動作的には同じ結果が出たのですが、負荷に違いがでるのか気になります。
655NAME IS NULL:2007/08/05(日) 10:37:40 ID:???
INのほうが速い
656NAME IS NULL:2007/08/05(日) 12:21:47 ID:ihsPXEFs
5.1は永遠のベータ版ダナ〜
657NAME IS NULL:2007/08/05(日) 15:13:27 ID:???
utf8に統一すれば、問題回避できるのにアフォな香具師が多いな。
658NAME IS NULL:2007/08/05(日) 15:38:56 ID:???
UTF-8に統一できない政治的問題が多いからな
クライアントの指示が絶対だったりサーバに手を入れることが
不可能だったり
659NAME IS NULL:2007/08/05(日) 16:54:43 ID:???
MyISAM VARCHAR(100)のフィールドに数値2.2(引用符囲まず))をINSERTすると
2.1900000000〜〜
と近似値小数点以下数桁で格納されてしまいます、
仕様でしょうか?
660NAME IS NULL:2007/08/05(日) 21:59:35 ID:???
4.1.18で上記現象を確認しました、
5.0.27では「2.2」そのままで格納されました・・・4.1系特有の現象(バグ?)でしょうか・・。
661NAME IS NULL:2007/08/05(日) 23:25:27 ID:???
>>660
そうだよ。仕様だけどな。

公式にもあったよ。桁数がたんねーから丸まるってさ。
662NAME IS NULL:2007/08/06(月) 16:37:01 ID:/MGn34vw
MySQLで独自の関数みたいなものを作る方法はあるのでしょうか?
663NAME IS NULL:2007/08/06(月) 18:23:32 ID:???
>>662
udf
664NAME IS NULL:2007/08/06(月) 21:09:02 ID:???
MySQL 4.1.20 です。

InnoDB でテーブルを作成しました。
(正確には MyISAM でテーブルを作って、InnoDB に変更しました)

質問が2点あります。

○1:
mysql コマンドで DB に接続し、
> set autocommit=0;
を実行すればオートコミットは off になりますが、
たまにやりわすれてしまい、さらにそのあとの更新系の SQL を間違えて
データを余計に消したりしてしまいます。

set autocommit=0; をデフォルトの挙動にすることはできますか?
my.conf に書けないかなとぐぐったのですが、見つかりませんでした。

○2:
set autocommit=0; や begin; や rollback: は、
コマンドドラインの mysql コマンドで SQL を投げているときは有効ですが、
MySQL Administrator の Edit Table Data で開く MySQL Query Browser では
トランザクション管理が効きません。

begin; [alt + enter]して、画面下部に Query returned no resultset. と表示された後、
更新系の SQL を投げて、 rollback; [alt + enter] しても、
ロールバックされずにコミットされているようです。

MySQL Query Browser でトランザクション管理するには
どうしたらいいでしょうか?
665NAME IS NULL:2007/08/06(月) 21:35:47 ID:FNS0/TEW
運用中のサイトとのかねあいで
mysql4.0をダウンロードしたいのですが
mysqlのサイトで該当ページを見つけることができません。
どこでダウンロードできるのでしょうか?
666NAME IS NULL:2007/08/06(月) 21:41:27 ID:???
>>665
MySQL入門以前って本に 4.0のバージョンが付いている。どこぞでダウンロードできるかどうかは知らね。
667NAME IS NULL:2007/08/06(月) 21:44:12 ID:???
668NAME IS NULL:2007/08/06(月) 22:00:58 ID:???
ODBC関数のodbc_fetch_rowと同じものってMYSQL関数にある?
669NAME IS NULL:2007/08/07(火) 16:45:54 ID:???
毎週x日リセットのレンタルランキングシステムを作ってるんですが、DB構造で悩んでます。
以下のどちらがいいでしょうか?

1)[site_tbl]サイト情報(`site_seq`,`id`,`pass`,`title`等)にリセット日を入れてcronでチェック
2)別にテーブル[reset_tbl]を作る(`site_seq`,`reset_day`)

どちらが一般的でしょうか?
また、作成したことがある方いらっしゃいましたらテーブル構成を見せていただけないでしょうか?
670NAME IS NULL:2007/08/07(火) 18:27:20 ID:???
>>669
説明が下手だね。
良くわかんないけど、テーブル的に期間は気にせずにdailyとか溜めていってクエリで特定の期間内を条件にランキングを出せば。
671NAME IS NULL:2007/08/07(火) 19:46:33 ID:idn6dm6M
2つのテーブルに入ってるデータの重複カウントを取りたいのですが、
どうやるのが一番軽いでしょうか?
select count(*)
from a,b
where a.data = b.data
では応答がなくなってしまいました。
テーブルaには15万行のデータがあります。
またテーブルbには2万行のデータがあります。
実行環境はwindowsのヘボマシンです。
無理でしょうか?
672NAME IS NULL:2007/08/08(水) 02:09:47 ID:lZHQNHvN
phpMyAdminでテーブルのチェックをやると、
table 〜 is marked as crashed and shuld be repaired
と表示されるようになりました。
マークをされたのは分かりましたが、
このマークはいつの段階で利用されるのですか?
再起動時でしょうか?
673NAME IS NULL:2007/08/08(水) 02:18:10 ID:lZHQNHvN
myisamchkでrapairしたら出なくなりました
自動で行われるのではなく、
こんなふうに自分でやらないといけないのでしょうか・・・
674NAME IS NULL:2007/08/08(水) 23:15:38 ID:???
675NAME IS NULL:2007/08/09(木) 04:13:09 ID:???
mysqlで、サーバのメモリが4GBとして、
1GBぐらいのデータベース(書き換えはあっても増えないデータベース)
をメモリ上に常駐して高速化する方法ってあるんでしょうか?
(更新データは随時ディスクに書き込み)
676NAME IS NULL:2007/08/09(木) 04:36:15 ID:svmYyWXz
http://dev.mysql.com/doc/refman/4.1/ja/using-mysqlcheck.html
ここに、
myisamchk が、サーバが実行していないときに使用するのに対し、
mysqlcheck は mysqld サーバが実行しているときに使用します。
と書かれていますが、
稼働中にmysqlcheckを実行した時、
テーブルは普通にアクセスできるのでしょうか?
それともロックされて、アクセス不可能な状態になるのでしょうか?
677NAME IS NULL:2007/08/09(木) 07:06:23 ID:cTeGMyVr
質問です
以下のテーブルを作成し
mysql> create table m_member(
-> id mediumint not null auto_increment,username varchar(50),
-> password varchar(50),last_name varchar(50),
-> first_name varchar(50),birthday char(8),
-> ken smallint,reg_date date,
-> cancel date,PRIMARY KEY(id));
以下のinsertをしたところエラーがでました なぜでしょう? よろしくお願いします
mysql> insert into m_member(username,password,last_name,first_name,birthday,ken,
reg_date,cancel) values('user','1a1dc91c907325c69271ddf0c944bc72','苗字','名前',
'20050101','1',now(),NULL);
ERROR 1406 (22001): Data too long for column 'last_name' at row 1
678NAME IS NULL:2007/08/09(木) 08:59:55 ID:???
679NAME IS NULL:2007/08/09(木) 12:29:27 ID:???
>>677
文字コードっぽいね
680NAME IS NULL:2007/08/09(木) 13:29:48 ID:???
>>675
他にメモリを食うプロセスが走ってなければ、
そのくらいならOSがメモリにキャッシュするんじゃないかと期待。
変なOS使ってなければの話だけど。
681NAME IS NULL:2007/08/09(木) 20:40:56 ID:???
MySQLで遊んでみたいのですが、ライセンス料金がかかると言われました。
個人で触ってみたいのですが、ライセンスキーを購入しないと行けないでしょうか?
商用でMySQLを使っているサイトは、すべてお金を払って使っているのでしょうか?
682NAME IS NULL:2007/08/09(木) 21:31:54 ID:???
FC6でMySQLServerが動作しており,そのマシン上でQuery Browserをインストールして
データベースへアクセスすることはできますが,Cのプログラムを用いて,
mysql_real_connectで接続することができません.

サーバ側に何か設定等が必要ですか.
683676 :2007/08/09(木) 23:11:09 ID:???
やっぱりロックされますね
checkしている対象テーブルだけじゃなく
関係ないdbにすらアクセスできなくなる。
稼働中にほいほい気軽に実行できるモンじゃないんですね
684NAME IS NULL:2007/08/10(金) 11:42:33 ID:qyxNqw9Z
ID毎に設定された連番の最大値 + 1をINSERTしたい場合って
どうやるのが一番スマート?例えば

ID NUM
1 1
1 2
1 3
2 1
2 2
3 1
3 2

みたいなテーブルがあって、IDが1の場合にはNUMに4を入れたいって場合、
いちいち SELECT MAX(NUM) FROM TABLE WHERE ID = 1 やんなきゃ
ならんのかね?

KEY毎にAUTO_INCREMENT設定みたいのはないよね?
685684:2007/08/10(金) 11:54:41 ID:qyxNqw9Z
ごめん、>>684はID、NUM以外にPRIMARYな列があり、
そこに既にAUTO_INCREMENTがされている状態って前提
686NAME IS NULL:2007/08/10(金) 12:18:28 ID:k2YUxwj6
初歩的な質問ですみませんが
例えば
select * from a left outer join b〜 left outer join c〜
みたいに書くと
テーブルAに対してそれぞれBとCのテーブルがleft outer joinされるのか
それともテーブルBに対してCのテーブルがleft outer joinされるのでしょうか?

自分は前者として考えて使っているのですが間違っていますでしょうか?
687NAME IS NULL:2007/08/11(土) 02:52:31 ID:e9CmJUOZ
show table status;
を実行すると、テーブル一覧とその属性が表示されますが、
項目が多すぎて見にくいです。

必要な項目だけ絞って表示することはできますでしょうか。
たとえばテーブル名(Name)と更新日時(Update_time)のみを表示する、
といったことがしたいです。
688NAME IS NULL:2007/08/11(土) 18:58:14 ID:???
desc カラム名
689NAME IS NULL:2007/08/13(月) 14:01:48 ID:mHaldFym
データベースの大きさってどのくらいになるのかって話です。データベースによって違うと思うのですが、MySQL を使いたいなと思っているので、ここに書き込みます。

例えば、1 レコードあたり、数値・文字列などの情報で 100 byte のデータを 100,000 件データベースに投入すると、

100 * 100,000
= 100,000,000 byte
= 95 MB

のようなディスクの領域が必要になるのでしょうか?
検索用のインデックスとかを保存する領域とかも他に必要になってくるんですかね?

どんな計算をするものなのか、教えてもらえたらと思います。
または「ここを見ろ」などの情報でもありがたいです。

よろしくお願いします。
690NAME IS NULL:2007/08/14(火) 12:52:48 ID:vLfyd2Go
>>689 です。

人が少ないようなので、他でもきいてみます。
マルチポストになりますが、すみません。
691NAME IS NULL:2007/08/14(火) 14:02:46 ID:???
>>689
show table status like 'hoge'; の出力を見ると当たり前だが・・
Avg_row_length * Rows が DBファイル "hoge.MYD" のニアリサイズになる。
Avg_row_lengthを基準にして今後のレコードの増加によるDBのディスクサイズを想定する。
つまり可変長テーブルではある程度データが揃わないと算出できない。
また削除や更新が頻繁に行われるとフラグメーションが起こるので注意。
MyISAM なら optimize table で解消される。
692NAME IS NULL:2007/08/14(火) 14:04:55 ID:???
>>684
サブクエリを使え。
SELECT MAX(NUM)+1 FROM TABLE WHERE ID=1 か。
693NAME IS NULL:2007/08/14(火) 15:37:13 ID:r5/gZLeq
ちょいと気になったんだが
一回のクエリに一本のインデックスしか使わないMySQLだけど、
サブクエリの場合、それぞれのクエリに別々のインデックス使えるの?
694NAME IS NULL:2007/08/14(火) 15:47:02 ID:???
PHPだとdb_convert_encodingで文字コードのコンバートができますが,
C言語はこのような関数はありますか?
695NAME IS NULL:2007/08/14(火) 18:06:10 ID:???
>> 693
使える
696NAME IS NULL:2007/08/14(火) 19:47:30 ID:???
>>695
そうなのかー
サブクエリ化することで高速化する
みたいなこともできそうだね
ありがとう
697NAME IS NULL:2007/08/14(火) 21:48:31 ID:???
>>696
サブクエリでなくて複数テーブルの join でもテーブル毎にインデックスが使われる
698NAME IS NULL:2007/08/15(水) 00:32:13 ID:???
>>693
あれ、これって5.0だか5.1で変わってなかったっけ?
699NAME IS NULL:2007/08/15(水) 11:06:39 ID:???
>>698
explain すれば一目瞭然。
700NAME IS NULL:2007/08/15(水) 16:52:21 ID:TNiife/O
Linuxで取得したmysql 3.23のdumpファイルを
Windows版のMySQL 3.23にリストアしようと
mysql < dumpfile
したら
Unknown command '\n'.
って表示されるんだが、
dumpファイルのTEXT型の列のデータに
'\n'が含まれている場合に、
エラー無くリストアする手段を教えてください。
701700:2007/08/15(水) 17:03:49 ID:???
情報後出しスマソ。
dumpファイルの文字エンコードはutf8だった。
Databaseのデフォルトキャラクタセットはlatin1。

このあたりの問題だとしたら、
どうやったら回避できるのでしょうか?
702NAME IS NULL:2007/08/15(水) 17:28:36 ID:???
>>701
で、このまま latin1 で運用続けるつもりかい?
703700:2007/08/15(水) 18:45:37 ID:???
>>702
latin1にこだわりはないので、
MySQLの再インストールも辞しません。
704NAME IS NULL:2007/08/15(水) 22:51:59 ID:???
ちょ・・ま・・・改行コード落ちじゃねぇだろな
705NAME IS NULL:2007/08/16(木) 00:39:48 ID:???
1つのテーブルに
seq| 種別 | 生産日 | 販売日 | 修理日 |
1 | 1 |2000-01-01|2001-01-20|2002-01-25|
2 | 1 |2000-01-01|2001-01-20|2003-01-25|
3 | 1 |2000-01-01|2001-01-20|2003-02-25|
4 | 1 |2001-01-01|2001-01-20|2003-01-25|
5 | 2 |2000-01-01|2001-01-20|2003-01-25|

というデータがあった場合。
修理日2002-01-01〜2003-12-31で検索した場合、SEQ 1,4,5のデータを
修理日2003-01-01〜2003-12-31で検索した場合、SEQ 4,5のデータを1つのクエリで取得したいのですが可能でしょうか?
具体的には、種別、生産日、販売日の組が同じものは同一の品物とみなし、
最古の修理日が指定範囲に入っているかどうかを判定したいのですが上手く行きませんでした。
OS:Windows Xp
DB:Mysql 4.0.27

作成し失敗したsql(最古修理日を指定する前にエラーになります。実際のカラム名はローマ字です)
mysql> SELECT seq,種別,生産日,販売日 FROM table
-> WHERE (種別,生産日,販売日) IN
-> (SELECT DISTINCT 種別,生産日,販売日 FROM table
-> WHERE 種別 IS NOT NULL
-> AND 生産日 IS NOT NULL
-> AND 販売日 IS NOT NULL
-> AND 修理日 IS NOT NULL);
ERROR 1064: You have an error in your SQL syntax. Check the manual that corresp
onds to your MySQL server version for the right syntax to use near '生産日,販売日) IN
(SELECT DISTINCT 種別,生産日
706NAME IS NULL:2007/08/16(木) 02:18:59 ID:???
効率悪いかも知れんけど、こんな感じで行けると思う。
seq無しでもレコードが一意になるなら最後のgroup by等は不要。

select min(seq), 種別, 生産日, 販売日, 修理日
from table1
where(種別, 生産日, 販売日, 修理日) in
(select 種別, 生産日, 販売日, min(修理日)
from table1
group by 種別, 生産日, 販売日
having min(修理日) between '2002-01-01' and '2003-12-31')
group by 種別, 生産日, 販売日, 修理日;
707NAME IS NULL:2007/08/16(木) 02:52:15 ID:???
4.0はサブクエリ使えんでしょ
708705:2007/08/16(木) 07:57:47 ID:???
>>706 さん
>>707 さん
制限の無いサブクエリをサポートしたのが4.1〜だと気づかず構文エラーを繰り返して、悩んでおりました。
JOIN を使うか、アプリ側で制御する事にします。
ありがとうございました。
709NAME IS NULL:2007/08/16(木) 10:43:08 ID:???
>>700
Windows版か・・・
Windowsディレクトリとかにある my.ini をエディタで編集し、
[mysql] と [mysqld] の下に default-character-set=utf8
を追加してサービスを再起動する。
Windows版にはadminツールみたいなGUIアプリが付いているみたいだけどそこかも出来るかも。

710NAME IS NULL:2007/08/17(金) 06:33:34 ID:???
MySQL 5.0.27 + MySQL ODBC Connector 5.00.11-beta + C でコーディング中
my.ini で [client][mysql][mysqld] 全部 default-character-set=utf8 を指定して再起動
コンソールから status; show variables like '%char%'; で全部 utf8 になってるのを確認
ODBC クライアント側でデータ取り出すと日本語文字化け(なんか余計な変換して壊してるっぽい)
接続後に set character set utf8; ステートメントを発行しても同じ
ついでに念のため skip-character-set-client-handshake も指定しても変わらず
ODBC 使わずに libmysql (mysqlclient) 使ったら utf8 でちゃんとアクセス出来ている
つまり ODBC のバグっぽ
こんな漏れに愛の手を
711sage:2007/08/17(金) 07:39:19 ID:???
何が問題なの?
712700:2007/08/17(金) 23:11:42 ID:???
>>704
改行コードは全てのINSERT文ごとに
入っているように見えるのですが、
確実にCRLFかと言われると
そうでないかもしれませんね。
念のため、dumpファイルの中身を
再確認したいと思います。

>>709
試してみたんですが、
MySQLのサービスが正常に起動しませんでした。

自分のやり方が間違っていないか、
月曜に再確認しながらやってみます。
713NAME IS NULL:2007/08/17(金) 23:56:55 ID:???
>>710
MySQLのODBCは昔からバグだらけ
直す気ないみたいだから
素直にlibmysql使うが吉
714NAME IS NULL:2007/08/18(土) 00:37:18 ID:Jizu4jHd
侵入されたようだ。
ネットに似たような症例が見付からなかったので書いとく。

3.23.52をパスワードなしで動かしっぱなしにしていた。
McAfeeのウイルス警告で気付いた。
C:\clown.dll、C:\windows\system32\clown.dll
が突然作成され、McAfeeがこのファイルを削除した。
このときネットワークを確認すると、
mysqld-nt.exeの3306ポートから
外部の220.64.218.159と220.118.88.20に接続した
2つのセッションが存在していた。
ネットワーク停止後、mysqlを自動起動しないようにした。

http://itpro.nikkeibp.co.jp/free/ITPro/USNEWS/20050128/155389/
と発生条件は同じだが、症状は異なるみたい。
データベースmysql内のテーブルは
columns_priv, db, func, host, tables_priv, user
のみ。funcの中身は空。
実害があったのか、今のところ不明。
715NAME IS NULL:2007/08/18(土) 04:20:22 ID:???
パスなしで使う香具師は馬鹿
3306を外部に開放する椰子も馬鹿
716NAME IS NULL:2007/08/18(土) 08:47:53 ID:???
DB鯖をインターネットに繋いでる時点で論外。
DB鯖は、ファイヤーウォールの中で動かすものだし。
717NAME IS NULL:2007/08/18(土) 19:15:09 ID:???
MySQL 4.1.15
テーブル Shouhin
Goods_id 5桁の数字
Joken_a 1,2,3
Joken_b 1,2,3
とあり、Joken_aから1,2のみを取り出したいけど、
Joken_aが1のものについてはJoken_bから3のみを取り出したい
と言った時にどういう風にSQLを書けば良いんでしょうか
718NAME IS NULL:2007/08/19(日) 07:25:59 ID:???
select * from Shouhin
where (Joken_a = 1 and Joken_b = 3)
or Joken_a = 2;
719NAME IS NULL:2007/08/19(日) 07:34:27 ID:???
>>718
あぁ、or でつなげば良いんですよね。すいませんでしたm(__)m
720NAME IS NULL:2007/08/19(日) 13:06:47 ID:???
Cでプログラムをしているんですが,
int uid = 123;
として,UserInfoテーブルからUserIDが123を取り出したいのですが以下ではできません.
mysql_query(mysql, "SELECT * from UserInfo WHERE UserID=uid");
「UserID=uid」この部分はどのように記述すれば良いですか?
721NAME IS NULL:2007/08/19(日) 13:48:44 ID:???
>>720
ちゃんとCの勉強してる? intを文字列に変換して連結でしょ。
もいっこのやり方は…書くのめんどい。
722NAME IS NULL:2007/08/19(日) 14:12:00 ID:???
すまない.連結?がよくわからない・・・
723NAME IS NULL:2007/08/19(日) 14:56:48 ID:???
char *querystring = "SELECT * from UserInfo WHERE UserID=%d";
sprintf(querystring, querystring, uid);
mysql_query(mysql, querystring);
724NAME IS NULL:2007/08/19(日) 15:46:50 ID:???
>>723
小学校からやりなおせよ低脳
725720:2007/08/19(日) 16:02:03 ID:???
sprintf(querystring, "\"SELECT * from UserInfo WHERE UserID=%d\"", uid);
mysql_query(mysql, querystring);

このやり方は無理?
726720:2007/08/19(日) 16:22:04 ID:???
サンクス.できた
727NAME IS NULL:2007/08/19(日) 23:52:54 ID:???
個人情報のテーブルを作ろうと思っています。
ex) 名前|性別|年齢|趣味|・・・・

レコードを追加していってレコードの数が大きくなったら、
テーブルを分けた方が良いのでしょうか?

※「良い」というのは、参照効率やメモリ・CPUの負荷、等の面で
728NAME IS NULL:2007/08/20(月) 00:15:28 ID:???
そりゃあーた何をどうしたいかによる罠、
依存関係やらどう運用するかで決まるし、
最初の設計で皆苦労しとるんよ。
729NAME IS NULL:2007/08/20(月) 02:49:49 ID:R3oVd09H
ライセンスの件で質問です。
バンドメンバー募集サイトのWebアプリケーションを
個人で作っているのですが、MySQLはサーバー側のみで
使用するので当然アプリやMySQLを配布する訳ではないので
有料ライセンスにはならないですよね。
スポンサーの広告収入で運営したいと思っているので
一応商用サイトにはなると思うのですが。
730NAME IS NULL:2007/08/20(月) 02:56:35 ID:???
>>729
アプリを配布しないのであれば無問題
731NAME IS NULL:2007/08/20(月) 03:02:42 ID:???
>>730
ありがとうございます、スッキリしました。
732NAME IS NULL:2007/08/20(月) 12:50:01 ID:???
>>727
DBのファイルサイズがでかくなり上限の4G超えそうになったり、でかすぎてパフォーマンスが
落ちてきたら merge table すればいいじゃないかい。
ttp://dev.mysql.com/doc/refman/4.1/ja/merge.html
733NAME IS NULL:2007/08/20(月) 12:54:32 ID:???
>>724
よく見ると恐ろしい sprintfだな。
しかし小学校では女子だけ体育館に集合する事はあってもCの勉強はないヨ。
734NAME IS NULL:2007/08/20(月) 18:18:02 ID:???
ぱっと見でおかしいだろ。
735NAME IS NULL:2007/08/20(月) 22:15:18 ID:prQ3mqs2
5.0.41のWindows用ソース(mysql-5.0.41-win-src.zipかmysql-5.0.41-win-src.tar.gz)を探しているのですが、見つかりません。
Sennaのコンパイルに.dswファイルが必要なのです。
どこにあるのでしょうか?
736735:2007/08/20(月) 22:17:41 ID:prQ3mqs2
>>735
mysql-5.0.41.tar.gzには.dswファイルはありませんでした。
737NAME IS NULL:2007/08/20(月) 22:45:51 ID:???
そんなファイルはありまsenna
738NAME IS NULL:2007/08/20(月) 23:10:04 ID:???
mysql-5.0.45-win-src.tar.gz があるけど
こっから取り出したらいいんじゃないかな
739NAME IS NULL:2007/08/20(月) 23:20:17 ID:IoKE2vQO
SQLについて(というかデータベースについて)かなり初心者のものです。
いま、JAVAで書けば次のようなインスタンスの配列を管理したいと考えています。

class Student // 生徒データ
{
  int number;
  String class_name;
}

class ClassRoom // 教室データ
{
  String name;
  Vector<String> student; // この教室の生徒のnumberの配列
}

この関係をデータベース化するにはどのような構成にすればよいのでしょうか?

CREATE TABLE STUDENT
(
  number INTEGER UNIQUE,
  class_name CHAR(20) REFERENCES classroom(name),
);

CREATE TABLE CLASSROOM
(
  name CHAR(20) UNIQUE,
  /* STUDENTの配列の管理方法がわからない */
);

CLASSROOMの新しい要素がINSERTされるたびに、追加されたCLASSROOM.nameと同じ
名前のテーブルを作り、そこに格納するという方法が考えられますが、
その方法はベストといえるのでしょうか?
当方かなり初心者です、ご指導お願いいたします。
740NAME IS NULL:2007/08/20(月) 23:21:20 ID:???
Vector<String> student; // この教室の生徒のnumberの配列

Vector<int> student; // この教室の生徒のnumberの配列
でした、しつれいしました。
741NAME IS NULL:2007/08/20(月) 23:29:20 ID:???
>>728
>>732
なるほど、ありがとうございました。

レコードを1行作ってみてどの位の大きさになりそうか見積もってみます。

日本国内をターゲットにしたのサイトなので、最大約1億レコードで
運用上問題なければOKかと・・・(笑)
742735:2007/08/21(火) 00:05:52 ID:oSdLFFt+
>>738
 レスありがd
 unix系に不案内なのでよく分からないのですが、そんなモンなのでしょうか?
 っていうか、.dswなのでWindowsの話?

 とりあえず、やってみます。
743NAME IS NULL:2007/08/21(火) 01:15:19 ID:iiLEoTiD
>>739
CREATE TABLE STUDENT
(
  number INTEGER UNIQUE,
  class_name CHAR(20) REFERENCES classroom(name),
);

CREATE TABLE CLASSROOM
(
  class_id INTEGER,
  name CHAR(20) UNIQUE,
  /* ここはクラスごとの属性 */
);

CREATE TABLE STUDENTINTHECLASSROOM
(
  class_id INTEGER, /* number of ClassRoom */
  number INTEGER, /* number of Student */
);
744NAME IS NULL:2007/08/21(火) 11:45:07 ID:???
>>743
参考になりました、どうもありがとうございます。m( )m
745NAME IS NULL:2007/08/21(火) 13:37:17 ID:???
昔は第三正規化とか言ってたけどいまはそういう名称使われないの?
746NAME IS NULL:2007/08/21(火) 22:51:04 ID:???
いや使うだろ。
ただ、不勉強な人にそんなことを言っても通じないだろうから使ってないんじゃね?

747NAME IS NULL:2007/08/22(水) 02:44:59 ID:???
>>745-746

>>739 もひどいが
>>741 もいまいちだよな
748700:2007/08/22(水) 10:16:01 ID:???
コマンドプロンプトから、
mysql db_name -u user_name --password=password < dump_file_name
って実行すれば何の問題もなく流れました。

己の愚かさに反省。orz
そして助言してくれた皆様に感謝。
・・・吊ってくる ノシ
749NAME IS NULL:2007/08/22(水) 12:15:06 ID:???
テーブルadminに対してテーブルclientがあります。
adminの特定データを削除するときに関連するclientのデータも
一気に消したいと思い下記のようなSQLを実行しましたが
adminのデータは削除できませんでした。

DELETE admin a, client b FROM admin a
LEFT OUTER JOIN client b ON a.id = b.id
WHERE a.id = 1

このときのclientには、まだ関連するデータが無い状態です。
こういう場合は、別々にSQLを切らなきゃダメでしょうか?
750NAME IS NULL:2007/08/22(水) 12:29:10 ID:???
↑これですが、私の確認ミスで問題ありませんでした。
スレ汚し失礼しました。
751NAME IS NULL:2007/08/22(水) 16:18:43 ID:JIJXKf2H

backup200701.sql
backup200702.sql


上記のように、あるテーブルのデータを月別に出力したファイルが数か月分あるのですが、

mysql dbname < backup200701.sql -u root -p pass
mysql dbname < backup200702.sql -u root -p pass

とインポートすると、一度drop table してるようで、前にインポートしたレコードが消えてしまいます。
これを01を消さずに02,03と追加していく良い方法ないでしょうか?
752NAME IS NULL:2007/08/22(水) 17:02:18 ID:???
backup******.sqlの中にdrop tableやらcreate tableやら入ってるだけじゃないの?
元のファイルのエクスポート方法を見直すのが一番速いと思うけど
それが出来ないならシコシコとコメントアウト。
753NAME IS NULL:2007/08/23(木) 02:50:09 ID:???
公式から、ダウンロードするとき
個人情報を入力しないといけないようになりました?
754NAME IS NULL:2007/08/23(木) 07:28:32 ID:???
>>753
skipしていけば問題なし
755NAME IS NULL:2007/08/23(木) 09:57:56 ID:???
>>754
あ、小さい文字でなんかありました。
ありがとうございます。
756NAME IS NULL:2007/08/23(木) 13:57:40 ID:???
element_tbl
 user_seq
 master_seq
 number

user_tbl
 user_seq
 name
 age

master_tbl
 master_seq
 item

こんなテーブルがあった時、

select `user_tbl`.`user_seq`, `user_seq`.`name`, `element_tbl`.`master_seq` FROM `user_tbl`, `element_tbl`
 WHERE `user_tbl`.`user_seq`=1 and `user_tbl`.`user_seq`=`element_tbl`.`user_seq` GROUP BY `element_tbl`.`elememt_seq`;

このとき、element_seqをORDERする際、`number`が一番若いものの`master_seq`を取り出したいのですがどのような書き方があるでしょうか?
757NAME IS NULL:2007/08/23(木) 14:21:08 ID:???
>>756
過去ログ嫁
>>618
758756:2007/08/23(木) 14:45:09 ID:???
>>757さん
ありがとうございます。JOINは使ったことがなかったので読んでみます。

なんどもごめんなさいですが、以下の場合も教えていただけるとありがたいです。

select `user_tbl`.`user_seq`, `user_seq`.`name`, `element_tbl`.`master_seq` FROM `user_tbl`, `element_tbl`
 WHERE `user_tbl`.`user_seq`=`element_tbl`.`user_seq` GROUP BY `element_tbl`.`elememt_seq` ORDER BY `user_data`.`age` DESC LIMIT 0,5;
759NAME IS NULL:2007/08/23(木) 16:40:52 ID:???
>>758
group by は最初に見つかったレコードをチョイスする特性があるので、
まず element_tbl をサブクエリで並べたい順番に order by した結果を group by する。
760NAME IS NULL:2007/08/23(木) 21:23:22 ID:iOrH9/U/
1テーブルに付き、どのくらいのフィールド数にするのが適切ですかね?

やたらと入力(フィールド)項目があるアンケート用のシステムを
組まなくてはいけなくなり、フィールド数だけで、100以上はあります。
だから、用途毎に分けてJOINで結合する予定ですが、
それでも、5,6テーブルを結合する必要があり、
処理が重くならないか懸念してます。

皆さんはこういう場合どうしてますか?やはり複数テーブルを結合してますか?
761NAME IS NULL:2007/08/23(木) 22:09:04 ID:???
複数テーブルを結合してます
762NAME IS NULL:2007/08/23(木) 22:28:09 ID:???
>>760
正規化する必要がなければ1テーブルに入れるのが基本
しかも100オーバのフィールド数なんて珍しくないし
763NAME IS NULL:2007/08/23(木) 22:30:42 ID:???
データディレクトリに、ホスト名.lower-testがあって、
mysqld起動時にファイルシステムに書きに行っているようなのですが
これって何なんでしょう。。

リファレンスやGoogleさんにも、それらしい記述を見つけることができないので
どなたかご存知でしたらお力添えください。。
764NAME IS NULL:2007/08/23(木) 23:32:28 ID:???
cygwin on mysql for win.
この組み合わせってダメなの?
Win 版 MySQL のコマンドラインツールって cmd.exe からじゃないとダメ?
765NAME IS NULL:2007/08/24(金) 00:32:47 ID:???
パス次第
766NAME IS NULL:2007/08/24(金) 12:31:40 ID:???
>>763
OSがファイル名の大文字小文字を区別するかどうかを
確かめるためのテストファイル。

mysqld起動時にsrc/mysqld.ccのtest_if_case_insensitive関数で
<hostname>.lower-testファイルを作り、
<hostname>.LOWER-TESTという名前でアクセスできるかどうかを試験してる。

誰も気にしてないのでマニュアルには載ってないと思われ。
ほっといてOK。
767NAME IS NULL:2007/08/24(金) 20:27:20 ID:???
ちょっと質問なんですが、
reset by peer
ってなメッセージで、作業が拒否されるのはどういう現象なんでしょうか。

具体的には、毎日rubyのライブラリ経由でmysqlに、一日どうだろ、10万レコードぐらい入れてるのかな。
今一番多いテーブルが3000万レコードとなっている(株のティックデータだったりする)。

で、毎日そういうのをぶっこんでいると、ここ数週間必ず上記のエラー「reset by peer」と言われて
途中で止まるようになってしまった。直後に再試行すると同じエラーが起き、しばらく寝かすと
なんか通るみたいな。その時間間隔はよくわからない。

なんでこういうことになるのか、reset by peerとはなんなのか、もしかして俺なんかまずい事してる?
について腑に落ちる方がいましたら教えて下さいな。


具体的データ入れルーチンの手順
あるテーブルに10万レコードをcsvファイルにしてから一括登録
あるテーブルに5000レコードぐらいを逐次追加登録
あるテーブルに5000レコードぐらいを逐次追加登録(中身は画像BLOB) <- ここでエラーが起き出した。
768NAME IS NULL:2007/08/24(金) 21:30:44 ID:???
>>767
MySQLが頑張って考えてる最中何も通信しなかったから
勿体無いから回線切ったった
769NAME IS NULL:2007/08/24(金) 21:39:39 ID:???
>>768
うーん、でもね、sleep 60秒 入れて再試行しても、あるいは10分後に手動で再試行しても
やっぱり同じエラーが返ってきたりしたんで、それは何?と思ってしまったんですよ。
770760:2007/08/24(金) 22:55:31 ID:abcdyQsi
>>762
遅レスですみません。
1つのテーブルに100オーバーなんて「普通」なんですか?
確かに、複数テーブルに分けてJOINしまくるというのは、
それだけでSQL文が長くなって、バグやミスに繋がりそうな気がします。

ただ、XOOPSとかphpBBとかOpenPNEとか有名なCMSツールを見ると
1つのテーブルに100オーバなんてないし、細かく分けているので、
どうする方が適切か?汎用性が高いのか、ずっと悩んでいました。
ちなみに、今組んでいるアンケートシステムは、後から変更する事はないです。
771NAME IS NULL:2007/08/25(土) 00:18:31 ID:???
「普通」とはなんでしょうか?
772763:2007/08/25(土) 00:46:58 ID:???
>>766
ありがとうございます。腑に落ちました。
これからソース眺めてみます
773NAME IS NULL:2007/08/25(土) 01:16:21 ID:???
普通じゃなくてもいいじゃん
やたらと入力(フィールド)項目がある
普通じゃないアンケート用システムなんだろ?
774NAME IS NULL:2007/08/25(土) 01:48:58 ID:???
自由に設問を追加できるようにしてくれ、なんて要望が出たときってどうすればいいんだろう。
アプリ側でカラムを追加できるようにさせるしかないかなあ?
775760:2007/08/25(土) 02:09:18 ID:???
>>773-774
となると、やはり正規化して「個人情報」「カテゴリ」「アクセス情報」など
分けられるだけ分けた方が良いかもしれませんね・・。

設計の段階でずっと悩んでいます。なにせ100以上のフィールドがある
DBを組んだ事がないので、どうするのが後々良いのか悩みます。。
776NAME IS NULL:2007/08/25(土) 02:41:18 ID:???
重複した質問とかしてないか?
777760:2007/08/25(土) 02:52:15 ID:???
それはないです。よくある性格診断アンケートのような感じです。
質問項目がやたら多いような・・。
778NAME IS NULL:2007/08/25(土) 06:09:04 ID:???
アンケートの種類にもよるのだろうけど、
キー以外全部CSVかXML形式でText(不定長サイズの文字列)に格納してしまったほうが楽かもしれない。
集計のときは端から全部読んでプログラムで結果を条件毎のマトリックスに加算してゆくことがほとんどで
SQLの集合関数は意外と統計には使いづらい。
調査項目の多いアンケートは結果見て何を集計するか決めたいといったケースが多く、
プログラムやデータ構造は作り捨てになりやすい。
779NAME IS NULL:2007/08/25(土) 06:15:01 ID:???
ああ回答欄をフィールドに一個一個割り当ててるんだろ。 それ、アホ設計じゃん。
そんなの俺なら質問1万項目あろうが4フィールド前後で生成可能だな。
でも方法は教えられんね。自分で死ぬほど考えて。
780NAME IS NULL:2007/08/25(土) 06:19:19 ID:???
項目名と回答で1レコードにするの?
それもそうとうだな・・
781NAME IS NULL:2007/08/25(土) 09:32:51 ID:???
名前 | 質問 | 回答

ってこと?
でもこれだと回答を抽出する時に少し面倒な気がする。良い方法あるん?
782NAME IS NULL:2007/08/25(土) 09:37:14 ID:???
何のためのリレーショナルデータベースだよ。
1対多でリレーションすればいいじゃん。
783NAME IS NULL:2007/08/25(土) 09:58:23 ID:???
id | 質問形態 | 質問 | 回答
だな
784NAME IS NULL:2007/08/25(土) 09:58:54 ID:???
名前も質問のひとつ
785NAME IS NULL:2007/08/25(土) 11:21:36 ID:???
>>781 >>783ちゃんは、正規化できてへんでーー
誰の回答かも分からへんしー。
でも、概要例としてなら分かるわー。
786NAME IS NULL:2007/08/25(土) 11:45:13 ID:???
質問マスタ
質問id | 質問形態 | 質問文 | その他

回答者テーブル
回答者id | 質問id | 回答

これで十分
787NAME IS NULL:2007/08/25(土) 15:17:21 ID:???
>>786
回答にコメントつけたいんだけど
788NAME IS NULL:2007/08/25(土) 18:11:00 ID:???
つければ?
789NAME IS NULL:2007/08/25(土) 18:17:22 ID:???
こういう持ち方をすると回答フィールドのが型指定できないのが難点。
単純な集計ならいいが、男女年齢層別の集計とかやりだしたら問い合わせが複雑にならないか。
入力システムならいいが集計時は横1レコード形式に変換してそう。
790NAME IS NULL:2007/08/25(土) 18:57:20 ID:???
>>788
回答者テーブルに回答idとコメント先回答idを追加する必要があるね
791NAME IS NULL:2007/08/25(土) 19:05:59 ID:???
>>769
MySQLのクライアントとサーバーの間にFireWallとか変なルーターとかいない?
792NAME IS NULL:2007/08/25(土) 19:10:04 ID:???
>>789
できるからええやん。 ただ、それなりのスキル無いと重いクエリになるが。
793760:2007/08/25(土) 21:47:27 ID:???
皆さん、いろいろ検討ありがとうございます。
自分が正規化するなら

[基本マスタ]
ID|ユーザID|質問マスタA・ID|質問マスタB・ID|質問マスタC・ID|

[ユーザマスタ]
ユーザID|名前|性別|年齢|都道府県|

[質問マスタA]
質問マスタA・ID|質問01|質問02|・・・・(質問の数だけフィールドがある)


と言うように考えておりました。
一覧表示する時は、すべてをLEFT JOINで結合するような感じで。

でも、これって糞仕様なのでしょうか?
794NAME IS NULL:2007/08/25(土) 21:56:46 ID:???
上に出てる通りどこに重きを置くかによって違う。
システムはアンケートの入力それとも集計に重点をおくのか。
1回きりのアンケートなのか。繰り返し使うのか。
記名式かユーザーIDでの管理はあるのかそれとも匿名式か。
アンケートはネットでやるのか紙ベースか、
入力内容の精査はどの低度するのか、
集計方針は決まっているのか分析しながら決めるのか、などなど。
795NAME IS NULL:2007/08/25(土) 22:15:59 ID:???
横から失礼します!
ググっても分からず、どこで質問したらよいか分からないので、こちらに来てみました。
apache(2.2.4)+php(5.2.3)+mysql(4.1.22)を自宅のWin2kにインストし、
そこへphpMyAdminをインストしようとしてるのですが、apacheでエラーが出て困っています。

apacheを起動すると以下のように表示されるのです。
---------------------------
httpd.exe - エントリ ポイントが見つかりません
---------------------------
プロシージャ エントリ ポイント mysql_get_character_set_info がダイナミック リンク ライブラリ LIBMYSQL.dll から見つかりませんでした。
---------------------------

で、調べたところlibmysql.dllのバージョンらしく、phpに付属のlibmysql.dllなら発生しません。
しかしphpに付属のですと、phpMyAdminで「クライアントライブラリのバージョンが違う」
と怒られてしまう、という状況です。(MySQL クライアントのバージョン: 5.0.37)

お門違いの質問でしたら申し訳ありませんが、何卒ご教示ください。
796NAME IS NULL:2007/08/25(土) 22:26:36 ID:???
>>791
いいえ、同一パソコン上、localhostです。

for code in 1000..9999
"select code from table where code = #{code} and date = 今日"
 既に登録されてたら next
登録されてなかったらデータを集めて
"insert into table values xxx"
end

ってな感じで、再試行時にselect文は通ってるので、mysql自体が無反応というわけではなさそう。
でinsert文の所で「Connection reset by peer by mysql (Errno::ECONNRESET)」ってエラーになるです。
797NAME IS NULL:2007/08/26(日) 00:38:54 ID:???
>>795
MySQLを5にしろ
798NAME IS NULL:2007/08/26(日) 01:21:38 ID:???
初めてDB作成してみたのですが思うようなパフォーマンスがでず、
アドバイスをいただければと思いました。

ヤフオク(ttp://www.yahoo.co.jp/r/ac)での検索自由度を高めたいと思い、
MySQLに全てを格納後し自分でSQL文を打ち検索する、
自分専用システムを構築したいと思いました。
全ての情報は取得も保持も無理なので、特定の2つ3つのカテゴリのみの制限付きです。

まずは2つのテーブルを設計いたしました。
(1)カテゴリID、カテゴリ名、自分の親のカテゴリIDを保持するテーブル
ttp://developer.yahoo.co.jp/auctions/rest/categorytree/V1/categorytree.html よりデータを作成
(2)1つ1つの商品の情報を保持するテーブル
ttp://developer.yahoo.co.jp/auctions/rest/categoryleaf/V1/categoryleaf.html よりデータを作成
1のテーブルはレコード数2000程度なのですが、
2のテーブルは90万レコードというものになりました
(経験がなく、大きすぎる数字なのかどうかが判断できません)

SQL文を発行して(2)から特定のカテゴリIDを持つものを引っ張ってみたところ、
47秒という速度になってしまいました。
Webからの利用を想定していますので遅くても10〜20秒程度でないと
使用に耐えられません(自分専用とはいえ...)

仕方がないので、現在は(2)のテーブルを大きいカテゴリ毎に分割することを考えております。
が、分割したテーブル全体に渡るSQL文を発行した場合、
それほど速度に変化はでないのかと思っております。


MySQLで90万レコードの検索を高速に扱うにはどのような点に注意すればよろしいでしょうか。

PCはCeleron2GHzメモリ1GBのLinuxマシン、
MySQLは5.0.33のソースからコンパイルしたデフォルト設定です。
799NAME IS NULL:2007/08/26(日) 05:13:33 ID:???
90万レコードでその速度なら
テーブル設計が悪いか、SQLが悪いか又はその両方
800NAME IS NULL:2007/08/26(日) 05:17:36 ID:???
>>799
それ、何かを答えてることになるの?
実質的に何も言っていないに等しいと思うんだけど。
801NAME IS NULL:2007/08/26(日) 05:32:21 ID:???
CPUかバスが原因だろ
802NAME IS NULL:2007/08/26(日) 06:02:00 ID:???
ユニークキーが重複してるときって上書きや無視しちゃっても大丈夫ですかね?
803NAME IS NULL:2007/08/26(日) 07:54:48 ID:cLbF/99H
on duplicate key update オプション付きなら上書きだし。
804NAME IS NULL:2007/08/26(日) 08:58:35 ID:???
>>798
インデックスとExplainの結果を見せてもらおうか
805NAME IS NULL:2007/08/26(日) 09:30:22 ID:f7724A+Z
今、2003stdにMS-SQLが動いてるんですが、MySQLの共存は可能ですか?
あまり共存とかしたくないけど、予算の都合上、入れられるのがそのサーバなもので。
806798:2007/08/26(日) 09:40:58 ID:???
>>801
CPUかバスですが・・
全てのデータをオンメモリにするような設定があれば多少マシになるでしょうか。

>>804
SQL初めてでよくわかっていませんが、実行してみた結果です。
mysql> show index from itemlist;
+----------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment |
+----------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
| itemlist | 0 | PRIMARY | 1 | auctionid | A | 843116 | NULL | NULL | | BTREE | |
+----------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
1 row in set (0.00 sec)

mysql> explain select * from itemlist where categoryid = 27751 and price < 2000;
+----+-------------+----------+------+---------------+------+---------+------+--------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+----------+------+---------------+------+---------+------+--------+-------------+
| 1 | SIMPLE | itemlist | ALL | NULL | NULL | NULL | NULL | 843116 | Using where |
+----+-------------+----------+------+---------------+------+---------+------+--------+-------------+
1 row in set (0.01 sec)


プライマリキー(auctionid)で検索すると1秒以下で処理できますが、
それ以外ですとどうしても時間がかかってしまいます。
807NAME IS NULL:2007/08/26(日) 11:42:02 ID:???
where節に書く予定のフィールドをがんがんcreate indexすればいいじゃん
ってだけの話だね。
808NAME IS NULL:2007/08/26(日) 11:55:47 ID:???
そうやって全フィールドにindexを振ってしまったが
この先に待つものはいったいなんだろう・・・
809NAME IS NULL:2007/08/26(日) 12:12:39 ID:???
>>805
ポート被ってなけりゃ問題なく動く。

ただSQL Serverって制限しないと
ほとんどの物理メモリを押さえちゃうから、
そのあたりの調整は必須。
810NAME IS NULL:2007/08/26(日) 13:31:34 ID:???
>>806

categoryidで検索するなら
create index itemlist_cid on itemlist (categoryid);

categoryidとpriceで検索するなら
create index itemlist_cid_pce on itemlist (categoryid, price);

priceで検索するなら
create index itemlist_pce on itemlist (price);

オークションの終了日時で検索するなら
create index itemlist_end on itemlist (endtime);

出品者で検索するなら
create index itemlist_id on itemlist (id);

特定のカテゴリ、特定の出品者、ある入札価格で検索するなら
create index itemlist_cid_id_pce on itemlist (categoryid, id, price);

きりがないな
811NAME IS NULL:2007/08/26(日) 14:41:56 ID:???
同じ道具を使っても、出来る物が違う。
それがプロ製作と素人製作の違いなのだよアンダーソン君
812798:2007/08/27(月) 06:40:24 ID:???
>>807,810
がんがん18個ほどindexを作成いたしましたところ、
期待通りの速度を得ることができました。
#index作成に4時間かかりましたorz

どうもありがとうございました。
813NAME IS NULL:2007/08/27(月) 07:29:12 ID:???
ちょっと話を戻すようで申し訳ない。

回答者 | 質問内容 | 回答
------------------------------
高橋  | 年齢は? | 30歳
高橋  | 好物は? | もやし
鈴木  | 好物は? | コーヒー

みたいなテーブルがあるとき(実際には、回答者と質問内容については別のテーブルを参照する)
検索とかしようとすると手間のような気がするんだけど、何かスマートな方法ってある?
814NAME IS NULL:2007/08/27(月) 09:31:41 ID:???
なんの検索だよ
815NAME IS NULL:2007/08/27(月) 11:24:10 ID:???
>>813
普通の正規化なら、
・回答者マスタ
・質問マスタ
みたいなテーブルを作って、キー項目でJOINすると思うんだが
それが面倒だと思うならVIEWにすればいいんじゃね?
816NAME IS NULL:2007/08/27(月) 13:34:17 ID:y3LbHP1t BE:251556252-2BP(1002)
MacOS 10.4.10(intel)/mysql5.0.45
Perlと連携させようと思ってるんですが、
DBD::mysqlが動きません><
さんざんググって出てきたのが↓のバグフィックス。
#30220が「まさにその通り」って感じでした。
書いてある通り次バージョン出るまで待つしか無いんでしょうか…
それともパッチ付きバージョンって出てるんでしょうか…
何か対策ご存知の方教えてください。お願いします。
http://bugs.mysql.com/bug.php?id=28544
http://bugs.mysql.com/bug.php?id=30160
http://bugs.mysql.com/bug.php?id=30220
817813:2007/08/27(月) 15:31:44 ID:???
>814
検索しないならDBに入れる意味ないんじゃ?

>815
いや、正規化の話じゃなく。
818816:2007/08/27(月) 15:52:09 ID:y3LbHP1t BE:1232624977-2BP(1002)
MySQLバージョンを5.1.20betaに上げましたがだめでした
819NAME IS NULL:2007/08/27(月) 16:11:53 ID:???
>>817
検索と一言で言っても、回答者検索から統計から広範囲に渡るがな。
回答者検索なら、どこが面倒なんだ? という事だ。
820NAME IS NULL:2007/08/27(月) 16:51:15 ID:???
>819
ごめん、回答者検索。
SQL初学者なもんで、すげー回りくどい方法で書いてたのかもしれない。

821NAME IS NULL:2007/08/27(月) 17:21:53 ID:???
もぅ知らない!
822NAME IS NULL:2007/08/27(月) 20:49:36 ID:???
>>820
おまえ日本語も初心者だろ
823NAME IS NULL:2007/08/28(火) 00:07:13 ID:???
ローカル内の2つのサーバにおけるmysqlデータベースデータを
同期しようと思っています。

メインのサーバで更新したら、サブのデータベースを更新したいのですが、
リアルタイム制は必要なく、3分程度の遅れでもいいと思います。
この場合、どのような方法で同期を取ることができますか?

データベースの内容は、2000レコードぐらいの個人情報です。
824NAME IS NULL:2007/08/28(火) 00:14:34 ID:???
MySQLのConnectorっていたるところでバグ多いよな
一番マシなのがjdbcくらい
825NAME IS NULL:2007/08/28(火) 00:15:48 ID:???
サブが先に更新された場合は?
826823:2007/08/28(火) 00:28:26 ID:???
>>825
サブは読み込むだけなんです。
メインもほとんどが読み込みですが、たまにメインの方で更新されるぐらいです。

高度な技は持っていないので、
何かシェルレベルでも支障が無い同期が取れるでしょうか?
827NAME IS NULL:2007/08/28(火) 01:18:47 ID:???
>>826
レプリケーションかなあ
一応テーブル指定でも取れる
ttp://www.irori.org/doc/mysql-rep.html
828NAME IS NULL:2007/08/28(火) 10:47:09 ID:bE9ZNEtp
mysqlのレプリケーションのバイナリログが膨らんであたふたしてるんだが、
バイナリログ作成止める方法ってどうすればよいんでしょう?
ちなみに、my.cnfのserver-idをコメントアウトしただけじゃダメですたorz
829NAME IS NULL:2007/08/28(火) 12:33:59 ID:???
>>828
my.cnfのlog-binをコメントアウトして再起動。

だけど、使い終わったバイナリログを消すだけでいいのでは?
PURGE MASTER LOGS TO 'xxxxx-bin.xxx';
830NAME IS NULL:2007/08/28(火) 15:08:42 ID:???
>>826
間違いなくレプリケーションだろ。
831805:2007/08/28(火) 20:25:27 ID:???
>>809
ありがとうございます。
参考にします。
832NAME IS NULL:2007/08/29(水) 11:55:41 ID:UjsiDPtN
どうか、お知恵をお貸し下さい。
以下のような2つのテーブルが有ります。

tableA
| uid | name |
+-----+------+
| 001 | aaaa |
| 002 | bbbb |
| 003 | cccc |
| 004 | dddd |
| 005 | dddd |
Primary = uid

tableB
| uid | snum | food |
+-----+------+-------+
| 001 | 0001 | apple |
| 001 | 0002 | orange|
| 003 | 0001 | apple |
| 004 | 0001 | melon |
| 004 | 0002 | apple |
| 004 | 0003 | banana|
Primary = uid , snum

tableBにデータの無い tableA.uid を求める場合どうしたらよいでしょうか?
上記の例ですと、002 と 005 が取得したい結果です。
よろしくお願いいたします。
833NAME IS NULL:2007/08/29(水) 13:09:03 ID:???
>>832
tableA と tableB を left join して snum が null のレコードを探すでどうよ?
834NAME IS NULL:2007/08/29(水) 13:13:00 ID:OUZw7AOU
WEB上のフォームでは誕生日の欄が
[昭和・平成] []年[]月[]日

みたいに分かれているとします。
これをテーブル設計する時、どのようなフィールドにしますか?
単に「birth」というフィールド内に詰め込むのか、
「年号」「年」「月」「日」っと4つに分けるのか。

OPENPNEなどを見ると分ける形になっているのですが、
このように範囲が定まっていないデータを扱う場合、
出来るだけ項目毎にフィールドを分けた方が良いのでしょうか?
835NAME IS NULL:2007/08/29(水) 13:15:52 ID:???
>>834
全部西暦で管理。

データの参照の時には西暦→和暦変換、
格納の時には和暦→西暦変換をそれぞれ実行する。
836NAME IS NULL:2007/08/29(水) 13:25:46 ID:???
exists使えばいいんじゃねーの?

select uid from tableA where not exists (select * from tableB where tableA.uid = tableB.uid);
837NAME IS NULL:2007/08/29(水) 15:16:31 ID:UjsiDPtN
>>833
ありがとうございました。
SELECT
tblA.`uid` AS 'uid'
FROM `tableA` AS tblA
LEFT JOIN `tableB` AS tblB ON tblB.`uid` = tblA.`uid`
WHERE tblB.`snum` is NULL
で上手くいきました。

>>836
ありがとうございます。そしてスミマセン。
環境書くの忘れていました。
現在は4.0なのでサブクエリが使えないのですが、
いつか使える環境で開発する時の参考になりました。
838NAME IS NULL:2007/08/29(水) 15:19:16 ID:???
>>834
データベースとしては、date型一つに収めるべし
利用(表示)によって適宜変換すればよし
839834:2007/08/29(水) 23:00:17 ID:???
>>835,838
なるほど。入力時は複数にしていたとしても、date型に納めれば
西暦から平成・昭和に分けることは出来るし、如何様にも対処出来ますね。

ただ、会員登録フォームなどで「平成・昭和」+年で
入力するフォームがありますよね?その場合も実際の登録は西暦なのでしょうか?
例えば、[平成][19]年 として入力した場合も、登録は2007にするような。
840NAME IS NULL:2007/08/30(木) 00:35:33 ID:???
あとで再利用するかどうかだな
聞くだけ聞いて利用しないならそれでもいい
利用するつもりならそのままなら面倒だろ
841NAME IS NULL:2007/08/30(木) 02:11:02 ID:???
てか、西暦と和暦は正確に1:1で対応してるんだから
わざわざ和暦で記録する必要性があるようには思えない。
「昭和70年」みたいな存在しないはずの数値は扱えなくなるけど、
それはすっきりした設計を犠牲にしてまでデータベースの側が
面倒を見る問題なのか? という疑問もある。
データの入り口(入力フォームとか)で適切なチェックをかければ
いいだけの話だし。
842NAME IS NULL:2007/08/30(木) 02:25:44 ID:???
>>841
西暦と和暦は1:2のときもあります
843NAME IS NULL:2007/08/30(木) 02:31:40 ID:???
波長60の周期関数じゃなかったっけ
844NAME IS NULL:2007/08/30(木) 09:29:26 ID:???
>>842
年月日で考えれば、キリの良い箇所はあるだろ。
昭和64年1月7日と平成元年1月8日とかな。
それなら西暦年月日と和暦年月日は1:1対応だ。
845NAME IS NULL:2007/08/30(木) 13:04:09 ID:aMigI0oO
PHPでわざと間違えたクエリーを$queryに入れて
if(!mysqli->query($query))
print("Error!: ".mysqli->error);
ってやってもError!って表示されるだけでmysqli->errorの部分が表示されないんですけど
どうしたらいいんでしょうか?
846NAME IS NULL:2007/08/30(木) 14:46:32 ID:???
>>845
$が抜けてるとかってオチ?
847NAME IS NULL:2007/08/30(木) 17:33:03 ID:3/8QntVY
datetimeのフィールドを使ってYYYYMMなどの月ごとにデータを集計しているのですが
データ数が多くなってきて、集計に時間がかかるようになってしまいました。

使用SQL
SELECT date_format(datetime,"%Y%m") AS dateMonth,count(*)
FROM table WHERE dateMonth='200708'

date_format()を使った場合は、当然インデックスが使われないので遅くなってしまうと
思うのですが、こういった月ごと集計などを高速にやるやり方ってあるんでしょうか?
848NAME IS NULL:2007/08/30(木) 17:47:47 ID:???
>>843
それは還暦
849NAME IS NULL:2007/08/30(木) 17:50:03 ID:???
>>847
明らかに date_format が原因
850NAME IS NULL:2007/08/30(木) 17:53:09 ID:???
>>847
あります
851NAME IS NULL:2007/08/30(木) 17:53:30 ID:xXyjZ2jf
852NAME IS NULL:2007/08/30(木) 18:09:41 ID:???
>>847
そのsqlならインデックス効かなかったっけ?

どっちにしても、月を切り出す程度なら 定石では
当月一日以降、翌月一日未満 って指定だよね。
853NAME IS NULL:2007/08/30(木) 18:18:55 ID:???
>>847
つべこべ言わずに explain しる。
854NAME IS NULL:2007/08/30(木) 18:28:33 ID:2zV5thfK
phpMyAdminにて、エクスポートしたファイルをインポートしようとすると、

#1193 - Unknown system variable 'SQL_MODE'

と表示されてインポートできません。

MySQL5のデータをMySQL4に移したいのですが、
'SQL_MODE'というのはMySQL5からの対応になるのでしょうか?
また、何か対処法はありませんでしょうか。

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";

の部分を削るとNOT NULL関係のものがインポートできないとエラーが出ます。
(#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 'collate utf8_unicode_ci NOT NULL,
`date` datetime NOT NULL)
855847:2007/08/30(木) 18:38:07 ID:???
explainは使っていたのですが、検証が足りなかったみたいです。

特定の月のデータを抜き出す場合
SELECT * FROM table
WEHERE datetime BETWEEN '2007-08-01 00:00:00' AND '2007-08-31 00:00:00'
date_format(datetime,'%Y%m')を使うより、50倍ほど高速になりました。

月毎の集計を出す場合
SELECT date_format( datetime, "%Y%m" ), count( * )
FROM table
WHERE datetime BETWEEN '2007-07-01 00:00:00' AND '2007-08-31 23:59:59'
GROUP BY date_format( datetime, "%Y%m" )
10倍ほど高速に。

みなさんアドバイスありがとうございました。
856NAME IS NULL:2007/08/31(金) 09:51:04 ID:???
857NAME IS NULL:2007/08/31(金) 21:35:02 ID:2Luotq0e
列名が、id, version_id, revision_id, content となっていてidが主キーです。
version_id ごとにデータを取り出したいのですが、それぞれrevision_idが最も大きいデータのみを取り出したいのです。

例えば、以下のデータの場合、

id, version_id, revision_id, content
1 1 1 abc
2 1 2 bcd
3 2 4 acb
4 2 3 dac
5 3 1 cad

下記のデータを得たいのです。

id, version_id, revision_id, content
2 1 2 bcd
3 2 4 acb
5 3 1 cad

groupやdistinctを試してみましたがうまくいきません。
どのようなSQLを書けばよいのか教えてください。
858NAME IS NULL:2007/08/31(金) 21:40:38 ID:???
>>857
version_idでグループしてrevision_idがMAXな
version_idとrevision_idだけの仮テーブルをこさえて
じょいん
859NAME IS NULL:2007/09/01(土) 21:39:05 ID:lOCeHxsv
create tableやcreate indexのsqlを吐いてくれる、
フリーのExcelファイルってないですか?

いくつかあったんですけど、
auto incrementとかPじゃないkeyが設定できないんス。
860NAME IS NULL:2007/09/01(土) 22:32:48 ID:???
>>858
一回SQLを発行して仮テーブルを作成し、
ジョインするってことは、一発のSQLでは無理ってこと?
861NAME IS NULL:2007/09/01(土) 23:00:56 ID:???
>>860
バージョンが(多分)5以上であればインラインビューを使えば
テンポラリテーブル使わず、SQL一発でできるよ。
862NAME IS NULL:2007/09/04(火) 18:17:45 ID:???
select * from tbl WHERE `time`='2007-09-04'
こんな感じにすると
カラムがdatetimeの場合、
意図したように取り出せません。

2007-09-04 00:00:00〜2007-09-04 23:59:59
まで取り出すにはどうしたらいいでしょうか?

select * from tbl WHERE `time`=>'2007-09-04' and `time`<'2007-09-05'
これ以外でお願いします。
863NAME IS NULL:2007/09/04(火) 18:22:19 ID:???
>>862
> select * from tbl WHERE `time`=>'2007-09-04' and `time`<'2007-09-05'

>2007-09-04 00:00:00〜2007-09-04 23:59:59
書きゃいんじゃねーの
864NAME IS NULL:2007/09/05(水) 09:53:36 ID:???
>>862
select * from tbl WHERE SUBSTRING(`time`,0,10)='2007-09-04'

865NAME IS NULL:2007/09/05(水) 10:51:11 ID:???
>>862
普通、
select * from tbl WHERE date(`time`)='2007-09-04';
じゃね?
866NAME IS NULL:2007/09/05(水) 10:56:46 ID:???
関数で分解するとindex効かないっす
867NAME IS NULL:2007/09/05(水) 11:11:08 ID:???
autoincrementみたくさ
関数定義しといて
なんか追加したら別のカラムに計算して勝手に突っ込む
見たいなの無い?
868NAME IS NULL:2007/09/05(水) 12:04:41 ID:H/eyjQaz
↓空欄に一致させたいのですが、これだとうまくいきません。どうすればいいですか?
select * from t_table where id=''
869NAME IS NULL:2007/09/05(水) 12:14:49 ID:???
>>868
select * from t_table where id is null;
870NAME IS NULL:2007/09/05(水) 13:19:41 ID:H/eyjQaz
>>869
なるほど。ありがとうございました!
871NAME IS NULL:2007/09/05(水) 23:08:33 ID:???
872NAME IS NULL:2007/09/07(金) 12:15:12 ID:???
あの。。恥しい質問なんですが、複数ユーザーがいた場合のトランザクションってどのように動作するんでしょう?

ユーザー1                       ユーザー2
START TRANSACTION;
UPDATE tbl SET hoge='1' WHERE id = '1';      
                           UPDATE tbl SET hoge='2' WHERE id = '1';
   
UPDATE tbl2 SET hoge='1' WHERE id = '1';
COMMIT;

この場合、
SELECT hoge FROM tbl WHERE id = '1'
は1になるという事でいいんでしょうか?
ユーザー2はユーザー1のコミットが終了するまで待たされるという事?

873NAME IS NULL:2007/09/07(金) 18:02:22 ID:2pJ+Fq5j
すみません、どなたかヘルプお願いします。

MySQL Migration Toolkitを起動したのですが、JRE(5.0) Update 8がないから
初期化に失敗したとか言われます。

JRE5.0はUpdate10〜12を入れているのですが・・・

Javaのサイトにいっても古いバージョンをダウンロードできる場所が
見つかりません。

どなたか、対策をお教えいただけないでしょうか?

874NAME IS NULL:2007/09/07(金) 23:45:39 ID:???
>>872
実際にコンソール2つでやってみればわかるよ!
875NAME IS NULL:2007/09/07(金) 23:56:29 ID:???
LOCKくらいしろ
876NAME IS NULL:2007/09/08(土) 07:47:26 ID:W79c84Ln
ローカルの環境で Microsoft Access 2000/2007 と
OpenOffice Base で作成したデータベースがあります。
これらを一括して MySQL データベースにまとめて
ODBC 経由でアクセスするようにアプリケーションを
書き換えようとしているのですが、mysqldump のように
スキーマとデータをまとめてダンプするようなツールは
Microsfot Access や OpenOffice Base には無いでしょうか?
877NAME IS NULL:2007/09/08(土) 08:06:24 ID:W79c84Ln
データ自体は Microsoft Access や OpenOfice Base から
ODBC 接続して複製すれば(マクロは追加で書かなきゃいけないのかも)
いけそうなんですが、スキーマは手動で移すしかないですか?

とりあえず CREATE TABLE などの SQL 文でダンプさえできれば、
あと少々の差異の調整はダンプを何らかのスクリプトで処理して
やればなんとかなると思うのですが・・・
878NAME IS NULL:2007/09/08(土) 08:11:57 ID:???
Microsoft Access 2007 にはテーブル単位で
「ODBC データベースへのエクスポート」が可能でした。
リレーションは移ってくれないのだろうか…
879NAME IS NULL:2007/09/08(土) 08:27:05 ID:???
エクスポートではできない。
リレーションも含めたダンプができればいいんだろうが。

Access 2007 ヘルプ - エクスポート - リレーションシップ
1 回の操作で 1 つのテーブルしかエクスポートできないため、
エクスポート操作でリレーションシップをコピーすることはできません。
複数のテーブルとそのリレーションシップをインポートする場合は、
インポート先のデータベースを開き、そのオブジェクトをインポートします。
880878:2007/09/08(土) 08:34:19 ID:???
インデックスの有無や制約は一切反映されませんでした。
Microsoft Access のエクスポート貧弱なり・・・
881NAME IS NULL:2007/09/08(土) 23:39:12 ID:???
アップサイジングウィザードっつーのがあったんだけどな
今のバージョンにはないのかな
882878:2007/09/09(日) 10:02:07 ID:???
>>881
Access 2007 からはユーザインターフェイスが大幅に変わって
うまく見つけられなかったけど、「データベースの移動」
っていう項目の中に SQL Server へのデータの移動がある。
なので SQL Server にはスキーマも含めてうまく移行できると思う。

で、あらためて SQL Server から MySQL に移行すればいいのかな。
MySQL Migration Tool を使うのがベスト?
このツールはまだ一回も使ったことないんでこれから検討。
883NAME IS NULL:2007/09/09(日) 22:18:37 ID:8M0+Vljb
ネーミングのせいで評価を落としてしまってる件。
ポスグレの方がずっと使えそう。
名前って大事だよな、ミギー。
884NAME IS NULL:2007/09/09(日) 23:36:46 ID:???
かわいいじゃん、まいえすきゅーえる
ポスの方がすぐに読めないから名前は嫌い
885NAME IS NULL:2007/09/09(日) 23:56:25 ID:QjCU4T3R
int型に文字列を入れようとするとwarning は出るんですが、INSERTされてしまうんです。
これをされないようにするにはどうすればいいか教えてもらえないでしょうか?
886NAME IS NULL:2007/09/10(月) 00:46:07 ID:???
887NAME IS NULL:2007/09/10(月) 03:13:39 ID:???
set names hoge
って、なんで「NAMES」なんていうキーワードなのかさっぱりわからん。
888NAME IS NULL:2007/09/10(月) 13:11:08 ID:6m8MdV+L
>>886
ありがとうございます。
解決しました。

MYSQL5じゃないと出来ないみたいでしたので、バージョンアップしたらできました。

それと int型に 99.99 を入れようとすると自動的に丸められて挿入されてしまうんですがこれは防ぐ方法ないですか?
889NAME IS NULL:2007/09/10(月) 13:48:34 ID:???
>>888
int型って何か分かってる?

前処理で切上げ・切捨て・四捨五入など
必要な処理をすれば、何の問題も無かろうに。
890NAME IS NULL:2007/09/10(月) 13:53:32 ID:6m8MdV+L
>>889
分かってるつもりです。
エラーではじいて欲しいだけなんです。
postgresだと int型に 99.99を入れようとするとシンタックスエラーになるので
mysqlでも出来ないかな?とおもって探しています。
891NAME IS NULL:2007/09/10(月) 14:16:11 ID:???
>>890
「そもそもint型に実数突っ込む実装が糞」って言ってるの。
892NAME IS NULL:2007/09/10(月) 16:52:29 ID:???
MySQLについて質問です。

今日、PHPの勉強をしようと思ったのですが、
データ管理(メンバー登録)にはMySQLがいいのでしょうか?

ネットで調べたら、下のようなものが引っかかったので不安です。
http://www.ad.vg/voice/modules/tinyd0/index.php?id=8
『メモリー馬鹿食いでswapまで使いまくる』
『とてつもなく大規模な利用目的には活躍の場もあると思いますが、
通常はなんらメリットの感じられないmysqlには落胆しました。』
とあります。
実際はどうなのでしょうか?

893NAME IS NULL:2007/09/10(月) 17:00:27 ID:???
>>892
アホなの?
894NAME IS NULL:2007/09/10(月) 17:02:16 ID:???
うん、アホだから聞いてるw
895NAME IS NULL:2007/09/10(月) 17:03:55 ID:???
>>892
メモリ馬鹿食いなのはSQL Serverもだな。
896892:2007/09/10(月) 17:07:44 ID:???
>>895
ってことは、PHPでDBの勉強するなら
自分のPC、メモリ馬鹿食いは避けれないってことなのかな?
897NAME IS NULL:2007/09/10(月) 17:10:34 ID:???
>>896
世の中のRDBMSが全てそうだと思うなよwww
SQLiteでも使えや。
898892:2007/09/10(月) 17:19:44 ID:???
お、SQLiteってのがあるのですかww
一度調べて出直してきます。
回答ありがとでした^^
899892:2007/09/10(月) 17:47:06 ID:???
>>897
SQLiteでPHPのプログラム組んだとして・・・、
SQLiteが入ってないサーバでしか動かないって落ちはないよね?
900NAME IS NULL:2007/09/10(月) 17:54:18 ID:???
>>899
日本語でOK。

つかSQLiteでググってみてから
それでも分からなきゃSQLiteのスレで訊けwww
901NAME IS NULL:2007/09/10(月) 17:58:33 ID:2g8YrWQX
>>873
古いバージョンはもう手に入らない。
雑誌などから古いバージョンを探すしかない。それか、持っている人にアップロードしてもらう。

それが出来なければ、MigrationToolkitは使えないから諦めるんだな
902NAME IS NULL:2007/09/11(火) 00:55:09 ID:???
古いのは、ここから落とせるでしょ。JRE 5.0 Update 8 も。
http://java.sun.com/products/archive/
903873:2007/09/11(火) 16:39:27 ID:???
>>902
ありがとうございます! 見事JRE 5.0 Update 8をゲット・・・



・・・・J2SE 5.0 Update 8になっててインストールしても
Migration Toolkitが「JRE 5.0 Update 8」を入れろやコラ!!と
相変わらず動いてくれないなあ・・・



なんでなんだろ
904NAME IS NULL:2007/09/11(火) 21:42:16 ID:+zsoqsPe
Javaを使って、ローカルPCからjpeg画像ファイルを読み込んで、
MySQLにBLOB型で格納したいのですが、どのようにやればよいか
具体例を教えてもらえないでしょうか?
参考となるリンクだけでも構いません。
OSはWindowsXP Pro、JDK1.6.0、MySQL5.0.45という環境です。
よろしくお願いいたします。
905NAME IS NULL:2007/09/11(火) 23:54:27 ID:???
既にデータが沢山入っているテーブルに新たなカラムを追加しようと思っています。

これは、

ALTER TABLE テーブル名 ADD 追加するカラム名 型;

というコマンドで実行可能ですが、その場合、新たに追加されたカラムには NULL が代入されてしまいます。

新たなカラムを追加し、それに "" (文字列無し、ただし NULL では無い。) を入れる場合にはどうしたら良いでしょうか?

初歩的な質問で申し訳ありませんが、よろしくお願いします。
906NAME IS NULL:2007/09/11(火) 23:58:41 ID:ya4K9LL7
これはアメリカのゲームです。1度やってみてください。
これは、たった3分でできるゲームです。試してみてください。 驚く結果をご覧いただけます。
このゲームを考えた本人は、メールを読んでからたった10分で願い事が
かなったそうです。
約束してください。絶対に先を読まず、1行ずつ進む事。 たった3分ですから、ためす価値ありです。
まず、ペンと、紙をご用意下さい。 先を読むと、願い事が叶わなくなります。
@まず、1番から、11番まで、縦に数字を書いてください。
A1番と2番の横に好きな3〜7の数字をそれぞれお書き下さい。
B3番と7番の横に知っている人の名前をお書き下さい。(必ず、興味の
ある性別名前を書く事。男なら女の人、女なら男の人、ゲイなら同姓の名
前をかく)
必ず、1行ずつ進んでください。先を読むと、なにもかもなくなります。
C4,5,6番の横それぞれに、自分の知っている人の名前をお書き下さ
い。これは、家族の人でも知り合いや、友人、誰でも結構です。
まだ、先を見てはいけませんよ!!
D8、9、10、11番の横に、歌のタイトルをお書き下さい。
E最後にお願い事をして下さい。さて、ゲームの解説です。
1)このゲームの事を、2番に書いた数字の人に伝えて下さい。
2)3番に書いた人は貴方の愛する人です。
3)7番に書いた人は、好きだけれど叶わぬ恋の相手です。
4)4番に書いた人は、貴方がとても大切に思う人です。
5)5番に書いた人は、貴方の事をとても良く理解してくれる相手です。
6)6番に書いた人は、貴方に幸運をもたらしてくれる人です。
7)8番に書いた歌は、3番に書いた人を表す歌。
8)9番に書いた歌は、7番に書いた人を表す歌。
9)10番に書いた歌は、貴方の心の中を表す歌。
10)そして、11番に書いた歌は、貴方の人生を表す歌です。
この書き込みを読んでから、1時間以内に10個の掲示板にこの書き込みをコピーして貼って下さい。
そうすれば、あなたの願い事は叶うでしょう。もし、貼らなければ、願い事を逆のことが起こるでしょう。とても奇妙ですが当たってませんか?
907905:2007/09/12(水) 01:26:52 ID:???
自己解決しました。
default '' というパラメーターをつければおkみたいです。
ありがとうございます。
908NAME IS NULL:2007/09/12(水) 16:20:51 ID:QChlKlei
mysql4.1.20を使用しています
postgresばかり使っていたのでmysqlの事がさっぱりわからないのですが
SELECT currval や SELECT NEXTVAL
の代わりになるようなものはMYSQLには用意されていないのでしょうか?
909NAME IS NULL:2007/09/12(水) 18:37:39 ID:???
>>908
postgres あまりわかんないけど、auto_increment と last_insert_id() を調べてみ。
910NAME IS NULL:2007/09/13(木) 01:05:56 ID:vM9MWgfF
>>909
last_insert_id()がちょうどSELECT currvalにあたるようです
ありがとうございます
911NAME IS NULL:2007/09/13(木) 23:08:45 ID:+g8hjTGs
CREATE TABLE文でPRIMARY KEYを指定して
主キーに設定したカラムは、自動的にインデックスが
作成されるのでしょうか?それとも主キーでも
自分でCREATE INDEX文でインデックスを作成しないと
いけないのでしょうか?
912NAME IS NULL:2007/09/13(木) 23:27:09 ID:???
>>911
勝手に出来るよ
安心汁
913NAME IS NULL:2007/09/13(木) 23:38:26 ID:+g8hjTGs
>>912
ありがとうございます。
show index from テーブル名で確認したら、
主キーのカラムでSeq_in_indexの値が1となっていました。

申し訳ないのですが、もう1つ質問させてください。
以下のSQL文を実行するとエラーとなってしまうのですが、
その理由が分かりません。1つのテーブルにAuto_incrementのカラムが
1つしかなく、かつ主キーに設定しているはずなのですが…。
どなたかエラーとなる理由が分かる方いらっしゃいますか?

<SQL文>
create table sample(
  id1 integer not null,
  id2 integer not null,
  id3 integer not null,
  id4 integer not null auto_increment,
  name varchar(20) not null,
  primary key(id1, id2, id3, id4)
);

<上記SQL文に対するエラーメッセージ>
ERROR 1075 (42000): Incorrect table definition;
there can be only one auto column and it must be defined as a key
914NAME IS NULL:2007/09/14(金) 00:10:34 ID:nR/wca1E
>>913
auto incrementで設定したキーって唯一のPKでなければ
ならないんではなかったっけ?
なので

primary key(id1, id2, id3, id4)ではなく
primary key(id4)ならばエラーはなくなる(はず)
915NAME IS NULL:2007/09/14(金) 00:27:09 ID:CZohK/lz
>>914
今試しにPRIMARY KEYの指定順序を以下の通りに
してみたらテーブルが登録できてしまいました…。
Auto_incrementのカラムが唯一の主キーでなければ
ならないとしたら、登録されたしまったテーブルは不正でしょうか?

create table sample(
  id1 integer not null,
  id2 integer not null,
  id3 integer not null,
  id4 integer not null auto_increment,
  name varchar(20) not null,
  primary key(id4, id1, id2, id3)  ← auto_incrementのカラムを1番目に移動
) ENGINE=InnoDB;
916915:2007/09/14(金) 01:01:23 ID:???
何度も失礼します。
show index from sample;を実行したところ、
>>915のSQL文の主キーがid4しか出てこなかったので、
PRIMARY KEY(id4, id1, id2, id3)のid1, id2, id3は
主キーとしては無視されているようです。
エラーが出なかったためはまってしまいました。
917915:2007/09/14(金) 01:10:02 ID:???
でも、show fields from sample;を実行したら、
id1, id2, id3, id4は全て主キーになってました…。
もちろんid4はauto_incrementになってます。
やはり>>914さんが言うとおりに、
主キーかつAuto_incrementのカラムは表に1つだけ
というのが正しい事なのでしょうか?もう分かりません。
918NAME IS NULL:2007/09/14(金) 01:42:27 ID:???
目と目が逢う 瞬間 主キーだと気付いた
919NAME IS NULL:2007/09/14(金) 05:20:39 ID:lPZkncXg
質問させて下さい。
MySQL 5.0.43を使っています。
■カンマ区切りのデータの一部を曜日に合わせて取得したい

・テーブル構造
CREATE TABLE `info_percent` (
`info_percent_no` int(10) unsigned NOT NULL PRIMARY KEY AUTO_INCREMENT COMMENT 'Percent No',
`info_percent_daily` varchar(34) NOT NULL default '' COMMENT 'デイリー% カンマ区切りで7日間',
`info_percent_up_date` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT '更新日時',
`info_percent_reg_date` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT '登録日時',
`info_percent_del_flg` TINYINT NOT NULL DEFAULT '0' COMMENT '削除フラグ 0=未削除 1=論理削除 2=一時削除'
) ENGINE = innodb CHARACTER SET ujis COLLATE ujis_japanese_ci COMMENT 'Percent情報';

・レコード例
info_percent_dailyには「5,10,11,7,6,8,6」のようなデータが入っています。

・質問詳細
info_percent_dailyレコードにはプログラムで利用する一週間分(7個分)の数字がカンマ区切りでセットされています。
このレコードからその日の数字を取得したいのです。
テンプレに紹介されているリンクを色々見回って無い知恵を絞って以下のような文を書いたのですが、NULLが返されます。

SELECT
MAKE_SET( ( DATE_FORMAT( NOW(), '%w' ) +1 ),`info_percent_daily` )
FROM
`info_percent`

本日、金曜日であれば、上記レコードデータで言うと「8」を取得したいのですが、なかなか上手くいきません。
ほとほと行き詰まってしまいました。
お力添えをいただけませんでしょうか。
宜しくお願いします。
920NAME IS NULL:2007/09/14(金) 06:04:31 ID:???
>>918
漏れは別れてから気付いた
921NAME IS NULL:2007/09/14(金) 11:22:14 ID:???
>>919
SELECT
SUBSTRING_INDEX(SUBSTRING_INDEX(`info_percent_daily`, ',', DATE_FORMAT( NOW(), '%w' ) +1),',',-1)
FROM
`info_percent`
922919:2007/09/14(金) 22:25:59 ID:???
>>921
ばっちりいけました!
なるほどこのようにすればいいんですね。
勉強になりました。ありがとうございました!
923NAME IS NULL:2007/09/15(土) 01:18:59 ID:ZjADhqZJ
すみません
あるフィールドにテーブル名が入っていて
そのテーブルと join するようなクエリって書けますか?

table1
| id | value |
| 1 | 100 |
| 2 | 200 |
| 3 | 300 |

table2
| id | value |
| 1 | hoge |
| 2 | fuga |

table3
| id | tbl | key |
| 1 | table2 | 2 |
| 2 | table1 | 3 |

のときに
select table3.id, `tbl`.value from table3 left join `tbl` on table3.key = `tbl`.id;
みたいな感じのことがしたいのです

924NAME IS NULL:2007/09/15(土) 11:09:16 ID:???
select max(hoge) + 1 from fuga;
としたときにデータが空だと
NULLが出力されてしまいますが
NULLを0とみなして計算して
1を出力してもらうためには
どういう記述にすればよろしいでしょうか?
925NAME IS NULL:2007/09/15(土) 11:15:45 ID:???
select coalesce(max(hoge),0) + 1 from fuga;
926NAME IS NULL:2007/09/15(土) 22:57:05 ID:???
>>923
table1とtable2をまとめてこうすればいいじゃない。

table
| table | id | value |
| table1 | 1 | 100 |
| table1 | 2 | 200 |
| table1 | 3 | 300 |
| table2 | 1 | hoge |
| table2 | 2 | fuga |
927NAME IS NULL:2007/09/16(日) 17:07:51 ID:rVRRSUiB
SQL文の中で、名前にハイフンを含むデータベース名は
どのように書いたらいいのでしょうか。
スクリプトからアクセスする場合はhoge-fugaで問題ないのですが、
phpMyAdminからやプロンプトから、例えば
CREATE DATABASE hoge-fuga;
とするとパースエラーになってしまって・・・
hoge\-fugaなどとしてもダメです。
928NAME IS NULL:2007/09/16(日) 17:33:11 ID:???
ハイフンを含まないデータベース名にすれば無問題
929NAME IS NULL:2007/09/16(日) 17:39:28 ID:rVRRSUiB
>>928
データベース名にはすでにハイフンが入っているんです。
スクリプトからはそれでアクセスできていますが
直打ちだとどうしたものか・・・
すべてスクリプトを介してアクセス、というのはナシの方向でひとつ・・m(_ _)m
930NAME IS NULL:2007/09/16(日) 20:22:29 ID:???
`hoge-fuga`
931NAME IS NULL:2007/09/16(日) 22:00:21 ID:rVRRSUiB
>>930
ありがとうございます!助かりました!
932NAME IS NULL:2007/09/18(火) 13:59:24 ID:LM+QWEw9
mysqlとphpの連携を学習したいと重いDBを勉強したいのですが、
Mysql5.0をインストールしました。
入門レベルとして、何を覚えていけばよろしいでしょうか?

OSはwindowsXPです
933NAME IS NULL:2007/09/18(火) 14:56:17 ID:???
まず入門書を数冊読破して下さい
934NAME IS NULL:2007/09/18(火) 15:29:02 ID:???
SQL文を覚えてください
935NAME IS NULL:2007/09/18(火) 16:22:18 ID:6uQh2xqH
update hoge_tbl set countup = (select countup from hoge_tbl) + 1;
上記のような自身のカウントアップをさせたいのですが
update時に同テーブルをサブクエリに指定しているのが原因という事は
わかったのですが、MYSQLにはどのような代替案があるのでしょうか?
936935:2007/09/18(火) 16:34:37 ID:???
自己解決しました
937NAME IS NULL:2007/09/18(火) 16:40:33 ID:???
update hoge_tbl set countup = countup + 1;

では問題があるのだろうか??
938NAME IS NULL:2007/09/18(火) 17:45:44 ID:???
>>932
mysqlは軽いRDBMSの部類だよ。と突っ込んでみる。

939NAME IS NULL:2007/09/18(火) 21:51:04 ID:???
>>932
windowsでは様々な問題に直面します。
まずはLinuxの導入から初めてください。

しかし重いDBが希望のようですので、
windowsのままでOracleかMSSQLでも購入してください。
940NAME IS NULL:2007/09/19(水) 05:24:48 ID:5f6hIkAQ
text型のカラムにalterでunique属性をつけようとすると
エラーがでるのですがどうしてでしょうか?(
varcharだとうまくいくようなのですが。。)

mysql> alter table a_tbl add unique b_item(b_item);
ERROR 1170 (42000): BLOB/TEXT column 'name2' used in key specification without a key length

ごきょうじゅお願いします。
941NAME IS NULL:2007/09/19(水) 06:30:18 ID:thY75gxD
BLOBやTEXTカラムではインデクスする文字列の長さを指定する必要がある

って事なんだけど、エラーメッセージにもそのように書いてあるやん
942NAME IS NULL:2007/09/19(水) 23:53:34 ID:???
それだとuniqueにならない恐れがありますよね?
943NAME IS NULL:2007/09/20(木) 01:29:51 ID:???
>>942
そんなんなんとかしろ
944932:2007/09/20(木) 10:47:44 ID:fT/6kBZZ
レス遅くなりました。
とりあえずはMysqlで勉強したいと思います。
やはりSQL文をコマンドラインに打ち込んで覚えるのがいいですよね?
教本あるのですがさっぱり
945NAME IS NULL:2007/09/20(木) 13:04:10 ID:???
>>944
そう重います(笑)
946NAME IS NULL:2007/09/20(木) 13:24:21 ID:???
InnoDBを使ってるんですが、
innodb_file_per_tableオプションを付けたほうがパフォーマンスは上がるんでしょうか?

ibdata1が肥大化してすごいサイズになってるんですが、これってパフォーマンスには関係ないんでしょうか?

947NAME IS NULL:2007/09/21(金) 00:31:02 ID:???
InnoDB使ってるやつなんて いんの?
948NAME IS NULL:2007/09/21(金) 12:34:52 ID:???
MySQL User Conf Japan 2007 のInnoDBパフォーマンスチューニングでは?そんなパラメータの話は出てこなかった気が。
949NAME IS NULL:2007/09/21(金) 14:21:48 ID:???
>>946
関係ある。あたりまえだが、ファイルサイズが大きくなれば一般に遅くなる。

ibdata1が同一物理ディスク上にあるなら、Windowsでいうデフラグするだけで早くなる可能性はある。
950NAME IS NULL:2007/09/21(金) 20:25:14 ID:???
>>949
可変長カラムがあってもInnoDBはフラグメンテーション発生しないんでなかったっけ?
Winじゃなければ関係ないような。
951NAME IS NULL:2007/09/22(土) 08:34:10 ID:???
ファイルのフラグメントと、DBのフラグメントは違うんじゃないか?
ファイルが大きくても、たくさん開くよりは、たいていは速いよ。
952NAME IS NULL:2007/09/22(土) 14:48:03 ID:SdV4tJcU
DEFAULT CHARSET=utf8を付けるとエラーが出るのですが、
このバージョンではこの指定はサポートしていないということでしょうか?

・Win2k MySQL 4.0.20a-nt

・コマンド
CREATE TABLE `test` (
`id` INTEGER
) ENGINE=InnoDB DEFAULT CHARSET=utf8

・エラー
#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 'DEFAULT CHARSET=utf8' at line 3

953NAME IS NULL:2007/09/22(土) 16:14:45 ID:???
utf8はMySQL4.1からサポート。
954952:2007/09/22(土) 17:05:08 ID:???
>>953
そういうことでしたか。
ありがとうございました。
955NAME IS NULL:2007/09/23(日) 00:03:21 ID:nJudGDWP
すいません、初心者です。
今、テーブル作ろうと思ってるんだけど、1/7/2007って値が入るカラムのデータ型ってなんになるのかな?
一応、mysqlのホームページでリファレンスマニュアル見たけどわからんかった・・・
956NAME IS NULL:2007/09/23(日) 00:09:45 ID:???
>>955
アメリカのデートだな
957NAME IS NULL:2007/09/23(日) 00:16:14 ID:nJudGDWP
>>そうなんすか?駄目理科・・・
テキスト型じゃまずいのかな・・・そっちの方向で考えているのですが・・・
初心者かっこわりー
958NAME IS NULL:2007/09/23(日) 00:29:37 ID:nJudGDWP
>956
テキスト型で行けました。ありがとうございました。
959NAME IS NULL:2007/09/23(日) 01:27:31 ID:FBJ1MWDN
すみません、DBを業務で触るのは久々なので教えて下さい…。
以前はSybase(バージョン失念)を2年程弄っていたのですが、
今回MySQL5.xを弄る事になりまして。

DATE_TIME型のカラムをCHAR型にCONVERTし当日よりn日前のレコードを抽出したいのです。
確かこのような構文だったと記憶しているのですが。

datediff ( convert (char(8), dd, now(), 112) - n

いまいち思い出せず…。
960NAME IS NULL:2007/09/23(日) 01:52:04 ID:???
DATETIMEをCHARにCONVERT?
逆じゃないの?

mysql> desc test;
+-------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| dd | char(8) | YES | | NULL | |
+-------+---------+------+-----+---------+-------+
1 row in set (0.21 sec)

mysql> select * from test where datediff(convert(dd, date), now()) = -22;
+----------+
| dd |
+----------+
| 20070901 |
+----------+
1 row in set (0.01 sec)
961NAME IS NULL:2007/09/23(日) 02:02:19 ID:???
dd列にINDEXが効くように直してみた。
mysql> select * from test where dd = date_format(date_sub(now(), interval 22 day), '%Y%m%d');
+----------+
| dd |
+----------+
| 20070901 |
+----------+
1 row in set (0.11 sec)
962NAME IS NULL:2007/09/23(日) 04:13:25 ID:???
わけあって Microsoft Access からアクセスする必要が
出てきたんだけど、 ODBC で接続すると #DELETED# って
表示されるよ、Access で。

ググってみるとバージョン依存のような記述もあるんだけど、
「あきらめれ」っていう記述もある。レコード数はあってるから
まったく見れてないわけじゃないと思うんだけどなぁ。
やっぱり BIGINT を使ってるのが悪いのか・・・

既存の MySQL ベースで動いているウェブアプリのメンテナンス
用のツールを、Access フロントエンドで作ってくれっていう
案件なんだよ・・
963NAME IS NULL:2007/09/23(日) 04:30:43 ID:???
>>962
datetimeだかなんだかが必要だと聞いた記憶がある
964だよもん!!!:2007/09/23(日) 11:00:10 ID:RN+MewUh
次スレのご案内

MySQL 総合 Part12
http://pc11.2ch.net/test/read.cgi/db/1190512649/
965NAME IS NULL:2007/09/24(月) 10:35:31 ID:0g3D2SCa
ume
966717:2007/09/24(月) 15:04:50 ID:pceZ+XvF
連続のUPDATEの際、INSERTのように1文で書くことはできますでしょうか?
以下のように書いてみましたができませんでした。

UPDATE hoge SET title='HOGE1' WHERE seq=1, hoge SET title='hoge2' WHERE seq=2;
967NAME IS NULL:2007/09/26(水) 11:43:20 ID:???
バックエンドがMySQL4.1でAccess2000がフロントエンドです。
サーバーエンコーディングがujisで、クライアントエンコーディングがcp932。

この環境だと全角のハイフンが化けるんです。フィールドの型はvarcharですが。

データベース作成時にsjis指定したり、my.cnfにdefault-charset=sjisとすると、そんな文字コード知らんて言われるんですよね。
フロントエンドでAccess使いたくて、やってみてるんですが…。
Access2003とかだとまた違ったりするのかな?

PostgreSQLと比べるとマルチバイトの設定がムズいっス。
968NAME IS NULL:2007/09/26(水) 21:50:04 ID:???
>>967
クライアントがcp932ならサーバではeucjpmsを使うべき。


ただ、eucjpmsは5.0以降の対応だったかも。
つか、4.1使うなら5.0にしたほうがいいんじゃね?
969NAME IS NULL:2007/09/27(木) 04:45:57 ID:???

質問させてください。
MySQL5を使用しています。
SELECT
column1,
column2,
column3,

FROM
`test`
WHERE
UNIX_TIMESTAMP() - UNIX_TIMESTAMP( `datetime` ) > 30

上記のようなSQLにて「UNIX_TIMESTAMP() - UNIX_TIMESTAMP( `datetime` )」部分の計算結果を
SELECTで取得するカラムのひとつとして含めたいのですがどのようにすればよいでしょうか?
SELECT ( UNIX_TIMESTAMP() - UNIX_TIMESTAMP( `datetime` ) ) AS column4
のようにすればできますが、実際にはサブクエリを含んだSQL文により`datetime`を取得しています。
同じサブクエリをSELECT内でも実行するのは非常に非効率だと思ったのでMySQLのリファレンスを
読みながらユーザ変数をなんとかして使えないか等やってみたのですが、思い通りの結果が得られませんでした。
具体的には下記のような形式です。
SELECT
column1,
column2,
column3,
@a
FROM
`test`
WHERE
@a:=( UNIX_TIMESTAMP() - UNIX_TIMESTAMP( `datetime` ) )
AND
@a > 30

google先生にお伺いを立てていたのですが、それも行き詰まってしまいました。
アドバイス頂けませんでしょうか。
970NAME IS NULL:2007/09/27(木) 06:53:25 ID:???
@hoge := UNIX_TIMESTAMP() - UNIX_TIMESTAMP( `datetime` ) > 30;
SELECT
column1,
column2,
column3,
@hoge as column4,

FROM
`test`
WHERE
@hoge > 30
971967:2007/09/27(木) 08:10:03 ID:???
>968
thx.

色々試してるけど、やっぱダメっぽい。
うーん、5.0インスコしてみます。
972NAME IS NULL:2007/09/27(木) 17:19:26 ID:???
5.0+Access2000とか
5.0+Access2007とか
やってみたけどだめだったぽ
973967:2007/09/27(木) 21:02:21 ID:???
>972
Σ(゚Д゚ υ) アタァ!!

mjsk。 _/ ̄|○|||
974NAME IS NULL:2007/09/28(金) 04:43:18 ID:???
MySQLの方じゃなくてAccessの方に原因があるから
default-charsetとかいじっても無理だろうな
975NAME IS NULL:2007/09/28(金) 11:12:20 ID:???
あれ、そうなん?
てっきりODBCの設定でなんとかなるものとばかり……
976NAME IS NULL:2007/09/28(金) 19:39:29 ID:???
結論:Accessを使うのが悪い
977NAME IS NULL:2007/09/29(土) 01:43:35 ID:???
>>967がエスパー期待の質問とはいえ、話がどんどん面白い方向に行ってるな。w
978NAME IS NULL:2007/09/29(土) 11:52:18 ID:???
MySQLのODBCコネクターがバグってるから
そこを直さない限り何をあがいても駄目
979NAME IS NULL
ODBCもカスみたいなもんだけどなぁーーー