5ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

MySQL 総合 Part11

1 :だよもん!!!:2007/05/03(木) 10:06:30 ID:/jT2voSZ
快速 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

2 :NAME 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

3 :NAME 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

4 :NAME 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 テーブル名 なんて便利な構文があったとは…。
感激です。

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

6 :NAME IS NULL:2007/05/04(金) 12:48:20 ID:???
質問です。

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

よろしくお願い致します。

7 :NAME IS NULL:2007/05/04(金) 13:07:37 ID:???
>>6
リミット

8 :6:2007/05/04(金) 17:32:42 ID:???
>>7
リミットでぐぐったら解説ありました。
感激です。
ありがとうございます。

http://homepage2.nifty.com/sak/w_sak3/doc/sysbrd/mysql_10.htm

9 :NAME IS NULL:2007/05/04(金) 17:44:53 ID:qFF22gV4
>>9ならMYSQL公式サイトに5.0の日本語マニュアルうpされる

10 :NAME IS NULL:2007/05/04(金) 23:47:48 ID:L3HBUz2X
source sql.txt
で520件程度のload_fileを使ったクエリを読み込ませて
warningが4件ずつでながらもquery OK で成功してるはず
なのですが、実際にセレクトしてみるとload_fileでインサートしたはずの
画像が入っていません。
手動で1件ずつ入れる分には問題ないのですが、
なんとかする方法はないでしょうか?

11 :NAME IS NULL:2007/05/04(金) 23:51:15 ID:???
↑もう一回テストしてみたら入ってました。前回は念のためbeginってしたのが悪かったのかな。

12 :NAME IS NULL:2007/05/05(土) 10:40:57 ID:???
5.1日本語マニュアルがうP
http://dev.mysql.com/doc/refman/5.1/ja/index.html

13 :NAME IS NULL:2007/05/05(土) 13:53:06 ID:???
beginしている事自体、駄目だろw

14 :NAME IS NULL:2007/05/05(土) 16:26:28 ID:58Z5NhTT
はじめまして。
phpmyadminを使用してテーブルの作成をしたいのですが、VARCHARやTXETなどの可変長文字列を使用するとエラーがでます。

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

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

どなたかご教授願います。


15 :NAME IS NULL:2007/05/06(日) 02:00:51 ID:VOimcpaB
>>14
もう少し詳細な情報がないとなんとも。
「お腹痛いんですけど」だけでは原因はわかりません。

16 :NAME IS NULL:2007/05/06(日) 03:08:09 ID:???
>>15
TYPEがHEAPじゃなくて?

17 :NAME IS NULL:2007/05/06(日) 03:37:23 ID:DkpI5Nmx
mysqlからデータ取り出して、PHPで表示させる時、皆何つかってる?
俺はWHILEばっかなんだけど。


18 :NAME IS NULL:2007/05/06(日) 05:52:01 ID:???
>>17
csvファイルに落としてあとでのんびり参照。いやマジで。

19 :NAME IS NULL:2007/05/06(日) 08:33:40 ID:???
質問です。

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

掲示板で、使用してるテーブルが 40万行 60MB なのですが、
これは一般的に大きすぎますか?


20 :NAME IS NULL:2007/05/06(日) 08:54:22 ID:???
質問の意図が分かりません。
40万行なんてたいしたことではありません。

21 :NAME IS NULL:2007/05/06(日) 09:07:51 ID:???
>>20 ありがとうございます。

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

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



22 :NAME IS NULL:2007/05/06(日) 10:02:48 ID:???
>>21
データ量じゃなくてクエリーの不出来が原因だな。
たった100行1メガのテーブルでも
やり方しだいで負荷100%は楽々達成できる

23 :NAME IS NULL:2007/05/06(日) 13:25:21 ID:I2do9hQG
コマンドラインのmysqlクライアントでテーブル名やカラム名の補完ができるのを見かけたんですが、
使えるバージョンやconfigureオプションを教えてください。

24 :NAME IS NULL:2007/05/06(日) 15:34:13 ID:???
inner join と
left join + where 結合テーブル.任意のカラム is not null
っていうのは同じ結果が返ってくると思うのですが、やっぱり速度的は前者の方が速いんでしょうか?


25 :NAME IS NULL:2007/05/06(日) 16:52:06 ID:ixhAcene
質問です

誕生日などの記念日を日付型のフィールドに格納しています
そこで、今日から指定日数以内に記念日が含まれる人を抽出する場合の条件は
どのようにすればいいでしょうか?

26 :NAME IS NULL:2007/05/06(日) 22:43:56 ID:???
>>25
BETWEEN に、今日の日付関数と、日数計算関数を書く。

27 :NAME IS NULL:2007/05/07(月) 13:44:13 ID:???
>>23
ALTER TABLE

28 :NAME IS NULL:2007/05/07(月) 15:47:57 ID:???
Windows で skip-character-set-client-handshake を指定しても効かないのですが
わかる方おります?

29 :NAME IS NULL:2007/05/07(月) 20:03:57 ID:???
>>28
MySQLのバージョンがわからんとコメントしようがない。

30 :NAME 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)落としました。

31 :NAME IS NULL:2007/05/08(火) 06:13:38 ID:???
>>30

そのオプションが4.1以降なのでと思っていたけど、5.0系ですね、、、
my.cnfの記述が気になる所ですが、
効く、効かないの確認はどのようにしていますか?
mysqlクライアントから、SHOW VARIABLES LIKE 'char%';の出力結果を確認してみましたか?


32 :NAME 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 と同じになるものと考えていましたが
やっぱり違うんでしょうかね?


33 :NAME IS NULL:2007/05/08(火) 13:39:38 ID:???
>>28 です。
実際そのように動作するからそういう仕様なんでしょうね。
phpMyAdmin にお仕置きすることにします。


34 :NAME IS NULL:2007/05/08(火) 15:04:49 ID:???
MySQLのBOOL型はtrue/falseじゃなくて1/0ですよね?

35 :NAME IS NULL:2007/05/08(火) 16:17:10 ID:???
>>34
int(1)とか、そんなの。

36 :NAME 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


37 :NAME IS NULL:2007/05/09(水) 17:33:34 ID:???
MySQLを勉強中だが、遊びながら覚えるには
権限関係やmysqlコマンドラインクライアントの環境を把握するのが
大変で、本来のデーターベースいじる前にくたばった

寝る

38 :NAME IS NULL:2007/05/09(水) 21:38:09 ID:???
>>37
おやすみ。MSの世界へどうぞ。

39 :NAME IS NULL:2007/05/10(木) 00:48:31 ID:???
>>37
おらくるがいんじゃね?

40 :NAME 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
…なんか突っ込みくらいそう。

41 :NAME IS NULL:2007/05/10(木) 02:07:57 ID:???
GUIで弄れるSQL鯖とからくだよ。

42 :NAME IS NULL:2007/05/10(木) 02:35:51 ID:???
…とあるサービスにMySQLの空間をとってて
前に自分で勉強がてらphpMyAdminをぶちこんでいたことが発覚したが

設定全部忘れてる。最初からやり直し。

43 :NAME IS NULL:2007/05/10(木) 03:12:27 ID:???
…やっと -u root -p という呪文を覚えた。
すんげぇ疲れた

44 :NAME IS NULL:2007/05/10(木) 05:38:34 ID:???
チラシの裏に書くべき事をここに延々と書くな

45 :NAME IS NULL:2007/05/10(木) 17:34:55 ID:???
当たり前かもしれないのですが、レプリケーションって同じテーブルタイプじゃないとできないんでしょうか?

例えばDDLはまったく同じなInnoDBなテーブルからMyISAMなテーブルへはレプリケーションできないんですかね?

46 :NAME IS NULL:2007/05/10(木) 22:07:31 ID:???
>>45
違ってもok
もちろん、MasterとSalveでそれぞれcreate tableしてからレプカを走らせてね

47 :NAME IS NULL:2007/05/11(金) 00:10:43 ID:???
質問させてください
mysql4のときはmy.cnfにdatadir=/home/mysqlを追加するだけでよかったのですが
mysql5でdatadirを/home/mysqlにするにはどうしたらいいでしょうか?


48 :NAME IS NULL:2007/05/11(金) 11:53:50 ID:???
>>47
変わってないかと。
[mysqld] セッションの中に datadir=xxxx を入れて mysqldをリスタートしる


49 :NAME IS NULL:2007/05/11(金) 14:31:15 ID:???
検索用にMyISAMなDBを用意しておいて、データ保管用にInnoなDBを用意しておいてレプリケーションさせるのが最強?

50 :NAME IS NULL:2007/05/11(金) 15:05:26 ID:???
レプリカの原理上、そんなことしてもあまり意味はない

51 :NAME 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

52 :47:2007/05/11(金) 16:03:05 ID:???
>>48
レスありがとうございます。
[mysqld] のすぐ下にdatadir = /home/mysqlと記入すると起動できません。
なぜでしょうか?・・・・

53 :NAME IS NULL:2007/05/11(金) 17:48:26 ID:???
>>46
おお、そうなのですか。
当たり前すぎる事なのか、書籍にも書いてなかったので困ってました。
ありがとうございます!

54 :NAME IS NULL:2007/05/11(金) 17:54:42 ID:NevP4AlU
interBaseのデータをMysqlにコンバートできますでしょうか?

55 :NAME IS NULL:2007/05/11(金) 18:19:57 ID:???
つまりレプリケーションの時点で、Myisamの高速性は無効?

56 :NAME IS NULL:2007/05/12(土) 01:56:52 ID:???
>>51
warning が6768個あったってこと。
show warnings すれば warning の内容が見れる。

57 :NAME IS NULL:2007/05/12(土) 12:47:54 ID:HqCZ1kB3
フィールドにidとnameを作って、webサイトからnameを追加したらidが1づつ増やしていくようにしたいのですが、
idにint、nameにvarchar(50)を指定しました。
intの長さはどれくらいにしたらいいでしょうか?

あと設定するところがあればご教授お願いいたします

58 :NAME IS NULL:2007/05/12(土) 16:16:30 ID:???
>>57
そのidに何件格納するつもりなのかと、、、、その質問は難件だな。

59 :NAME 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

60 :NAME IS NULL:2007/05/12(土) 21:43:27 ID:???
intのバイトサイズは不変です

61 :NAME IS NULL:2007/05/13(日) 03:28:09 ID:???
データベースっておもしろいな、ハマりそう

62 :NAME IS NULL:2007/05/13(日) 15:06:24 ID:???
EUC-JP UTF-8 SHIFT-JIS
どれで作るのがおすすめですか?

63 :NAME IS NULL:2007/05/13(日) 15:56:41 ID:???
UTF-8

64 :NAME IS NULL:2007/05/13(日) 16:07:18 ID:???
文字化けの恐怖が・・・

65 :NAME IS NULL:2007/05/13(日) 18:42:27 ID:???
JISにしておくとメールの文字化け無いけどね。

66 :NAME IS NULL:2007/05/13(日) 20:29:37 ID:???
PHPとの連携でいちいち変換しないと

67 :NAME IS NULL:2007/05/13(日) 22:33:52 ID:???
>>62
クライアントに合わせれば良いんだけど。

68 :NAME IS NULL:2007/05/14(月) 04:13:51 ID:6ju7MXtu
Webアプリケーションで使う、MySQLのテーブル設計を勉強したいのですが、
勉強に最適なサイトはありませんか?
掲示板の時はこういうテーブル構成にするとか、
そういった設計から、設計の考え方などを勉強したいのですが、
何か最適なサイトがあれば紹介していただけると嬉しいです。

69 :NAME IS NULL:2007/05/14(月) 05:28:49 ID:???
>>68
phpを使ったサイトとして参考になる。
http://www.nvnetwork.com/home.php

70 :NAME IS NULL:2007/05/14(月) 11:43:10 ID:???
>>52
亀レスだが、/home/mysql に システム管理用のデータベース mysql ディレクトリ
が無いとか、パーミッションがおかしいとかじゃないかい。
わからなければエラーログを見るが基本。

71 :NAME IS NULL:2007/05/14(月) 18:28:32 ID:???
>>69
色々なところに通報しました

72 :NAME IS NULL:2007/05/14(月) 18:28:46 ID:???
>>70
レスありがとうございます。
もうレスがないかと思ってあきらめてました。
70さんを参考にいろいろ試して見ます。
ところでみなさんMySQLのバージョンは4ですか?5ですか?
あとdatadirはどこにしてますか?

73 :NAME IS NULL:2007/05/14(月) 23:39:02 ID:LAW+Ghic
phpとmysqlでどの程度のことができれば職場で苦労しない?
たとえばショッピングカートが作れれば無問題とか。

74 :NAME IS NULL:2007/05/14(月) 23:44:38 ID:???
>>73
そんなあいまいな質問をするようじゃ、職場で苦労する。
仕事は技術も必要だが、一般常識、人間関係のほうがもっと大事。

75 :NAME IS NULL:2007/05/14(月) 23:59:56 ID:Ho+ISCuc
mysqlのdbは最大64文字までですが
テーブル名は何文字までOKですか?

76 :NAME IS NULL:2007/05/15(火) 00:35:04 ID:???
ポータルやるなら決済系だし、業務系なら簿記も知らないと意味が無い。

77 :NAME IS NULL:2007/05/15(火) 06:08:34 ID:???
>>76も十分あいまいだと思うが・・w

78 :NAME 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

79 :NAME IS NULL:2007/05/16(水) 09:29:06 ID:???
>>78
原因として考えられることは、たっくさんあるな。

80 :NAME IS NULL:2007/05/16(水) 14:44:43 ID:???
>>57
社員名簿でも作るの?俺ならとりあえず4桁にする


81 :NAME IS NULL:2007/05/16(水) 17:19:21 ID:???
sql5.0.27 PHP5.2.1で連携しています。
すべてUTF-8で設定していますが
「−」全角のマイナスだけがなぜか?に化けてしまいます。
みなさんはいかがでしょうか?
対策等ご存知であればよろしくお願いいたします。
その他は今のところ問題ないようです。
よろしくお願いいたします。

82 :NAME IS NULL:2007/05/16(水) 17:50:01 ID:???
>>81
〜 もだろ?

83 :NAME IS NULL:2007/05/16(水) 18:34:53 ID:???
>>82
〜 もでした。
どうしようもないんでしょか?

84 :NAME IS NULL:2007/05/16(水) 19:41:32 ID:???
ujisにすれば?当面不都合はないかと。

85 :NAME IS NULL:2007/05/16(水) 22:53:09 ID:???
cp932とeucjpmsを使えば解決しそうな予感。

86 :NAME IS NULL:2007/05/17(木) 20:14:52 ID:???
WindowsのMySQL Command Line CLientで操作してるんですが、Shift-Jis以外の文字表示は無理なんですか?


87 :NAME 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)
と言われてしまいました。
解決法をいろいろと調べてみたのですが相変わらずわかりません。。。
だれかわかる人いましたらよろしくお願いします。

88 :87:2007/05/17(木) 21:42:45 ID:???
ちなみに
OS]使用で
/usr/local/mysql/bin/mysql -u root -p
上記では使用することができました。
よろしくお願いします。

89 :NAME IS NULL:2007/05/17(木) 21:50:42 ID:???
>>86
character_set_results

90 :NAME IS NULL:2007/05/17(木) 21:52:21 ID:???
>>88
grant

91 :87:2007/05/17(木) 21:55:49 ID:???
>>90
ありがとうございます。
最初はrootのみでしか使えないということなのでしょうか?

92 :NAME IS NULL:2007/05/17(木) 22:02:09 ID:???
>>91
ドキュメント嫁
ttp://dev.mysql.com/doc/refman/4.1/ja/post-installation.html

93 :NAME IS NULL:2007/05/17(木) 23:59:56 ID:+ucqrGEe
マックosxにインストールしたんですが、
C―APIの動的ライブラリの場所、名前を教えて頂けないでしょうか。

94 :NAME IS NULL:2007/05/18(金) 00:10:32 ID:???
>>93
マニュアル嫁
http://dev.mysql.com/doc/refman/4.1/ja/c.html

95 :NAME IS NULL:2007/05/18(金) 03:25:37 ID:96NrWpJ/
selectの後ろに\Gつけると

ERROR:
No query specified

ってなるんですけど、これどうゆう意味ですか?

96 :NAME IS NULL:2007/05/18(金) 12:27:11 ID:???
>>95
クエリが無いって言ってるジャン
エイゴワーカリマスカ?
\G の前に ; をつけてるだろ。


97 :NAME 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
にしたいのです。

98 :NAME IS NULL:2007/05/18(金) 19:23:26 ID:???
>>97
???日本の方???
"データベース 正規化" でググって勉強しる。

99 :NAME IS NULL:2007/05/18(金) 19:55:20 ID:???
>>97
とりあえず 案1で、文字列index効かせればいんでないの。
ただ、フルパス限定。 c を含む物を探すとなると途端に
使い物にならんだろね。


100 :NAME 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)

何ていわれて先に進みません。対処法をご存知のかたご教授願います。

101 :NAME 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も同じようなインデックスが
出来上がるように思いました。

102 :NAME IS NULL:2007/05/19(土) 03:51:49 ID:???
>>100 これの話かな?
http://bugs.mysql.com/bug.php?id=27318

103 :NAME IS NULL:2007/05/19(土) 06:00:51 ID:eFxrLNmp
explainてselectにしかつけれないの?
他の命令でインデックス使ってるか確認する時は
selectに直すしかない?

104 :NAME IS NULL:2007/05/19(土) 07:10:09 ID:???
selectにすればいいんでねーの。 なんでダメなん?

105 :NAME IS NULL:2007/05/19(土) 08:35:46 ID:dKYDsDbp
>>102

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



106 :NAME IS NULL:2007/05/19(土) 15:09:36 ID:???
mysql3.23.58でどうあがいても文字化けしちゃうのってあります?
文字化けというより検索で他のがヒットしちゃう。
バイナリーで回避できるけど、textだと指定できないことに気づき再度悩み中。
他のサイトではバグというか日本語対応してなくて、それを回避する場合、
4.1以上にと書いてあったのですがこのとおりでしょうか?
もしその場合、3.23.58からだとやっぱり今は5に切り替えるのがベストでしょうか?


107 :NAME IS NULL:2007/05/19(土) 16:01:19 ID:???
>>106
mysqld 起動時の charset と格納されているデータの charset が異なるとか

108 :NAME IS NULL:2007/05/19(土) 16:45:44 ID:???
>107
4以下は日本語は日本語として扱われず、完全には無理っぽくて
a-zA-Z に一致するバイト列があれば強制的に変換........
という感じの記述を検索で見つけたので、
質問してみたのですが、設定がパーフェクトなら、
アップしなくてもすべてうまくいくと考えてよいということで
根本的な問題は、設定間違いと考えていいということでしょうか。

109 :NAME IS NULL:2007/05/19(土) 19:03:36 ID:???
>107
すんません。
ご指摘の対応で解決できました。バージョンアップしなくてすみました。
どもでした。

110 :NAME IS NULL:2007/05/20(日) 05:30:07 ID:2GXp1HU+
下記のテーブル名AAAがあります。担当者番号は重複しているレコードが大量にあります

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


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



111 :NAME 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は問題多くて使いものにならなかったけど
今のところ問題なし


112 :NAME IS NULL:2007/05/20(日) 11:00:07 ID:WPBssusO
>>110

SQLの前に日本語しっかりな。

113 :NAME IS NULL:2007/05/20(日) 13:36:48 ID:???
チョン?

114 :NAME IS NULL:2007/05/20(日) 15:00:26 ID:???
>>110
MAX() と GROUP BY を使って、2秒で出来る初歩的SQLです。
あとは努力しましょう。

115 :NAME IS NULL:2007/05/20(日) 23:32:21 ID:???
表の作成をしようと思いCREATEを使用したのですが、
ERROR 1046 (3D000): No database selected
と表示されてしまいます。
原因がわからないのですが誰か教えていただけないでしょうか。

116 :NAME IS NULL:2007/05/20(日) 23:33:37 ID:???
>>115
表の前にまずDBを作れ。


117 :NAME IS NULL:2007/05/20(日) 23:35:14 ID:???
データベースを選択する時には、

use データベース名;

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

use none; とか use; とか色々試してみましたが、無理でした。

118 :NAME IS NULL:2007/05/20(日) 23:39:09 ID:???
何もデータベースを選択してない、という状態が必要なの?

119 :NAME IS NULL:2007/05/20(日) 23:40:40 ID:???
quitしてもう一回接続すれば?

120 :117:2007/05/20(日) 23:42:05 ID:???
>>118
なんとなくです

>>119
やっぱそれしかないですかね('A`)

121 :NAME IS NULL:2007/05/20(日) 23:42:59 ID:???
>>116
わかりました!ありがとうございます。

122 :NAME IS NULL:2007/05/21(月) 03:03:05 ID:???
コマンドプロントでeditでエディタが起動するけど
これってどう閉じるの?&使用用途を教えてくだされ

123 :NAME IS NULL:2007/05/21(月) 07:25:52 ID:???
>>122
環境変数 $EDITOR に指定したテキストエディタが起動する
\! echo $EDITOR か system echo $EDITOR で確認
標準は vi かな?

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

環境変数の指定方法とか、エディタの使い方はググる

124 :NAME IS NULL:2007/05/21(月) 12:47:48 ID:???
>>123
ちょっとわかりました。
使い方ググってみます

125 :NAME IS NULL:2007/05/21(月) 14:53:52 ID:???
表の作成時の指定で 011.44.134.42 や .2 などを入力するにはどの型を指定すればよいのでしょうか。

126 :NAME IS NULL:2007/05/21(月) 15:10:26 ID:???
>>125
IPすか?

127 :NAME IS NULL:2007/05/21(月) 16:56:03 ID:???
>>125
自分なら、VARCHAR(最大文字数) にするね。


128 :NAME IS NULL:2007/05/21(月) 18:50:19 ID:???
俺もvarchar(15)でやってる
ipをintにする関数があった気するけど視認性下がるから

129 :NAME IS NULL:2007/05/21(月) 20:18:41 ID:???
みなさんありがとうございます。
こちらの勘違いで011と挿入すると表示では11になって困っていたのですが、
シングルクォーテーションで囲んでいなかっただけでした。
ご迷惑をおかけして申し訳ありませんでした。

130 :NAME IS NULL:2007/05/22(火) 11:52:18 ID:8/PhpwlH
ストアドプロシジャのことで質問させてください。
プロシジャの中で、まず最初にselectします。結果は複数レコードになります。
この複数のレコードをプロシジャ内の変数に一度代入して、その結果セットをさらにそのプロシジャ内で条件分岐とかしたいのですが、
結果セットを代入する変数の型っていうのは何になるのでしょうか?

131 :NAME IS NULL:2007/05/22(火) 21:53:17 ID:???
MySQL4.1をPHP4.3から利用してます。両方UTF-8で利用していて、ORDER BYで
並べ替えしたいのですが、日本語(ひらがな)の並びが間違って出て来ます。
降順と昇順を入れ替えると間違った並びのまま逆さになります。

同じ環境で英文字の並べ替えは問題なく動作しています。
対処法などご存知の方お願いします。

132 :131:2007/05/23(水) 09:54:22 ID:???
>>131
自己解決。COLUMN COLLATEをutf8_unicode_ciとしたら正常に動作しました。

133 :NAME IS NULL:2007/05/23(水) 11:21:47 ID:???
>>130
CURSOR以外でってこと?

134 :NAME IS NULL:2007/05/24(木) 15:36:16 ID:rlJddH2x
二つのテーブルに共通のフィールドがあるとして、
その共通のフィールドを手がかりに、
一方しか持っていないデータを違うテーブルからセレクトして取得するにはどうすればいいんでしょうか。

135 :NAME IS NULL:2007/05/24(木) 16:55:19 ID:???
>>134
join して nullを探せばどうよ。

136 :NAME IS NULL:2007/05/25(金) 03:20:04 ID:2/gsg6oI
>>135
調べてやってみます!!ありがとう!

137 :NAME 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つずつ取得しなければいけないでしょうか?

どなたか教えてください・・・

138 :NAME 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;

実行パフォーマンスは最悪なので
データ量が多い場合は、分けてループした方がいいかも。

139 :NAME IS NULL:2007/05/25(金) 19:55:44 ID:???
  /'           !   ━━┓┃┃
-‐'―ニ二二二二ニ>ヽ、    ┃   ━━━━━━━━
ァ   /,,ィ=-;;,,, , ,,_ ト-、 )    ┃               ┃┃┃
'   Y  ー==j 〈,,二,゙ !  )    。                  ┛
ゝ.  {、  - ,. ヾ "^ }  } ゚ 。
   )  ,. ‘-,,'   ≦ 三
ゞ, ∧ヾ  ゝ'゚  グ    ≦ 三 ゚。 ゚
'=-/ ヽ゚ 。≧    ッ    三 ==-
/ |ヽ  \-ァ,    ド     ≧=- 。
  ! \  イレ,、    コ    >三  。゚ ・ ゚
  |   >≦`Vヾ    |   ヾ ≧
  〉 ,く 。゚ /。・イハ 、、  ヒ  `ミ 。 ゚ 。 ・

140 :WebProg板から誘導されてきますた: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

141 :NAME IS NULL:2007/05/26(土) 14:25:46 ID:???
>>140
その$sql変数に、代わりに select * from test を入れてちゃうと動くんだろうね?

142 :NAME IS NULL:2007/05/26(土) 14:42:58 ID:???
>>140
mysqliのmysqli_multi_query()関数を使えば動くようになる、てオチじゃないだろうね?


143 :140: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

144 :NAME IS NULL:2007/05/27(日) 02:47:19 ID:???
なんか効率無視だな(w

145 :NAME IS NULL:2007/05/27(日) 06:12:31 ID:???
効率良いのを教えてください ><

146 :NAME 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;

どのようにすればカウント数が表示されますか?

147 :NAME IS NULL:2007/05/28(月) 06:40:04 ID:???
>>146
PHPのmysql_query()の説明をよく読め

148 :NAME IS NULL:2007/05/29(火) 00:03:08 ID:???
そこでperlですよ

149 :NAME IS NULL:2007/05/29(火) 01:05:43 ID:???
>>146
あんた、いい芸人になれるわ


150 :NAME IS NULL:2007/05/29(火) 01:08:32 ID:pWsap/AA
レプリケーションのマスタが落ちた場合、スレーブをマスタに切り替えて
運用するには RESET SLAVE でスレーブ解除すれば良いの?


151 :NAME IS NULL:2007/05/29(火) 21:36:12 ID:???
有料で提供するASP(アプリケーション・サービス・プロバイダ)のバッグエンドにMySQLを利用する場合、
エンタープライズで無くても大丈夫でしょうか?

152 :NAME IS NULL:2007/05/29(火) 22:07:27 ID:???
そんな事を2chで聞いてるお前に問題があるな、少なくとも。


153 :くきくき:2007/05/29(火) 23:10:32 ID:tiIImBH4
エラー内容は、error nr.1045というものです。
環境は、XP でノートンいれてあります。だけど
スクリプト遮断は、はずしております。あと、ルータも
かましています。特に、ポートを空けるとかしていないです。
空けなくてはいけないのかな?

154 :NAME IS NULL:2007/05/30(水) 01:48:50 ID:???
TEXT型のカラムにunique制約を追加することは可能でしょうか?

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

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

可能であればその方法を教えてくださいませ。


155 :NAME IS NULL:2007/05/30(水) 08:25:59 ID:???
>>154
まずマニュアルを読むこと
ttp://dev.mysql.com/doc/refman/4.1/ja/indexes.html

156 :154:2007/05/30(水) 22:24:35 ID:???
>155
ありがとうございます。
長さを指定すると作成することが可能ということが分かりました。

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

これは、格納されている値すべてを比較の対象にすることは不可能ということでしょうか?
もし可能なのであれば、ご教授頂ければ幸いです。

157 :NAME IS NULL:2007/05/30(水) 23:17:54 ID:???
>>156
はい、無理です。
その代わり、カラムをSHA1()関数にかけた値を保存し、
これをUNIQUEにするのはどうでしょうか?
バッティングは非常に少ないと思います。

158 :154 :2007/05/31(木) 18:07:20 ID:???
>157
なるほど大変勉強になりました。
また同時にmd5はイケてない事も分かりました。
ありがとうございました!
どこかで出会う事があればお酒でもご馳走したい気持ちでいっぱいです。


159 :157:2007/05/31(木) 18:42:04 ID:???
>>158
私が勤務する会社でSennaというソフトの開発をやっているので、
そちらを使っていただけると大変うれしいです。
TritonnというソフトでMySQLと橋渡しができます。

160 :NAME IS NULL:2007/05/31(木) 20:03:01 ID:???
特定しました

161 :NAME IS NULL:2007/05/31(木) 20:17:33 ID:???
Sennaってレコード数が増えると途端にパフォーマンスが落ちるよね。
キーワードによってはエンジンブローしたかと思うほど時間がかかる場合があり
井出有治にも負けそうな気配。
2nd入れても変わらず・・・で、検証で捨てた経験あり。

162 :NAME IS NULL:2007/05/31(木) 20:20:50 ID:???
md5バッティングするってマジですか?
md5でつこうてるんだけど
どのくらいの確率でバッティングするの?

163 :157:2007/05/31(木) 21:38:48 ID:???
>>161
激しくスレ違いだが、たぶんメモリ不足だと思う。
あとは大きなデータベースだとパラメータ設定しないと遅い。
ま、パラメータ設定するとさらにメモリを食うわけだが…

MD5でも実用上問題ないと思う、個人的には。

164 :NAME IS NULL:2007/05/31(木) 23:40:19 ID:???
>>162
バントしたらホームランになっちゃった くらいの確率

165 :NAME IS NULL:2007/06/01(金) 06:30:54 ID:???
でも業務だと、常にホームランが求められるけどな。
バッティングしたから、おまいの口座データ壊れたじゃシャレに成らん。

メモリ増やせるくらいなら、mysqlじゃなくてオラクル使ってる余裕あると思うよ。
金無いから、mysqlってのはよくあるパターン。

166 :NAME IS NULL:2007/06/01(金) 10:46:49 ID:???
>>162
固定長を吐き出すダイジェスト関数でバッティングしないのを作れたら
大金持ちになれそうだ。

167 :NAME IS NULL:2007/06/01(金) 11:08:08 ID:/eOI7xda
syaryoテーブル
 syaryo,tantosya,seibisya
tantoテーブル
 tantoID,name

tantosya seibisya はいづれも tantoID を見てnameを出させたいです。
よろしくお願いいたします。

168 :167:2007/06/01(金) 11:10:31 ID:/eOI7xda
結果を
syaryo | name | name  ←整備者名
       ↑
     担当者名
です。よろしくお願いいたします。

169 :NAME IS NULL:2007/06/01(金) 11:40:57 ID:???
MySQLのみで、フィールド中の「AAA」という文字列のみを削除する…ってことはできるのでしょうか?

170 :NAME IS NULL:2007/06/01(金) 12:38:24 ID:???
>>169
MySQLの文字列関数使えば余裕で出来るよ

171 :NAME 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;


172 :167: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

でいけました。
ありがとうございました。

173 :169:2007/06/01(金) 17:32:56 ID:???
>>170
ありがとうございます。
今までPerlとかスクリプト側で処理していたので、MySQLの関数は活用してませんでした。
REPLACEでできそうです(まんまの関数だった…)。

174 :NAME IS NULL:2007/06/02(土) 01:46:08 ID:???
phpのセッションも指定しないかぎりmd5じゃん。
そんな不確かなものの上にセッションは成り立っていたのか・・・

175 :NAME IS NULL:2007/06/02(土) 15:46:23 ID:???
>>174
PHPのセッションはカゲロウ山のようなものです

176 :NAME 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
も帰ってこなくなります。

ネットで調べても類例が全くなかったのですが、
どなたか原因に心当たりがありませんでしょうか。

177 :NAME IS NULL:2007/06/03(日) 00:42:13 ID:???
mysqladmin pingすら帰ってこない悪寒。

178 :NAME IS NULL:2007/06/04(月) 09:38:07 ID:???
rpmで入れたのなら/etc/rc.d/init.d/ のスクリプトで起動・終了した方がいいんでない?

179 :NAME IS NULL:2007/06/04(月) 15:12:08 ID:???
質問です。
レセプションの設定をし、slave startをしているのですが、どうもmasterの方で弾いてるらしく、
ちょっと詰まっています。
一応、レセプションの設定は間違いないと思うのですが、何か引っかかるところなんぞあるんでし
ょうか?
一応、/etc/serviceでポート開放し、ファイヤーウォールの設定でもポート開放をしています。
エラーメッセージは、
Slave I/O thread: error connecting to master 'repl@XXX.XXX.XXX.XXX: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の方の問題だと思うのですが。

180 :NAME IS NULL:2007/06/04(月) 15:19:14 ID:???
レプリケーションだった orz

181 :NAME IS NULL:2007/06/04(月) 16:37:50 ID:???
>>179
スレーブ側のmysqlクライアントでユーザreplを指定して
マスタ側のMySQLサーバにログイン出来てる?

182 :NAME IS NULL:2007/06/04(月) 16:52:26 ID:???
RESありがとうございます。
まだやってませんでした。
GRANTで一度リモートログインの設定をした方が良いですよね?
今の権限はレプリケーションのみなので。

183 :NAME IS NULL:2007/06/04(月) 18:03:45 ID:???
自己解決しました。
結局、GRANTで管理者権限を渡し、コネクト出来るようになりました。
ただ、これだとLocal上で使うものとは言え、ちょっとザルっぽいので、GRANTで権限をある程度
絞ろうかと思います。

ではでは

184 :NAME IS NULL:2007/06/05(火) 03:48:22 ID:???
INSERT時にある値があればそれを、無ければauto_incrementされたNoと
同じ値を入れたいカラムがあるんですが、INSERTと同時にauto_incrementされた数値を指定するような定数等ってあるのでしょうか?
今のところ、INSERTした後にUPDATEして書き換えています。
col1|col2
1|値 又は 1

185 :NAME IS NULL:2007/06/05(火) 13:03:24 ID:???
>>184
> 次の AUTO_INCREMENT 値は、オートキーに使用された最高値に 1 を加えた値になる。
とい特性を信じてサブクエリで更新することは出来そうだが、サブクエリを使うぐらい
なら、updateした方が良いかも。

186 :NAME IS NULL:2007/06/05(火) 13:22:11 ID:???
>>184
LAST_INSERT_ID()

187 :NAME IS NULL:2007/06/05(火) 16:20:12 ID:???
>>186
よく嫁

188 :NAME IS NULL:2007/06/05(火) 22:03:14 ID:???
>>184
たぶんテーブル構造を見直した方がいいと思われるけど、
いまのままならアップデートしかないんでないの。

189 :184:2007/06/06(水) 12:04:56 ID:???
有難う御座います。
やり方を変えれば、SELECTする際にIFでNoかこのカラムを取ってくるようにする事は出来るのですが
基本的に更新は殆ど無く、参照が大量のためこのような感じにしました。
今のUPDATEで進めて見ます。

190 :NAME 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とナンバリングしたいです。


191 :NAME 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;

192 :191:2007/06/06(水) 15:49:09 ID:???
あ、where句で抜き出すならもう少しだけ工夫が要るか

193 :NAME IS NULL:2007/06/06(水) 17:09:49 ID:???
MySQL Custerの事で聞きたいんですが、基本的にClusterの利点は負荷分散とリカバリー時の即効性
と言うことでしょうか?
例えば、DB自体の容量肥大化に関する利点というものはClusterではまかなえないのでしょうか?

194 :190:2007/06/06(水) 20:25:01 ID:IsGwhVyT
>191
ありがとございます。


195 :NAME IS NULL:2007/06/06(水) 21:58:45 ID:???
>>193
メモリが……

196 :NAME IS NULL:2007/06/07(木) 01:53:25 ID:???
64bitにすれば理論値は十分でしょ。
あとはメモリ積めるハードを選べばおk。

197 :NAME 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」パスワードはコマンドラインに最初に入力するパスワードを入れています。
根本から間違えているのでしょうか?


198 :NAME IS NULL:2007/06/08(金) 11:14:09 ID:???
>>197
grant って知ってる?

199 :NAME IS NULL:2007/06/08(金) 14:07:27 ID:BCjwMJBL
こんにちは。おそらく度素人の質問だと思うのですがお許しください。
検索してもどこにも見当たらないので・・・・・
フィールドにつくフラグでnotnullはnullを許さない。autoincは自動で数字を増やしてく、ってことはわかったのですが、それ以外のunsignedとzerofillの意味がわかりません。ご教授いただけないでしょうか?

200 :NAME IS NULL:2007/06/08(金) 15:14:55 ID:???
符号を保存せずに値の範囲を変えたり隙間をゼロで埋めたりっつー話じゃないの?

201 :NAME IS NULL:2007/06/08(金) 15:25:45 ID:BCjwMJBL
>>200
すみません、それの意味することを教えていただけないでしょうか

202 :NAME IS NULL:2007/06/08(金) 15:32:11 ID:???
>>201
unsignedは符号ビットが必要なくなり、数値に1ビット多く使える。
ビット表現の勉強の必要がありますね。

203 :NAME IS NULL:2007/06/08(金) 23:05:19 ID:BCjwMJBL
>>202
signedにすると-まで使えちゃうってことですかね?


204 :NAME IS NULL:2007/06/08(金) 23:06:43 ID:BCjwMJBL
わかりました^^
ゼロでまえをうめちゃうって事ですね!!!
すっきり!!!!
ありがとうございました!!!!

205 :NAME IS NULL:2007/06/09(土) 15:19:20 ID:???
null値を置き換えたいのですが、どのようにすれば出来るでしょうか?
データベースの中身はnullのままでいいのですが、
出力するときに別のものに置き換えたいのです。例えばハイフンなどに。
どなたかご教授お願いします。

206 :NAME IS NULL:2007/06/09(土) 15:42:04 ID:cEEGpgqw
>>205
ifnullやisnull関数使え

207 :NAME IS NULL:2007/06/09(土) 18:21:21 ID:???
>>205
ifnull, isnull, coalesce たんまり判定法はある。

そんなことより、興味があるのは、こういう人の行動パターン。
googleで「mysql null」で検索結果。
検索1件目から、ページ検索(ctrl-F)で「null」を実施。
5件目でズバリが出てきた。
今回のこの人は、最大の努力で、4件目から先は調べなかったことになる。
とりあえず、ググッたかどうか教えておくれ。


208 :205:2007/06/09(土) 19:12:11 ID:???
>>206, 207
昨日からグーグルで検索しまくっていますが、全然わからないのです。
nullを判定するのに isnull を使うことはわかっていたのですが、
それをどうやって置き換えるのかわからなかったのです。
質問の仕方がちょっと間違っていたようでした。

select * is null = '-'
from table

こんな感じでしょうか・・・わからないので助けてください。

209 :NAME IS NULL:2007/06/09(土) 19:15:30 ID:???
>>208
SQLのお勉強をもうちょっとちゃんとやりましょう。
そのSQL、文法的に間違ってるでしょうが。

210 :205:2007/06/09(土) 19:18:44 ID:???
>>209
手元にmaysqlの本が一冊あります。
しかしどうしてもわからないのです。
勉強するにも期限は明日、仕事で必要なためどうしても解法が欲しいのです。
助けるとおもってお情けをお願いします。

211 :NAME IS NULL:2007/06/09(土) 19:25:23 ID:???
>>210
自分の仕事を他人に丸投げですか・・・
あきれて物が言えない

212 :NAME IS NULL:2007/06/09(土) 19:55:48 ID:???
select * is null = '-'

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

つーか、ifnull使えと答えを書いてくれている。
isnullより、ifnull、coalesceを使え。


213 :NAME 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」 のような形式にしたいのですが、良い方法は無いでしょうか?

教えていただけると幸いです。


214 :NAME IS NULL:2007/06/09(土) 22:14:49 ID:???
>>213
DATE_FORMAT()

215 :NAME IS NULL:2007/06/09(土) 22:20:25 ID:???
初歩的な質問で申し訳ありません。

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

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

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

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

でいけますが、

一番体重が重い人の氏名 (この場合 "山田") を求めたい場合には、
どういうSQL文を発行すればいいんでしょうか?

216 :NAME IS NULL:2007/06/09(土) 22:28:41 ID:???
>>215
サブクエリ

217 :213:2007/06/09(土) 22:38:10 ID:???
>>214
ありがとうございます。

SELECT DATE_FORMAT(datetime_c, '%Y/%m/%d %H:%i:%S') as datetime FROM table_t; でいけました。


218 :NAME 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...
といった結果が得られて思うような結果(掲示板のレス数)が得られません。

どのようにすればいいか教えてください。お願いします。


219 :NAME IS NULL:2007/06/10(日) 00:14:07 ID:???
>>218
ttp://pc11.2ch.net/test/read.cgi/php/1178955768/

220 :218:2007/06/10(日) 00:22:42 ID:???
>>219
ありがとう・・・そっちに逝って来ます

221 :NAME 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

みたいに書きたいのですが、エラーになってしまいます。


222 :NAME IS NULL:2007/06/10(日) 03:14:26 ID:???
>215
体重でorder byして1件目とかどう?

223 :NAME 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ですらない。
本での勉強や掲示板への質問も良いけど、自分でコマンド打たんと。


224 :221:2007/06/10(日) 15:27:27 ID:???
>>223
回答ありがとうございます。
実際に使う時には、hoge_t の 5〜6個からデータを抜き出したいので、
"FROM hoge_t" の部分が必要だったんです。

もうちょっと色々試して勉強してみます。
ありがとうございました。

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

select coalesce(*, 0)
from table;

*が、ひとつの列ならうまくいくのですが、すべてを対象とした*だとエラーになります。
どうやればうまくいくのでしょうか?

226 :NAME IS NULL:2007/06/10(日) 19:18:22 ID:???
MySql初めていじったんだが
insert文で複数レコード挿入できんのかよ?
気持ちわるい・・
insert into table values(), (), ()・・・

227 :NAME IS NULL:2007/06/10(日) 19:18:56 ID:???
>>225
都合よく考えないで、coalesceとは何か?というのを調べて。
調べてMySQLの仕組みに沿ったSQLを作ってください。



228 :NAME IS NULL:2007/06/10(日) 19:27:25 ID:???
なぜここの連中は解法をひとつ教えれば済むことに
一々難癖をつけて答えないのか?
一度答えを教えてくれさえすればすぐに質問者は消えるし、みんなにとって有意義であることは間違いない。
文句だけ言って何も答えない輩は立ち去って欲しい。

229 :NAME IS NULL:2007/06/10(日) 19:27:55 ID:???
>>226
気持ちよくなる前に抜けた方がよい。
漏れは既に抜け出せん。
insert & selectを union allして繋げるなんて嫌だ。


230 :NAME IS NULL:2007/06/10(日) 19:37:13 ID:???
>>226
バルクインサート、サポートされてなかった?

231 :NAME IS NULL:2007/06/10(日) 20:01:24 ID:???
>>228
なんで人の仕事の解法を手取り足取り丁寧に教えてやらなきゃならないんだ。
上のレスをちゃんと見返せば解法のヒントが書いてあるというのに。
それを読もうともせずに、「とっとと答えだけ教えろよ」的な
ことを無遠慮に言う奴こそ立ち去って欲しい。


232 :NAME IS NULL:2007/06/10(日) 20:17:05 ID:???
結局、辞書代わりなのさ。俺らは。訊かれたら答えてりゃ良いんだよ。
どうせ、質問に答えて虚栄心を満たしたいだけなんだろう。
神!とか言われたいんだろう。俺らは。      
Oracleは知らないんだろ?
ちゃいまっせ。
せっせ。


233 :NAME IS NULL:2007/06/11(月) 00:08:11 ID:???
>>228
教えてるジャン。親切に。 つーか、質問するときは
あらかじめ自分で答えを考えておいて YesかNoで
答えられるようにするか、 ヒントだけもらえるように
工夫するか のどっちかなんだよ。

234 :NAME IS NULL:2007/06/11(月) 00:39:44 ID:???
答えがわかっていればそのままズバリ言えば済む問題
わかっていても言わないのは色々なものが小さい
1.人間的に小さい
2.器量が小さい
3.声が小さい
4.ティムポが小さい
5.視野も小さい
ほかなんかある?


235 :NAME IS NULL:2007/06/11(月) 02:47:20 ID:???
>>234
簡単に答えだけを教えてあげるような人は
相手を思いやる心、成長を願う心 が小さいかな。
ちょっとしたきっかけを与えるに留めるのが
人間的に一番大きい人

236 :NAME IS NULL:2007/06/11(月) 02:48:56 ID:???
googleで最初の数ページに答が出てくるような
それでいて それだけでは決して全ての解答にはならない
そんなレスが一番もらって嬉しいし楽しい

237 :NAME IS NULL:2007/06/11(月) 03:43:43 ID:???
俺の場合、その日の気分で

ヒントを教える時とぐぐれかすを使い分けてる。

238 :NAME IS NULL:2007/06/11(月) 03:56:40 ID:???
俺の場合、聞かれてもないのに教えまくる

239 :NAME IS NULL:2007/06/11(月) 05:22:08 ID:???
小銭をくれよ、という見知らぬ人に会った気分。
で、断ったら捨て台詞を言われたときの気分。>>234


240 :NAME IS NULL:2007/06/11(月) 06:11:39 ID:???
>>239 わかる気がする。

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

きっと>>234は街中で寄付しまくりなんだろうな。

241 :NAME IS NULL:2007/06/11(月) 06:55:07 ID:???
盛り上がってる、
と思ったら、これかい。

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



243 :NAME IS NULL:2007/06/11(月) 09:04:38 ID:???
>>242
おっさんの最初の台詞はいらないよ。

244 :NAME IS NULL:2007/06/11(月) 09:53:19 ID:???
そのおっさんが、この後オヤジ狩りに合おうとは!

245 :NAME IS NULL:2007/06/11(月) 10:27:52 ID:???
>>244
そのおっさんが空手の有段者だったとは!・・・・ってつまらん。

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



246 :NAME IS NULL:2007/06/11(月) 14:54:51 ID:???
>>245
んなもんいくらでもあるだろ

247 :NAME IS NULL:2007/06/11(月) 18:35:01 ID:???
>>225
coalesceでnullになり得るカラムを1つずつ設定するのが正解だが、coalesceは
スペルが難しいし(関係ない)カラムの初期値を設定して既存のnullを更新しちゃうとか、
caseを使うとかはどうか?


248 :NAME 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


249 :248:2007/06/11(月) 19:36:00 ID:???
ひとまず代替案できりぬけました。
key=

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

なぜだかわかりませんが、hibernateを使っているのでどうにもならないんでSQLで実行するようにしました。
ありがとうございました。

250 :NAME IS NULL:2007/06/11(月) 23:55:25 ID:???
単に key を `key` と書けば良くね?

251 :NAME IS NULL:2007/06/11(月) 23:56:47 ID:???
>>250
俺も思った
単にkeyが予約語なだけじゃないのかね?

252 :NAME IS NULL:2007/06/12(火) 21:20:58 ID:gRZ6KvS4
質問スレが見当たらないので、こちらに書かせて頂きます。
間違えて、テーブルをdropしてしまったのですが、
ib_logfile0、ib_logfile1、ibdata1等から、
テーブルを復旧する方法があれば、ご教授頂けないでしょうか?
宜しくお願いします。

253 :NAME 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操作ができるのですが、
サーバマシンでは何故か上記のエラーが出てしまいます。
どなたか回避策をご存知ではないでしょうか?

254 :NAME 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
/ /   /     /\  \   /  〈 \/ ̄   _/

255 :NAME IS NULL:2007/06/13(水) 06:46:02 ID:???
>>252
mysqlbinlog

256 :252:2007/06/13(水) 09:22:32 ID:???
>>255
ありがとうございます。
「〜-bin.xxxxx」と言う形のバイナリログは作っておらず、
mysqlbinlogでは不可能でした…

257 :NAME IS NULL:2007/06/13(水) 11:26:41 ID:???
>>252
データディレクトリにあった "テーブル名.*" を削除ファイルを復活させるソフト
とかで救い出すしかないな。
削除後、ファイルに書き込みが続くと削除領域が食いつぶされて復活できない
ケースが多いが。

258 :NAME IS NULL:2007/06/13(水) 11:30:02 ID:???
>>253
iptablesかな・・

259 :257:2007/06/13(水) 12:08:26 ID:???
>>257
ありがとうございます。
復元ソフトの体験版を使用して試してみようと思います。

260 :252:2007/06/13(水) 12:16:21 ID:???
すみません、名前間違いました。
252です。

261 :252:2007/06/13(水) 13:08:25 ID:???
試しに、InnoDBでテーブルを作成、
テーブル名.frmをコピーし、テーブルをdrop、
その後コピーしたfrmファイルを戻し、
select文を実行したところ、
ibdファイルが開けないと言われました。
frmのコピーを行った際には、
ibdファイルは存在しなかったのですが…

どうすれば正常に元に戻るのでしょうか?

262 :NAME IS NULL:2007/06/13(水) 15:44:49 ID:???
>>261
そりゃ、innodb_file_per_tableがOFFになってるから。

263 :NAME IS NULL:2007/06/13(水) 16:10:51 ID:???
>>261
つか、frmとibdだけじゃ、むりだろ。大元のibdataのバックアップ戻しが必要。


264 :248:2007/06/13(水) 16:33:31 ID:???
>>250>>251
確かにその通りでした。

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

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

265 :NAME IS NULL:2007/06/13(水) 19:45:17 ID:???
select `hoge` FROM `hoge_tbl`;

この時、`hoge`の値が 「あ」 じゃないときは 「ほげ」を返して欲しいのですがどのようにすればいいでしょうか?

266 :NAME IS NULL:2007/06/13(水) 20:04:41 ID:???
>>265
select `hoge` FROM `hoge_tbl` where ○○○○;
○○○○のところは自分で考えてね。

267 :NAME 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 をするぐらいしか思いつきませんので、
えらい人おしえてください。


268 :253:2007/06/14(木) 01:06:47 ID:???
FW関係を見ても問題無さそうだったので、Connectorのバージョンを上げさせてもらいました。
Connector/J 3.0.17にしたら問題無く接続できました。
同環境別PCだと駄目な理由が分かりませんが、とりあえず回避できたのでこれで良しとします。
スレ汚し申し訳ありませんでした。

269 :NAME IS NULL:2007/06/14(木) 05:36:53 ID:???
>>267
>2次元のテーブルを素早く得たいと

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

つー並びで表示したいってこと?
手法によってはバージョン縛りあり。

270 :NAME IS NULL:2007/06/14(木) 07:40:22 ID:???
>>265
select if(hoge='あ',hoge,'ほげ') from hoge_tbl;


271 :NAME 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 を使っていますが、
もっと新しい物に良い手法があるなら、変えても良いです。


272 :NAME IS NULL:2007/06/14(木) 09:01:29 ID:???
>>271
nullありなら、言う通りで結合しなきゃむり。
無いものはselectできない。

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

>歯抜けの部分は null でも 0 でも良いです。
なら、自分でデータを補完する仕組みを作る。
もしくは呼び出しアプリ側で補完。

273 :NAME IS NULL:2007/06/14(木) 12:02:11 ID:???
>>272
かなり希望に近いです。
なんとか歯抜けを処理できないかな。

昨日5.1の英語マニュアルを読んでいたら、
5.1の日本語マニュアルがまだ完全ではないものの公開されていました。
これまで 4.1 しか日本語になってなかったので、これはうれしいですね。

274 :NAME 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;
こんなかんじでデータを取得した後、クライアントで分解すれば、なんとかなりますね。
ありがとうございました。

275 :NAME IS NULL:2007/06/14(木) 13:22:24 ID:???
>>274
一応解決っぽいんですけど、GROUP_CONCAT でなく、
create table <name> as select 〜〜〜
って形で2次元tableを作る方法があれば、引き続きお願いします。

276 :NAME IS NULL:2007/06/14(木) 14:02:58 ID:???
で、2次元テーブルにしないといけないわけ?
どうせアプリで取り込んでから、その様な処理や
表示するわけでしょ?
別に1次元縦並びで、idでソートしてすりゃいいじゃん。

277 :NAME IS NULL:2007/06/14(木) 14:12:35 ID:SdR9kA2a
>>276
もちろんそれでもいいのですが、SQL内で view を定義できたりすると、
より便利なので、できるとうれしいです。
そういう技があれば知っておきたいですし。

もちろん、group_concat でも表示などには困らないし、とても感謝しています。


278 :NAME 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は入れ物なんだから、出し入れが速ければよいと思う。


279 :NAME IS NULL:2007/06/14(木) 14:28:07 ID:???
>>278
>でもさ
他の人が指摘してたね。
知識と実践は異なるから、理解できる。
スマソ。


280 :269:2007/06/14(木) 15:51:57 ID:???
>>278
はい、今の実装では必要はないのですが、
こういう要求は結構多いので、なにか定石的な技があれば知りたいな、とおもったわけです。
あと、何度が sageるの忘れてました。すみません。


281 :NAME IS NULL:2007/06/14(木) 22:11:08 ID:???
>>280
アプリ側で対応が定石じゃね?


282 :NAME IS NULL:2007/06/15(金) 06:42:28 ID:???
答えだけ求める香具師は有料サポートでも使えばいいじゃん。
無料で訊いてるくせに、答える内容の文句言うな。

283 :NAME IS NULL:2007/06/15(金) 10:10:13 ID:???
>>280
技とかそんなのからいきなり入ったって…。

これはそもそもが、そんな表を念頭に置いてないテーブルを
無理矢理そうした所で、スピードも遅いし技術的に意味もない。
やりたいのであれば、テーブル設計から全て変更して、
SQL時点で負荷をかけない様にするべき。

284 :NAME IS NULL:2007/06/15(金) 11:35:31 ID:???
結構上司が帳票を出せ、とか言ってくるんじゃないの?
不得手な人はデータベース≒エクセルのセルみたく考えているから、こういう要求も実は多い。
そういう職場に居る不幸な人をあんまり責めるんぢゃないよw
特に280は、マニュアルも読んでいるみたいだし、頭空っぽ宿題おせーて君とは違うっぽ。


285 :NAME IS NULL:2007/06/16(土) 00:21:10 ID:???
むしろ、そういう要求をうまく処理するのがDBで飯食ってるプロの腕の見せ所だと思うが。
出来ませんって言うだけなら、素人でも出来るよ。

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

mysqlはオープンソースだから、力技でソースに機能追加も出来る訳だし。

286 :NAME IS NULL:2007/06/16(土) 02:05:04 ID:???
API側で最適化するような奴にDB屋さんを自称して欲くないね。

287 :NAME IS NULL:2007/06/16(土) 07:50:14 ID:???
俺は272,278,279のヒドイSQLを書いた者ですけど。
285,286なら、今回の271,275の疑問をどのようなSQLを書いて解消しますか?



288 :NAME IS NULL:2007/06/16(土) 10:26:04 ID:???
見せてもらおうか、プロな腕の表作りとやらを

289 :NAME IS NULL:2007/06/16(土) 11:18:58 ID:???
APIというより、mysqld内部な。ヲレSQLにして組み込んでもいい訳だし。
create2dとかつくればよろし。

290 :NAME IS NULL:2007/06/16(土) 11:28:56 ID:???
で、「API側で最適化するような奴」って何?

291 :NAME IS NULL:2007/06/17(日) 11:25:00 ID:7X42UV05
いろいろとググってみたのですが、見つからなかったので質問します。

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

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

SELECT * FROM テーブル名 WHERE email = 'test@test.com'

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

基本的なことなのかも知れませんが、「@」や「アットマーク」で検索しても、求める情報にめぐり合えませんでした。orz
よろしくお願いします。


292 :NAME IS NULL:2007/06/17(日) 11:38:48 ID:???
>>291
当方普通に結果を選択できますが
WindowsXP + MySQL5.0.37

select * from テーブル名
を行った結果、本当にemailフィールドに文字列 「test@test.com」が入ってる?

293 :NAME 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;

です。

使用するサーバで試したところ、無事に抽出できましたので、とりあえずは解決というか、何と言うか。


294 :NAME IS NULL:2007/06/17(日) 16:33:04 ID:???
phpmyadminでrootユーザーでのログインを禁止したいのですが
そのような設定は可能でしょうか?

295 :NAME IS NULL:2007/06/17(日) 18:05:16 ID:???
>>294
君の質問文よか、検索ワードの方が短い。
「phpmyadmin rootユーザー ログイン 禁止」
さあ、ググレ。

296 :NAME IS NULL:2007/06/17(日) 18:29:57 ID:???
mysqlヴァージョン5でストアードプロシージャ一覧を見る方法
を教えてください

297 :NAME IS NULL:2007/06/17(日) 18:47:24 ID:???
>>296
そういうのはmysqlデータベースの表に格納されている。
select type,name from mysql.proc;


298 :NAME IS NULL:2007/06/17(日) 19:01:53 ID:???
ありがとうごさいます↑

299 :NAME IS NULL:2007/06/17(日) 23:05:02 ID:???
>>298
SHOW PROCEDURE STATUS;
SHOW FUNCTION STATUS;
こちらの方が一般的らしい。


300 :NAME IS NULL:2007/06/18(月) 23:10:47 ID:???
>>287
私の何気ない書き込みが波紋を広げてしまいました。 m(_ _)m
2chらしい精神論もいいのですが、私も具体的なテクニックが聞きたかったです。
(emacsスレみたいな雰囲気になるとイイですね。)

仕事でさわり始めたSQLですが、少し慣れてくるととても奥が深いですね。
プロのみなさんには当たり前のことかもしれませんが、
クエリやキーなどのちょっとした工夫で性能が劇的に上がったり、
フロントエンドの大幅な省力化が出来たりと、感動の連続です。

301 :NAME IS NULL:2007/06/19(火) 11:45:08 ID:???
>>300
で、結局どうやった?

302 :NAME IS NULL:2007/06/19(火) 16:25:09 ID:???
>>301
group_concat 作戦を使いました。
仕事の合間にいろいろ調べてますが、今のところこれ以上のTIPSは見つかりませんねー。

全然関係ないけど、MySQL 5.1 の partitioning がなかなかおもしろそう。
はやく5.1の安定リリースがでないかな。

303 :NAME 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)


304 :NAME IS NULL:2007/06/19(火) 19:42:23 ID:???
でた!テンポラリ攻撃!

305 :NAME IS NULL:2007/06/19(火) 20:03:30 ID:???
>>304
めんどくせぇな。
275の質問があって、303があるんだよ。
temporaryにしたのは、俺がdropコマンド打たなくてもすむだろ。
drop table temp_t;
ココで書いちまったじゃねぇか。


306 :NAME IS NULL:2007/06/19(火) 22:20:21 ID:???
bind-address 設定するのって常識か?

307 :302:2007/06/20(水) 00:48:36 ID:???
>>303
colの最大値を知った上でクエリを作らないといけないけど、
出力形式は理想の形です!
数十万しかデータがないので、呼び出しもそれほどかかりませんし。
次の設計の時は提案してみようかな。
( えらい同僚に怒られるかもしれないけど、そんなの平気! )


308 :NAME IS NULL:2007/06/20(水) 03:03:47 ID:???
見える、見えるぞ! 1ヶ月後、その同僚がここでそのやりかたを質問しているレスが!

309 :NAME IS NULL:2007/06/20(水) 06:47:08 ID:???
偉いのに同僚?

同僚が変な表を作って困っています。どうやって辞めさせればいいでしょうか?
負荷がかかるから辞めろと採算逝っても訊いてくれません。orz
って感じ?

310 :NAME IS NULL:2007/06/20(水) 07:07:23 ID:???
>>303
sum(if(col=0,value,0))
にすると、null じゃなく 0 で埋められますね。
なかなかイイ!

311 :NAME IS NULL:2007/06/20(水) 08:52:06 ID:???
>>310
最初の用件>>271がNULLを埋めたい、つーことだった。でnull。
俺の考えじゃないよ。


312 :NAME IS NULL:2007/06/20(水) 22:33:01 ID:???
MySQLのコマンドラインクライアントからなら問題無くUPDATEできるのですが、
TOMCAT5.5とコネクタ5を使ってUPDATEしようとしてもUPDATEされません。
SELECTは出来ているのですが、、、
何か設定とか必要でしょうか?

313 :312:2007/06/20(水) 22:35:34 ID:???
すいません、解決しましたorz
誰かがcontext.xmlにdefaultAutoCommitをfalseにしてました。。。
スレ汚し失礼しました。

314 :NAME IS NULL:2007/06/21(木) 12:00:03 ID:???
使わなくなったカラムは削除するべきですか?
それとも使わなくなったものは削除フラグだけたてとくべきですか?
データ削除した時に番号に穴があくのが気になります。

315 :NAME IS NULL:2007/06/21(木) 12:23:34 ID:???
復元する必要が無ければ削除

316 :NAME IS NULL:2007/06/21(木) 13:45:01 ID:???
>>314
質問1: カラムとロウ、列と行を言い(書き)間違えてない?
質問2: 番号に穴があくとなんか不都合でもあるの?


317 :NAME IS NULL:2007/06/21(木) 13:58:28 ID:/r3UPCk3
レプリケーションに関して質問です。

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

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

データ量が多いので、hotcopyやmysqldumpは使えないです。

318 :NAME IS NULL:2007/06/21(木) 15:11:54 ID:???
>>317
reset slave

319 :NAME IS NULL:2007/06/21(木) 16:06:15 ID:???
reset slaveだと全体のリカバリになってしまいますよね。
他にやるとしたらやはりbinlogから手動復旧しかないのでしょうか。


320 :NAME IS NULL:2007/06/21(木) 16:34:50 ID:???
>>317
3の後、スレーブ側でのリストアを行わないのは何故でしょうか?

ちなみにバージョンと下記パラメータ設定値を教えてください。
innodb_support_xa
sync_binlog
innodb_safe_binlog


321 :NAME 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が思いつかず悩んでいます。

皆さんならどうされますか?

322 :NAME IS NULL:2007/06/21(木) 17:17:25 ID:???
>>321
条件数分のサブクエリでも連鎖させときなさい

323 :NAME IS NULL:2007/06/21(木) 17:30:46 ID:???
ヒット数と入力キーワードの総数を比較するとかどうかしら?

324 :NAME IS NULL:2007/06/21(木) 17:45:44 ID:yai2bY76
>>322
絞り込んで、絞り込んで、という感じですね。
参考になります。

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


さっそく試してみます。ありがとうございました。

325 :317:2007/06/21(木) 18:09:59 ID:???
>320
すいません抜けてましたが、3の後にスレーブで「テーブルがないよ」的な
エラーがでるので、skip_counter+1してます。

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

やりたいことは、1テーブルのみデータ更新に失敗した場合、迅速に
リストアする方法が知りたいです。(スレーブ側も同期を取りたい)


326 :NAME IS NULL:2007/06/21(木) 22:19:07 ID:???
slave側にもマスタの全データを入れて CHANGE MASTER TO から設定して
やんないと出来なくないか。


327 :NAME IS NULL:2007/06/22(金) 01:42:53 ID:???
>>325
知っているかもしれんが、http://www.mysql.gr.jp/
場末の掲示板でするような質問でないかもしれん。
由緒正しいMySQL掲示板へ行って質問しなおしたほうがよいかも。
ちゃんと名乗るんだでw


328 :NAME IS NULL:2007/06/22(金) 02:01:24 ID:???
そして何よりも 速さが足りない

329 :NAME IS NULL:2007/06/24(日) 08:57:16 ID:???
萌えすきゅーえる

330 :NAME IS NULL:2007/06/24(日) 16:05:52 ID:???
phpMyAdmin と GUI Tools両方ともインスコしてみたんだけどさ、
MyAdminの方がいいとこってなに? ブラウザで使えるってことだけ?

331 :NAME IS NULL:2007/06/24(日) 16:37:35 ID:???
GUI ToolsはWin限定じゃん。

332 :NAME IS NULL:2007/06/24(日) 18:01:45 ID:???
>>330
phpMyAdminとQueryBrowser(以下QB)の比較ってこと?

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

QBは、日本語表示に弱い。
SQLに日本語は表示することはできるけど、なんか見づらい。
経験則だけど、日本語あり(カラム名でない)のSQLを書いていると突然落ちたりする。
それは、一回や二回でない。
phpの方があまり日本語で困ったことはないかな。


333 :NAME IS NULL:2007/06/24(日) 18:52:52 ID:???
セマフォって何ですか?

334 :NAME IS NULL:2007/06/24(日) 19:08:00 ID:???
おまえのかぁちゃんセーマーフォー

335 :NAME IS NULL:2007/06/25(月) 03:43:03 ID:???
PerlかPythonかRubyか、PHP以外で書かれたphpMyAdminみたいなのありますか?

336 :NAME 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

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

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

のどちらがパフォーマンス的にいいでしょうか?
よろしくお願いいたします。

338 :NAME IS NULL:2007/06/25(月) 12:25:45 ID:+ngh1xNX
再起動の方法について教えてください。
Redhat使っているんですが。
/etc/rc.d/init.d/
にmysqlがないんです。
こういう場合はどこから再起動かけるんでしょうか?あとなぜ無いんでしょうか?
お分かりできるかたお願いいたします。

339 :NAME IS NULL:2007/06/25(月) 12:53:22 ID:+ngh1xNX
>>338
自己解決しました

340 :NAME IS NULL:2007/06/25(月) 13:36:58 ID:???
XAMPP Liteを使ってみたところ、innoDBがデフォルトでは使用できないようになっているのですが、
これにはどういう理由が考えられるのでしょうか?
また、innoDBでテーブルを作成したところ、
その後、テーブルにカラムを追加等の処理に数十秒時間がかかったりするのですが、
それはフラッシュメモリへのアクセス速度等が理由となるのでしょうか?

どなたかご存知の方教えてください。

341 :NAME IS NULL:2007/06/25(月) 14:29:38 ID:???
質問ばっかだけど。
回答うけとって、どうだったとか、
自己解決でも解決したら、自分はこう解決したみたいなやつ、書いてくれよ。
こんなスレで、回答する気にならんよな。


342 :NAME IS NULL:2007/06/25(月) 15:47:04 ID:DgJUlJQr
MySQL、4.1以降日本語の自動変換処理による文字化け問題あり、それを日本国内向け
にソース手入れしたMoSQL(萌えSQLと呼ぶ)を発表、ダウンロード開始。

http://MoSQL.jp/



343 :NAME IS NULL:2007/06/25(月) 16:36:28 ID:???
>>335
MySQL GUI管理ツール でググレ。

344 :NAME IS NULL:2007/06/25(月) 16:38:36 ID:???
>>336
F/Wかも iptablesを止めてみたら。

345 :NAME IS NULL:2007/06/25(月) 16:53:21 ID:???
MoSQL スレまだー?

346 :NAME IS NULL:2007/06/25(月) 22:47:37 ID:???
>>336
DNSかも。mysqld に --skip-name-resolve つけてみては?

347 :336:2007/06/25(月) 22:57:58 ID:???
>>346
ビンゴでした。
IPアドレス直で接続してるのに/(^o^)\

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

>>344さんもありがとうございました。

348 :NAME IS NULL:2007/06/25(月) 23:23:06 ID:???
>>347
        ___
      / ̄   /\
    /     - /,-  |
   |( (■) ll (◎ )
   (6 、_,/  , ヽ  |
   | /ヽ(__(_ノ)、ノ  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
    |,  ( 'ー─一ノ|< 逆引きしたんだよ  ホスト名を・・・
     \λ_ ⌒ ,ノ    \______________

349 :NAME 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

350 :NAME 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;

351 :NAME IS NULL:2007/06/26(火) 16:41:07 ID:???
サブクエリを使えば可能です。

352 :NAME IS NULL:2007/06/26(火) 20:16:16 ID:???
> `number`はユーザー毎のユニーク数字のためauto_incrementにはできません。
?どうして auto_increment を使えないの?


353 :NAME IS NULL:2007/06/26(火) 21:14:47 ID:???
>>350
`auto_seq`と`number`の違いが激しく謎。


354 :NAME IS NULL:2007/06/26(火) 21:17:15 ID:???
>>352
そうだよな。auto_increment使えばいいじゃん。
unique indexでも問題ないよ。
なんか問題があるなら、おせーて。

355 :NAME IS NULL:2007/06/26(火) 22:12:53 ID:???
エスパーするとuser_seq毎にnumberを振りたいんジャマイカ?
つかuser_seqをPRIMARYにできるんじゃね?

356 :NAME IS NULL:2007/06/26(火) 22:39:04 ID:???
萌えSQL(苦笑)
http://news23.2ch.net/test/read.cgi/news/1182860193/l50

357 :NAME IS NULL:2007/06/27(水) 09:40:27 ID:???
すみません、質問です
mixiみたいな会員数不特定のブログサービスがあったとして、
ああいうサービスの日記のログ管理DBってどうなってるんですか
トラックバックのないコメント機能だけの日記だと、
全会員のログを一つのnikkiTABLEで管理してるんでしょうか?

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

書いてみてこれじゃ返信機能つき掲示板と変わらないって思いましたが、
自分にはこれくらいしか思いつきません(初心者です)
他にどんな機能がいりますか? それとも、全ユーザの日記を同じテーブルで
管理なんてしないんでしょうか? 上のはありえない馬鹿仕様ですか?


358 :NAME IS NULL:2007/06/27(水) 13:01:48 ID:???
>>357
ネットに腐るほど情報あるが今回だけはバグとったばかりで気分が良いので教えてあげよう。
ttp://itpro.nikkeibp.co.jp/article/NEWS/20060330/233820/


359 :NAME IS NULL:2007/06/27(水) 14:31:05 ID:???
うまく探せばMySQLのユーザー会かなにかの発表で使ったぱわぽんのデータもあるよ。
結構な事をやってるから、357の段階で引っかかってるならやらない方がいいと思う。

360 :NAME IS NULL:2007/06/27(水) 19:16:04 ID:???
他のサーバーに移管したいので、
DB内のデータをSQL文でとりたいのですがどうすればいいでしょうか?

ほかに簡単に移管する手がありましたら教えてください。
自鯖から専用鯖への移管です

361 :350:2007/06/27(水) 19:20:20 ID:???
`user_seq`ごとに
`number`が存在するからプライマリにはできません(多分)
`user_seq`=1の人の`number`が1,2,3,4,5
見たいな感じです。

引き続きお願いします

362 :360:2007/06/27(水) 19:27:50 ID:???
訂正します。
自鯖からxreaへの移管です。

363 :NAME IS NULL:2007/06/27(水) 19:35:15 ID:???
>>360
大型ダンプでいいんじゃね?

364 :360: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=

365 :NAME IS NULL:2007/06/27(水) 20:49:52 ID:???
>>363-364
ワロタ

366 :NAME IS NULL:2007/06/27(水) 20:53:41 ID:???
>>360
大型ダンプじゃなくても双方近しいバージョンならDBファイルをまんまコピー
でも大丈夫。(まれにバージョンによっていけない場合もある)

367 :NAME IS NULL:2007/06/27(水) 20:57:01 ID:???
>>350
良くわからんが 351が答えてる。

368 :NAME IS NULL:2007/06/27(水) 22:14:07 ID:???
>>361
多分とか、言っててビビるんだが。
質問者がわからんテーブル構成を漏れが判断できるわきゃねーだが。
複合インデックスにすりゃーいいだが。
その前にサブクエリーを使えって誰か言っているわけだが、なぜ黙殺するのか、答えろ。


369 :360:2007/06/28(木) 12:10:20 ID:???
>>363さん
364はアンカーミスです。
すみません。
>>366さん
XREA(共有サーバ)なのでDBファイルの置き場所にアクセスできません。
mysqldumpでSQL文として吐き出してもらうのが、一番手っ取り早いとは思うのですが
マニュアル見てもどこに書いてあるのか分かりません。(mysqldumpの項)

くれくれですみませんが、詳しく解説しているサイトなどありましたら教えていただけませんでしょうか?

370 :NAME IS NULL:2007/06/28(木) 13:01:51 ID:???
>>369
どこ見てんだか…
[Mysql ダンプ]でググれば一発


371 :NAME IS NULL:2007/06/28(木) 13:16:27 ID:???
>>369
mysqldump でググレばトップじゃねーの。これは久々に偉人が出るな。

372 :360: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


373 :NAME IS NULL:2007/06/28(木) 14:58:17 ID:???
今後の展開に期待

374 :NAME IS NULL:2007/06/28(木) 15:11:58 ID:???
>>372
自分で「コマンド」って書いてるのになんでSQLクエリとして実行するかね。

375 :NAME IS NULL:2007/06/28(木) 16:06:47 ID:???
笑った。

376 :NAME IS NULL:2007/06/28(木) 16:25:01 ID:???
>>372
mysql内でなくて、コマンドプロンプト等で以下コマンド発行でつ。

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

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

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


>>373-374
中学生がホームレス襲撃して遊んでいる構図と一緒でつ。
傍目からみていると醜いでつ。

377 :NAME IS NULL:2007/06/28(木) 17:54:35 ID:???
>>358-359
ありがとうございました!
テーブル分割という概念を知らなかったので勉強になりました

378 :NAME IS NULL:2007/06/28(木) 18:19:17 ID:???
>>376
コマンドをクエリとして打っちゃうような人に対して
その説明で足りると思ってるの?
所詮自己満足、>>374と50歩百歩だよ

379 :NAME 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文を書きたいのですが
エラーが無ければの部分が分りません
教えてください

380 :NAME IS NULL:2007/06/28(木) 22:59:53 ID:???
>>379
アプリ側でやれ

381 :NAME IS NULL:2007/06/28(木) 23:03:36 ID:???
>>380
アプリは無いのでsql側でお願いします

382 :NAME IS NULL:2007/06/28(木) 23:24:02 ID:???
どんなときエラーになるのさ?


383 :NAME 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;

384 :NAME 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」があるから、ロールバックされとるやろ?


385 :360:2007/06/29(金) 11:44:33 ID:???
>>376さん
ありがとうございます!
無事SQL文として取り出せました。
ご親切にありがとうございます。

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

こちらは376さんのアドバイスを参考に自力でやってみます。

386 :NAME IS NULL:2007/06/29(金) 12:43:51 ID:???
>>384
やりたかったのはそのサイトに書いてあるやつです。


start transaction;
うまく通りinsert文1;
うまく通りinsert文2;
うまく通らないinsert文3;
commit;
としてもロールバックされなかったのでそのサイトのように
できたらいいかなと
versionはmysql5です

387 :NAME IS NULL:2007/06/29(金) 12:51:51 ID:???
start transaction;
うまく通りinsert文1;
うまく通りinsert文2;
うまく通らないinsert文3;
rollback;  <<明示的にロールバックするとロールバックされます。

388 :NAME 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らしいのでストプロも研究してみてくだつぁい。


389 :NAME IS NULL:2007/06/29(金) 14:24:05 ID:???
入っている文字(日本語)が奇妙な形で文字化けします。
以下のような感じなのですが、どなたか同じ経験ありますでしょうか?

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

こんな感じなのですが、もし何かご存知の方、宜しくお願いします。
私も引き続き調べてみますが私の知識レベルではなかなか原因の究明が出来ません。。

390 :NAME 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

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

基本的にサーバとクライアントのキャラクターセット不一致が原因ですから、
その辺りから調査されてはいかがでしょうか。


391 :NAME IS NULL:2007/06/29(金) 14:57:58 ID:???
>>390
あと、
insert時のキャラクターセット
phpスクリプトによるinsert文発行なら、phpスクリプト・ファイル自体のキャラクターセット。
コマンドプロンプトなら、set namesもしくは、charcter_set_client。



392 :389: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にしてみます

393 :NAME 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のサーバに?

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



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


395 :389:2007/06/29(金) 16:48:28 ID:???
>>393
何度もご解答いただきましてありがとうございます。

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

度々の質問で申し訳ないのですが、
既にデータが入っているんですがcharcter_setを変えちゃって大丈夫でしょうか?

396 :NAME 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)


397 :NAME 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

398 :NAME IS NULL:2007/06/29(金) 18:22:17 ID:???
>>388
なるほどクエリでやってました。
コマンドからバッチを流すと出来ました。

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

ストアドプロシージャはストアドプロシージャを
呼び出せないためリンク先の方法は難しいようなきがします

399 :NAME IS NULL:2007/06/29(金) 19:14:44 ID:???
>>398
そのストプロからストプロを呼び出す云々は聞いていない用件だし、
詳細不明なので割愛させてもらいます。
俺はふつーにやってるけどな。
バッチもストプロもダメなら、ない。


400 :400:2007/06/30(土) 05:19:00 ID:???
400get

401 :NAME IS NULL:2007/06/30(土) 16:11:31 ID:???
MySQL 3.23なのですが、レコードの複製で効率的なものはないのでしょうか?
同じテーブルでのINSERT ... SELECTは、このバージョンでは無理とのこと。

一度SELECTしたものをINSERT ... VALUEするしかありませんでしょうか?

402 :NAME IS NULL:2007/07/01(日) 01:05:45 ID:???
>>401
temporaryテーブルを介すればいいんじゃまいか

403 :NAME 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\_%';

尚、当然ながら、自己責任でおながいします。いきなり本稼働中環境にやらないように。

404 :NAME IS NULL:2007/07/01(日) 10:57:43 ID:9kR/4Q9k
myspl5で
int unsigned
のカラムにマイナスの値をいれると0が挿入されたり
値がマイナスになるように引き算をしアップデートすると
最大値近くの値になるのは仕様でしょうか?

405 :NAME IS NULL:2007/07/01(日) 14:42:37 ID:???
>>404
create table からinsertまで画面ログを見せてくだつぁい。
漏れの環境では再現できなかったでつ。
5.0.27。
詳しいバージョンもよろ。


406 :NAME 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)

これで入ってしまいます。一応警告はでるのですが

407 :405: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)


408 :406:2007/07/02(月) 00:24:28 ID:Jq59+b9l
別のVersionでためしたら405さんのように跳ねられました。
バグか設定がへんな用です。

409 :NAME 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

410 :405: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)


411 :406:2007/07/02(月) 17:55:26 ID:Jq59+b9l
なるほどこんな設定があるとは
ありがとうございます
しかしこんな設定を使うシステムもあるんですかね

412 :406: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

こんな結果が出ました。
ちょっと不安になってきました。

413 :NAME IS NULL:2007/07/03(火) 00:44:12 ID:???
MySQLって商用として使えるの?

414 :NAME IS NULL:2007/07/03(火) 00:48:40 ID:???
>>413
使えるでござる。
ただしクライアント部でリンクしている部分は
バイナリ保有者にソース公開の義務があるゆえ
徹底した機能分割にて非GPL部分との隔離を
図る必要があるでござる

415 :NAME IS NULL:2007/07/03(火) 08:46:11 ID:???
>>413
ライセンス購入で無問題

416 :NAME IS NULL:2007/07/04(水) 00:38:47 ID:???
お金出すなら、無料でダウンロードできるという採用価値の意味は無くなるけどな。

GPL除去がめんどいのでオラクルを使ってる。
ライセンス量はお客負担だし。

417 :NAME IS NULL:2007/07/04(水) 01:27:03 ID:???
>>416
>GPL除去
詳しく。

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

ちゅーこと?



418 :NAME IS NULL:2007/07/04(水) 10:10:58 ID:???
つか、MySQLはBSDライセンスじゃんか。
GPLがどうして出てくるんだろうか・・・・

419 :NAME IS NULL:2007/07/04(水) 11:00:56 ID:???
>>418
オレはてっきりPostgreSQLの方がBSDライセンスで
MySQLはGPLと商用のデュアルライセンス形態だと
ばかり思っていた。 反省しなくてはいけないな。
教えてくれてありがとう。

420 :NAME IS NULL:2007/07/04(水) 12:06:41 ID:???
整理しよう。(笑)
MYSQLはLGPLライセンス・・だっけか?
PostgreSQLはBSDライセンス・・・かな?

もう何が何だか全然分からなくなってきたな。(笑)

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

ユーザプロフィール用のテーブルと一緒だと、friendsフィールド中にカンマセパレーションで
流し込むことになるのかなと思いますが…

422 :NAME IS NULL:2007/07/04(水) 18:35:11 ID:???
>>421
friends テーブルとか作って、会員テーブルの主キーを自分と相手でマップする感じに作るのが理想。


423 :336:2007/07/04(水) 20:16:15 ID:???
>>418
ソースをみせてくれ

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

Postgres がBSD

424 :NAME IS NULL:2007/07/04(水) 20:19:07 ID:???
MySQL のコードを利用しないアプリに関しては BSD ライセンスってこと?
俺も分からなくなってきましたよw

425 :NAME IS NULL:2007/07/04(水) 22:41:08 ID:???
>>424
今オレが書いてるこのソースもMySQLのコードは使ってないから
自動的にBSDライセンスになるってことか。BSD強いなぁ。うん。

426 :NAME IS NULL:2007/07/05(木) 11:02:35 ID:3+rCMbiR
3.23です。

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

LAST_INSERT_ID() はちょっと違いますし……。
現在、アプリ側でSELECTする方法を考えています。

427 :426:2007/07/05(木) 11:05:11 ID:???
hoge には、id 以外にも幾つかのフィールドを持ちます。
その中にはユニークなものもあり、SELECT〜WHEREで id を取得することは可能です。

428 :NAME IS NULL:2007/07/05(木) 11:23:43 ID:???
>>426
文面通りなら、max()使えばよろし。
ただし、3.23は、使ったこと梨。

429 :NAME IS NULL:2007/07/05(木) 12:55:06 ID:???
ネタにマジレス
ttp://www.mysql-partners-jp.biz/license.html

430 :NAME 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文にまとめたいと思います。
どのように書けば良いでしょうか。


431 :NAME IS NULL:2007/07/05(木) 13:15:13 ID:???
>>430
UPDATE `table` SET `name` = '名前'+id;
'名前'+idのとこは文字列化して文字列連結
あとは冴子先生に聞け

432 :NAME IS NULL:2007/07/05(木) 13:22:32 ID:???
>>431
ありがとうございます。お陰様で解決致しました。
今までSQLは一文ずつしか送れないのだと勘違いしていました・・

433 :NAME IS NULL:2007/07/05(木) 13:53:44 ID:???
hoge_tblのhogeが空の場合(NULLのものと空白のもの)のみを取り出したいのですが以下ではうまく動作しません。
どうすれば意図した動きをしてくれるでしょう?

SELECT * FROM hoge_tbl WHERE (`hoge`=NULL || `hoge`='');

434 :NAME IS NULL:2007/07/05(木) 14:19:11 ID:???
>>433
IS NULL
あとは冴子先生に聞け

435 :NAME 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


436 :426:2007/07/05(木) 17:38:19 ID:???
>428
ありがとうございました。

UPDATEを行う前に他のコネクションからINSERTされる可能性を考えると、MAX()は使えなさそうです。
素直にSELECTすることにします。


437 :NAME IS NULL:2007/07/07(土) 10:28:11 ID:???
GPLは汚染されるからねえ。

438 :NAME IS NULL:2007/07/07(土) 12:36:16 ID:???
MySQLをCygwinか、若しくはコマンドプロンプト以外のターミナルで
実行することはできますか?
コマンドプロンプトでは全角/半角の切り換えに
いちいちAltを押さないといけないので、その手間が煩わしいのです。

なお、当方の環境(WinXP Pro)では、Cygwinでmysqlコマンドを打つと、
何も表示されず、実行されている気配も無いです。


439 :NAME IS NULL:2007/07/07(土) 14:29:42 ID:???
>>438
サービスに登録すれば?

440 :NAME IS NULL:2007/07/07(土) 14:42:23 ID:???
>>439
438はクライアントの話をしているんじゃ?

441 :NAME IS NULL:2007/07/07(土) 16:38:26 ID:???
>>438
teratermでcygterm
あとは冴子先生に聞け

442 :NAME IS NULL:2007/07/07(土) 20:57:15 ID:???
すみません、ちょっとここで聞くことなのか悩んだんですが質問です

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

B・Cのサイトから、 https://www.A.com/ のフォームを開き、そこからB・C用のsqlDBに
登録するっていう流れになると思うんですが、それでセキュリティは問題なく保持されるでしょうか?


443 :NAME IS NULL:2007/07/07(土) 21:37:28 ID:???
>>442
SSLじゃなくてSQLだえお
つーかフォームを開くのかよやめろよそういうのは裏でやれよ
クロスサイトすんなお

444 :NAME IS NULL:2007/07/07(土) 22:04:26 ID:wxVu8uZj
kkk

445 :442:2007/07/08(日) 02:12:47 ID:???
>>443
回答ありがとうございます
>SSLじゃなくてSQLだえお

どういうことでしょう? あのー、ベリサインとかのあのSSLを導入したいって
意味なんですが… すみません知識不足でご指摘の部分が理解できてないかもしれません
板違いだろーという意味でしたら、ごめんなさい
>フォームを開くのかよやめろよそういうのは裏でやれよ
つまり、www.B.comからwww.A.comのフォームを開くの自体がまずいってことでしょうか?
それがクロスサイトスクリプティングにつながると…?
B.comのフォームを開いて、そこからA.comのSSLを利用するなんて出来ないですよね

446 :NAME IS NULL:2007/07/08(日) 02:31:08 ID:???
違うホストの証明書が利用出来たらSSLの意味ない
板違いを自認してるならサッサとお帰りください

447 :NAME IS NULL:2007/07/08(日) 03:03:29 ID:???
たしかに! そりゃそうですね
ごめんなさい ありがとうございました

448 :NAME IS NULL:2007/07/08(日) 10:09:07 ID:/xzmDBMK
MysqlAdministratorについて質問です。

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

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

よろしくお願いいたします。

449 :NAME IS NULL:2007/07/08(日) 14:44:23 ID:???
目的を書いたら?
社内LANとかで他のMySQL鯖に繋ぎたいってこと?
ローカルネットワーク外からローカルネットワークに通信できるのか?って疑問がある。

450 :NAME IS NULL:2007/07/08(日) 21:35:53 ID:???
トンネル掘れば(port forwarding)一応何でも出来る けどね。

451 :NAME IS NULL:2007/07/09(月) 15:58:00 ID:???
>>448
できるよ。 ウォール他、ネットワークの話しになりますね。

452 :NAME IS NULL:2007/07/10(火) 01:30:40 ID:???
ポート転送は邪道だけどな。動けばいいならそういう解決法もあるが。

453 :NAME 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を使用しています。
どなたかご存知の方教えてください。

454 :NAME IS NULL:2007/07/10(火) 22:04:34 ID:???
>>453
いや、そのDBもうDROPされてるよ。 確認した?

455 :NAME IS NULL:2007/07/10(火) 23:20:40 ID:???
つまらない釣りだ。orz

456 :NAME IS NULL:2007/07/11(水) 15:44:43 ID:0py3B+oq
質問です
DB一つの中に10個テーブルつくるのと、DB2つの中に5個づつつくるのとで
どう違うんでしょう
一つにまとめると負荷が大きくなって危険とかあるんでしょうか?
両パターンでのバックアップとるときの短所や長所などがあれば教えてください
切り分けルールをどう定めていいのか分かりません

よろしくお願いします

457 :NAME IS NULL:2007/07/11(水) 16:25:27 ID:???
>>456
切り分ける必要が無いなら切り分けない。絶対に。

458 :NAME IS NULL:2007/07/12(木) 02:08:23 ID:???
アクセスするとき、テーブル違いを意識するかしないか程度。
テーブル単位でバックアップ?なんて変な事するなら多少のご利益はあるだろうけど。
普通はデータベース単位でバックアップ取るから関係ない。

負荷が集中したら、テーブル分けるだけじゃ駄目で、鯖を分散化しないと意味が無い。
テーブル単位でロックするなら、テーブル分ければロックの競合頻度が下がって処理時間が短くなる可能性はあるだろうけど、その次元に逝ったらオラクルとか自動的にロック回避のメカニズムを持ってパフォーマンスが出せるデータベース製品に乗り換えを考えるべき。

459 :453:2007/07/12(木) 13:23:42 ID:???
>>454
2つの異なるDBを同期するのに試してみたのですが、
同期元で削除したテーブルが、mysqldumpで作成したファイルから復元した同期先のDBから削除されませんでした。
また、作成したファイル内にて全てのテーブルについてdrop tableが付加されているので
やはりDBがdropされていないと思うのですが、
何か必要な手順が他にあるのでしょうか?

460 :NAME 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です。

461 :NAME IS NULL:2007/07/13(金) 01:06:02 ID:???
>>460
EXPLAIN してみ。すぐわかる。

462 :NAME IS NULL:2007/07/13(金) 01:47:25 ID:???
実際どうすればいいんだろうね

463 :NAME IS NULL:2007/07/13(金) 04:33:09 ID:9zDJRs1G
1対多の関係のレコードを1発でinsert/updateする方法はありますか?

464 :NAME IS NULL:2007/07/13(金) 07:34:58 ID:??? ?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型の使い分け方が分かりません。
みなさんはどういった使い分けをしていますか?
(例えば掲示板の書き込みは?とか商品紹介は?とか検索対象になるかどうかとか)

465 :NAME IS NULL:2007/07/13(金) 10:47:07 ID:???
>>464
どんなプログラム言語からMySQL使ってるのかしらないけど、
文字列型の変数にバイナリデータを入れるっていう概念が理解できないと
わからないと思う。
文字として扱う限りはtext型でいいでしょ。

466 :NAME IS NULL:2007/07/13(金) 12:48:52 ID:???
>>460
これ前に悩んだけど潰せなかった。
rand 用のインデックスなんて作れそうも無いし。
アプリで主キーの乱数を取って欲しい分回すしかないのかな。

467 :NAME IS NULL:2007/07/13(金) 12:49:35 ID:???
>>463
ない


468 :NAME 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;

とかどうよ?


469 :NAME IS NULL:2007/07/13(金) 14:58:45 ID:???
>>468
あれ?登録順に出てくるぞ。

470 :NAME 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)

471 :469: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 のインデックスが効くから速くなると思うけど、、

472 :464:2007/07/13(金) 15:54:42 ID:???
>>465
返信ども。主にPHPから使ってます。
>文字列型の変数にバイナリデータを入れるっていう概念が理解できないと
>わからないと思う。
概念というか理由がイマイチ理解できないのですよ。
作る人のクセかも知れないけど、1000文字ぐらいの文字列なんかも
blob型で保存してたりして「なんでだろー」と。

473 :460:2007/07/13(金) 15:57:09 ID:ujex21Rt
答えてくれたみなさんありがとうございます。

なんだか複雑ですね。

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

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

474 :NAME IS NULL:2007/07/13(金) 16:02:57 ID:???
>>473
area_id に対して
create index してる?

explain さっきのSQL で、 Using index て出てこないなら、してみたら?

475 :470 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();

がたぶん最速

もっといい方法あったら教えて、エロい人。

476 :NAME 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



477 :NAME IS NULL:2007/07/15(日) 18:46:23 ID:???
>>476
group_concat()を使わなければならない理由は?
cでgroup byしたもののcount()で最大値とればいいんじゃないの?

478 :476:2007/07/15(日) 22:06:24 ID:OG/QKv5e
>>477
そうすると結果が「3」になってしまいます。
上記のケースで取りたい値は「2」なのです。(末尾の『1,1』の部分)
group_concatを使ったのは複数レコードをまとめられたのでこのままイケるかな?
と思いまして><
php使えれば一発なのに・・・


479 :NAME 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
という風にしています。

480 :NAME 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の数の場合
みたいに呼んでカウントをとる。

481 :480:2007/07/16(月) 00:39:49 ID:???
>>480
set lastval = 0; は必要なかった。 あったら0のときカウントがずれる。

482 :NAME IS NULL:2007/07/16(月) 10:17:53 ID:J+xm2Lgb
>>479
自己連結を勉強しる

483 :476:2007/07/16(月) 12:13:36 ID:???
>>480
>>481
レス有難う御座います。
一見見ただけではまだ理解出来ていないphpとSQLとHTMLとJAVASCRIPTしか
触っていないプログラム一年生な自分でありますが、解読して役立たせて
頂きます。
上手くいきましたら報告させていただきますね

484 :NAME IS NULL:2007/07/16(月) 12:37:58 ID:???
DBにDateTimeで予定を入れてるんですが、
問い合わせする時って、時間ごとにSQL文作ってていいんでしょうか。

1回のビューで24回DBに問い合わせる事になるんですが、
スマートな方法って何かありますか?

485 :NAME 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回問い合わせています。

わかりにくい質問の仕方ですいません。


486 :NAME IS NULL:2007/07/16(月) 18:48:16 ID:???
>>485
途中にsqlを抜けるのがいやなだけで、

実質的な問い合わせ回数は2回のままでもいいのなら
480みたいにファンクション作ってやってみれば?

487 :NAME 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です。

どうぞよろしくお願い致します。

488 :NAME 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 |

ってなってるか確認汁

489 :NAME IS NULL:2007/07/16(月) 19:40:06 ID:???
>>484
いまいち曖昧な質問だけど、between とかで時間帯絞り込んで、1日分を一回で取得してくれば良いだけじゃないの?

490 :NAME IS NULL:2007/07/16(月) 20:27:02 ID:4NQxSNLF
>>486
いえ、PHP+mysqlなのでSQL抜けることには
全然問題ありません。

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

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

491 :NAME 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

492 :487: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のバージョンの問題でしょうか??

493 :NAME IS NULL:2007/07/17(火) 16:12:48 ID:???
>>492

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

(rootでmysqlに接続することをお忘れ無く)

494 :479: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サーバー用に書き換えるにはどうすれば良いでしょうか?

495 :NAME 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と絡めて複数回のクエリを送ればできるのですが……

よろしくおねがいします。

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

重複行の削除をしようとしているのですが、
オラクルのように rowid がないので悩んでいます。
やはり一度 distinct したデータで一時テーブルつくって、drop したらまた元に戻してという方法しかないんでしょうか?

497 :NAME 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にバグがあり、
ダメ文字(ソ、十とか)が文字列の最後に来ると例外が発生して更新できません。

よろしくお願いします。

498 :NAME IS NULL:2007/07/18(水) 01:02:47 ID:???
>>497
mysql> SHOW VARIABLES LIKE 'character\_set\_%';でどうなってる?

499 :NAME 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

500 :NAME IS NULL:2007/07/18(水) 01:13:43 ID:???
>>496
mysqlには無いのでなんとか工夫しましょう。

501 :497: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」の領域はありませんでした。


502 :NAME IS NULL:2007/07/18(水) 02:14:38 ID:???
>>501
[client]
default-character-set=utf8

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

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

あんまり使わないんで、うろ覚えでスマン 知っている人つっこんでください。

503 :NAME IS NULL:2007/07/18(水) 02:26:59 ID:???
>>495
一発でとろう30分考えたけど挫折した。
こんな時はいつもファンクションに逃げる。phpで複数回クエリ投げるよりは速いと思う。スマン

504 :NAME 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
);

とか、
もっと美しくできんかなぁ


505 :504: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は忘れてください

506 :475: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();

でいけるね。


507 :NAME IS NULL:2007/07/18(水) 19:47:09 ID:???
>>497
ODBCってあまり経験ないが、Initial Statement に"SET NAMES SJIS" とか入れんじゃねぇ。

508 :479:2007/07/19(木) 06:28:49 ID:???
>>505
あぁなるほど!
そういうふうに使えるわけですね。目からうろこです。
すっかり上司と部下のイメージに取り付かれてそういう発想ができません
でした。まだまだ勉強不足です。

とても助かりました。心から感謝します。

509 :NAME 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

ってした方がなんか落ち着くね。

510 :NAME IS NULL:2007/07/19(木) 17:02:01 ID:+h4+/7J/

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

mysqldump --help で調べた範囲ではそれらしいものがなかったので
すいませんがご存知の方、お助けください。


511 :NAME 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.}.
だから↑をつけなきゃいいじゃねぇ?

512 :NAME IS NULL:2007/07/19(木) 21:05:45 ID:RSThEGcc
CREATE DATABASE IF NOT EXISTS ではなく
CREATE TABLE IF NOT EXISTS となるようにしたいのですが・・・

513 :NAME 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)

514 :NAME IS NULL:2007/07/19(木) 22:02:41 ID:RSThEGcc
>>513
ありがとう。
申し遅れましたが、私512は510でもありまして
事の発端は>>510のmysqldumpでCREATE TABLE IF NOT EXISTSの付いた
出力ができないかと・・・という問題を抱えております。

515 :NAME IS NULL:2007/07/19(木) 22:31:50 ID:???
>>513
dump結果を直でいじれば。
または、create table をdumpさせないとか。

516 :NAME 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再構築

みたいなこんな感じ?(未テストだけど、たぶんうまくいく気がするけど、テスト環境つくってやってみてね)


517 :NAME IS NULL:2007/07/20(金) 04:29:05 ID:X7gTU+GY
>>516
やっぱりそうゆうオプションには無いみたいですね。
ちなみにDROPは--skip-add-drop-tableで出力しないようにできました。
ありがとう。


518 :NAME 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;

自分で何が悪いのかさっぱりわかりません。
間違い個所を指摘してください。お願いします。

519 :NAME IS NULL:2007/07/20(金) 21:25:39 ID:???
× IDENTIFIELD
○ IDENTIFIED



520 :518:2007/07/20(金) 21:28:44 ID:???
>>519
ありがとうございます。2時間ぐらい気付きませんでした。

521 :NAME IS NULL:2007/07/21(土) 13:48:06 ID:???
select * from table where column1 = *** order by column2
これにcolumn3にある単語を含む情報を上位に持ってくるようにしたいんですけど
なにかいい方法はありますか?
column2 でソートした上で column3でソートしたいです。
where column3 = ('%abc%')とかにしてしまうと含まないものは出てこないし…。
わかる方どうかお願いします。

522 :NAME 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

ご意見よろしくおねがいします。

523 :NAME IS NULL:2007/07/21(土) 20:17:25 ID:???
5.0.45来た。

524 :NAME 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を見るにはどうしたらいいでしょうか?
よろしくお願いします。

525 :NAME IS NULL:2007/07/21(土) 21:35:22 ID:???
phpMyAdminで「character set」を変更したいのですが、どうすれば良いでしょうか?

526 :524:2007/07/21(土) 21:53:27 ID:???
CHARACTER SETはSHOW CREATE DATABASE pp;で見ることができました。
COLLATEの方は見ることができないようです。

527 :NAME IS NULL:2007/07/22(日) 02:47:09 ID:???
>>522
俺のときは
set names utf-8
を先に実行してからinsertしたら出来た。

528 :NAME 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日もここで止まってる…はぁ〜〜

529 :NAME 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);


してもだめ?


530 :NAME IS NULL:2007/07/22(日) 11:00:51 ID:???
>>521
order by column2, column3 とかすればいいんじゃなかったけ。

531 :530:2007/07/22(日) 11:05:11 ID:???
あ、ごめん。そういうことじゃないのか。

532 :NAME IS NULL:2007/07/22(日) 15:51:36 ID:ihfm4iWJ
>>529
ありがとうございます
ただ、もうどうしてもダメだったのでmysql5から4にバージョンダウンしました
そしたら一応入力はできるようになりました。
今度はphpでブラウザに表示すると文字化けしてますが…
mysql4に比べてmysql5の長所ってどんなとこだったんでしょうか?

533 :NAME 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
);

534 :533:2007/07/23(月) 01:11:20 ID:???
実行ユーザーに権限が無いのかも・・・と、今考えています。
ユーザーの権限の調べるのも時間かかるなあ・・・

535 :534: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 文字目

536 :NAME IS NULL:2007/07/23(月) 02:52:21 ID:???
原因がわかりました。
VERCHAR ==> VARCHAR

NetBeans5.5.1で編集していたのですが、VERCHARでも色が変わるんです。まったく疑いもしませんでした。

537 :NAME 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.

538 :537:2007/07/23(月) 03:47:16 ID:???
途中でエンター押しちゃった。orz

2. 他のプログラミング言語からループでSELECT i++ FROM 〜 WHERE 甲 != i++; で存在しない2と4を見つける。

539 :537:2007/07/23(月) 03:55:40 ID:???
続き・・・


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



自分が考えたのは以上、三つです。いっそのこと、ハッシュコードみたいなの生成して、デュプリケートがめったに起こらないようにする方がいいのかもしれないとも思います。
でもそうすると、メモリー食いそうな気もするし・・・難しいです。

540 :538:2007/07/23(月) 03:59:09 ID:???
ミステイクに気付きました。i++を二回も呼んだら同じ数字にならないですね。毎日徹夜で頭がおかしくなっているのかも・・・。orz
SELECT i++ FROM 〜 WHERE 甲 != i++;

541 :537:2007/07/23(月) 04:04:58 ID:???
また間違ってた・・・。

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

もう寝た方がよさそうだ・・・・orz

542 :NAME IS NULL:2007/07/23(月) 04:19:18 ID:???
詰めないとならない、という仕様にする無駄。


543 :537:2007/07/23(月) 08:56:04 ID:???
>>542
レスありがとうございます。
なるほど、3.はDELETEした数字をすべて記録しておいた方が効率よさそうですね。

544 :NAME 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で確認できます) 

545 :NAME IS NULL:2007/07/23(月) 09:59:01 ID:???
>>537
とりあえずお茶でも飲んで落ち着け。書き込むのはそれからだ

546 :537:2007/07/23(月) 10:09:51 ID:???
>>545
文章だけで焦りが伝わってしまっているようで申し訳ないです。

547 :NAME 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にダウンした方がいいんでしょうか…

548 :NAME IS NULL:2007/07/23(月) 10:27:31 ID:???
>>537
まさか、AUTO_INC 項目の数字を詰めようとしているのか…?

549 :537:2007/07/23(月) 10:33:10 ID:???
>>548
いや、AUTO_INCREMENT 属性などという便利なものを知らずに無駄な質問をしてしまったようです。
すみませんでした。

550 :NAME 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スクリプトもしくはコマンドプロンプト上のどちらですか?

551 :500: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
をしています。


552 :NAME IS NULL:2007/07/23(月) 11:03:54 ID:???
>>547
Windows なら、%WinDir%\my.ini
Linux なら /etc/my.cnf



553 :NAME 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>

続きます

554 :NAME 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を編集しています。

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

それとあれもこれもやるのは混乱の元なので、
まずはmysql関数のみで動作をしてから(変数分離の原則)
次にadodbを確認をお願いします。

556 :NAME IS NULL:2007/07/23(月) 14:07:52 ID:???
>>555
ありがとうございます
$DB->Execute("SET CHARACTER SET EUC-JP;"); に関しては、
これなしでやっても上手く行かなかったので、試しにやってみたものです。
でも、PEARを一旦やめてテストするのは有効そうですね 試してみます

557 :556: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以降の方が優秀なんですかね…

558 :NAME IS NULL:2007/07/24(火) 00:03:04 ID:???
[MySQL Server] -> [MySQL Client] -> [PHP] -> (HTTP Header) -> [表示アプリケーション]
この5箇所でどの時点でおかしくなったかわからないとどうしようもない。

559 :NAME 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


560 :556:2007/07/24(火) 09:28:34 ID:lv4xBGF9
>>559
ありがとうございます
PHPでDBに接続後 SET NAMES UTF8 とすることで、
DBからの日本語引き出しを化けることなく成功できました。
cmdでSELECT * すると全部化けてるんですよね これはしょうがないのかなぁ
LINUXで作れば化けないんですかねー

561 :NAME IS NULL:2007/07/24(火) 09:48:44 ID:???
>>560
どう考えても表示する側の問題

562 :NAME IS NULL:2007/07/24(火) 12:02:44 ID:???
どう考えても作り手の問題、っていうか同じ話題でスレ汚し杉

563 :NAME 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'

564 :NAME IS NULL:2007/07/24(火) 13:17:33 ID:???
>>563
おお外のクォーテーションはダブルクォーテーションで囲み、
中のクォーテーションはシングルクォーテーションを使ってみ。
また、カラム名は予約語っぽくないのでざわざわ囲む必要なし。

565 :NAME 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);
に変えるとなぜか動きます…

どこに原因があるかすらわかりませんのでどなたか教えてください。

566 :565:2007/07/24(火) 17:09:30 ID:NeXV1fCV
565です。
ちなみにエラーはでなく画面は真っ白になります。

567 :NAME 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」。

568 :NAME IS NULL:2007/07/25(水) 04:06:36 ID:???
>>565
情報少なすぎ
まずWEBサーバかPHPのエラーログを確認するのが先決

569 :565: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みたいな感じで止まってるような気が…

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



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

MYSQL Version 3.23.58

です。

phpMyAdminのバージョンを書いてしまいました;

571 :NAME IS NULL:2007/07/25(水) 12:10:24 ID:vso8Zt4w
>>565
構成が古いみたいだけど
既存システムのメンテナンスかなんかの作業?
だとしてら今まで動いてたとおもうんだけど
動いてたときと動かなくなったときの違いを
示してみたら?

572 :565:2007/07/25(水) 12:26:16 ID:ANMV9j4t
>>571
実は今年の5月に借りた専用サーバなんです。
(ちなみにマイティサーバのスタンダード)

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

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

引き続きお付き合いお願いします。

573 :NAME IS NULL:2007/07/25(水) 12:35:36 ID:vso8Zt4w
実機と開発環境のツール類の違いは?


574 :565: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でテストしています;



575 :NAME IS NULL:2007/07/25(水) 12:59:47 ID:???
今年借りたサーバでMySQL3ってなんか嘘くさいっつーか。

576 :NAME IS NULL:2007/07/25(水) 14:06:03 ID:vso8Zt4w
今皿おそいがWindowsを実機と同等のツールで環境を張った方がよかったね
>テスト用のlinuxが社内になく
っていうのは共感するけどw
linuxのインストールと設定ができるのであればWindowsにVMWare
とかで構築するといいよ。オレはそうしてるから。

577 :565:2007/07/25(水) 15:48:54 ID:ANMV9j4t
今プライベートのテストサーバ(さくらの共有サーバ)
でさっきのを動かしてみたんですが、問題なく動きました;
どうもPEARのインストールあたりでつまづいてる感じがします…
(レンタルサーバなんでデフォルトでインストールされてる物なんですが…)
一度PEARを再インストールしてみてもう一度試してみようと思います。

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

ありがとうございます。早速試してみます。
社内にテストサーバが無いのは自分とこだけだと思ってましたが、
結構あるんですねw


578 :565: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自体にバグがあるんですかねぇ?

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

これまでの流れで一番疑わしいのはPEARだし。


580 :NAME IS NULL:2007/07/25(水) 17:39:37 ID:???
>>578
エラーメッセージじゃなくて、PHPとMySQLの
「エラーログ」を見せてよ。
MySQLに繋がったなら、接続ログ残ってるはずだし
それに続いて何か記録されてるでしょ。

581 :565:2007/07/25(水) 18:49:36 ID:ANMV9j4t
>>580
phpのエラーは出てないみたいでログは無いです。
MYSQLのログはなぜか見つからなくて…
(保存設定の場所に何故か無い)
現在そっちで格闘中ですw


582 :NAME IS NULL:2007/07/25(水) 20:55:16 ID:dIip1FAH
とみーたのメーリングリストはきもーい

583 :NAME IS NULL:2007/07/26(木) 00:38:49 ID:pBQax6Oq
データインポート後に、後から各レコードにユニーク番号を振ろうとしてるんですが
いくら修正しても、255以降のレコードが全部勝手に255になってしまう、という現象に悩まされてます。
何が原因なんでしょう?

584 :NAME IS NULL:2007/07/26(木) 01:33:04 ID:???
>>583
データ型の問題

585 :NAME IS NULL:2007/07/26(木) 01:42:35 ID:???
>>581
phpのエラーがでないのは
display_errorsがoffになってるからじゃないだろか

586 :565:2007/07/26(木) 10:17:08 ID:l0TK3yeO
>>585
いえ、他のエラーはちゃんとログに残っているんでそれはないです。

587 :NAME 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;




588 :NAME 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
これだとエラーになりました。

589 :NAME IS NULL:2007/07/26(木) 12:38:52 ID:???
>>588
カンマが抜けてるだけとか
>ORDER BY `seq` DESC `time` ASC 
ORDER BY `seq` DESC , `time` ASC 

590 :565: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さんをはじめレス頂いた皆さんどうもありがとうございました!!



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

本当にお騒がせしました;

592 :NAME IS NULL:2007/07/26(木) 14:50:37 ID:???
>>589さん
ありがとうございます。
自分の視野の狭さにびっくりです。。。

593 :NAME IS NULL:2007/07/26(木) 23:46:03 ID:???
phpMyAdminをインストールしたのですが
データベース一覧に「information_schema」というデータベースが表示されます。
これをユーザーが見えないようにしたいのですがどうしたらいいでしょうか?

参考:ttp://www.blockgroup.jp/phpmyadmin/tableadd.html
よろしくお願いします。

594 :NAME IS NULL:2007/07/26(木) 23:57:40 ID:???
えー加減、phpの問題はそっち関連の板でやれや

595 :NAME IS NULL:2007/07/27(金) 00:03:57 ID:gg0JCmU1
Windows Vista に MySQL を入れたら異様に接続に時間がかかるんだけど(3秒くらい)
そういった症状ありますか?ver.4.1でも5.0でも変わらず。
ファイアーウォールとかアンチウィルスなんかを切っても変わりません。
接続した後はなんら問題ないんですけども。

596 :593:2007/07/27(金) 00:28:34 ID:???
解決しますた。

597 :595:2007/07/27(金) 02:18:11 ID:???
なぜか今やってみたら正常ですた・・・。
なんだったんだろうか。

598 :NAME IS NULL:2007/07/27(金) 14:33:57 ID:Xo6cJhj9
DATE型のフィールドに誕生日を保存しているのですが、
そこから20歳未満のデータを取得したいのですが何かいい方法はありませんか?

年齢で別に保存しておかなくてはいけないのでしょうか?

599 :NAME IS NULL:2007/07/27(金) 17:03:26 ID:???
>>598
where 誕生日 > date_sub(curdate(), interval 20 year)

600 :NAME IS NULL:2007/07/28(土) 14:53:20 ID:X4hyAVEd
自作PHPスクリプトからだとMySQLに接続できるのですが
phpMyAdminを使って接続しようとすると、
Access denied for user 'username'@'localhost' (using password: YES)
とエラーが出てしまいます。
どうすれば良いのでしょうか…?

601 :NAME IS NULL:2007/07/28(土) 15:18:38 ID:eFtPhvG6
テーブルをまたいでsum値をとりたいのですが、SQLで可能でしょうか?

select sum(data) from table1;

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

table1,table2,table3

があり、三つのdataの合計値を求めたいんです。

602 :NAME IS NULL:2007/07/28(土) 16:17:42 ID:???
>>600
phpMyAdminに設定されてるパスワードを確認しる

603 :NAME IS NULL:2007/07/28(土) 17:08:03 ID:???
>>601
sum(table1.data)+sum(table2.data)+sum(table3.data)

ブルブルブル

604 :NAME 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'
上記のエラーが出るんですが・・・

605 :NAME IS NULL:2007/07/30(月) 01:12:51 ID:???
>>604
その質問の仕方だと、Cの初心者?
言語そのものをもう少し勉強するか、使いやすいスクリプトにかえたほうがいいんじゃない?

606 :NAME IS NULL:2007/07/31(火) 00:03:55 ID:???
mysqlコマンドのソースぐらい解析してパクればいいのに。

607 :604:2007/07/31(火) 00:49:52 ID:???
クライアントライブラリにリンクしていないだけなのか?
プログラムの問題より開発環境を整えなければ・・・

608 :NAME IS NULL:2007/07/31(火) 01:16:05 ID:???
WHERE INで検索する値は最大何個なんでしょう。
公式ドキュメント見ても書いてない…。


609 :NAME IS NULL:2007/07/31(火) 02:03:27 ID:???
ざっと400

610 :NAME 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件のみずつ結合させたいのですが可能でしょうか?

611 :NAME IS NULL:2007/07/31(火) 14:49:21 ID:HtfeXAjK
>>551
質問する前にログ呼んでいたら俺にとって神っぽいのがあったyo!

612 :NAME IS NULL:2007/07/31(火) 16:38:23 ID:???
>>610
山田君が心配でなりません

613 :NAME IS NULL:2007/07/31(火) 16:41:36 ID:WUqKUQvr
>>612
たまたま苦手な科目だったので大丈夫です。
彼は結構努力家なので頑張ればできる子だと思います。

614 :NAME IS NULL:2007/07/31(火) 19:37:47 ID:???
>>610
グループ化中の最大小値の行抽出は
サブクエリ使うしかなかった様な(?)

615 :NAME IS NULL:2007/07/31(火) 23:07:36 ID:???
viewってどのタイミングでデータ取得してるんですか?
参照してるテーブルがちょっとでも変わるとコロコロデータ変わるの?
それともviewを参照した時点で変わるんですか?


616 :NAME IS NULL:2007/08/01(水) 03:27:49 ID:???
>>612
品川君の心配もしてあげてください。

617 :NAME IS NULL:2007/08/01(水) 11:59:19 ID:???
test

618 :NAME IS NULL:2007/08/01(水) 12:14:05 ID:???
>>610
tbl2 を id で group by した結果を join する訳だが、group byで
チョイスされるレコードを制御できれば解決だよね?
group by は最初に見つかったレコードをチョイスする特性があるので、
まずサブクエリで並べたい順番に order by した結果を group by する。


619 :NAME 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

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

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

済みませんが、よろしくおねがいします。

621 :620:2007/08/01(水) 16:00:01 ID:UEnuxYzb
すみません 書き忘れてました。
mysqlのバージョンは5です
今の開発はwinXP+apache2ですが、将来は
centOS4 + apache2 で運用したいと思います
どなたかお暇な方おねがいします。

622 :NAME IS NULL:2007/08/01(水) 16:59:55 ID:???
>>621
ttp://www.atmarkit.co.jp/flinux/index.html

でも、興味のある物から片っ端から読んでみれば

623 :NAME IS NULL:2007/08/01(水) 20:01:20 ID:???
それぞれのCollationが
どういう順序で照合していくのかは
どうやれば分かりますか?

624 :NAME IS NULL:2007/08/01(水) 20:37:31 ID:???
show collation

625 :NAME IS NULL:2007/08/01(水) 21:35:21 ID:???
>>624
それぞれのcollationの詳細が知りたいんです
たとえばutf8_general_ciとutf8_unicode_ciがどう違うのかとか…

626 :NAME IS NULL:2007/08/01(水) 23:00:11 ID:???
mysqlにおける
データベース名、テーブル名、カラム名の
最大長はいくつでしょうか?

627 :NAME IS NULL:2007/08/02(木) 01:13:20 ID:???
>>619
count(distinct host) で、どない?

628 :620:2007/08/02(木) 06:39:25 ID:???
>>622
ありがとうございます
読んでみます

629 :NAME IS NULL:2007/08/02(木) 18:39:48 ID:???
UPDATE文の中でINNER JOINを使うには
どう書いたらよいでしょうか?


630 :NAME IS NULL:2007/08/02(木) 18:40:31 ID:???
>>629
UPDATE tbl1 INNER JOIN 〜 ON 〜 SET
でいけるんじゃない?

631 :629:2007/08/02(木) 19:15:24 ID:???
>>630
できました!構文の順序を間違ってたみたいです。ありがとうございます。


632 :NAME IS NULL:2007/08/02(木) 20:48:47 ID:???
テーブルではなく、テーブル内の特定行を誤って削除してしまいました。
操作ログはどうやらないようなのですが、これを復旧する方法はあるのでしょうか?

もしあれば、教えていただけないでしょうか……。

633 :NAME 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-ほにゃらら が発生するので、
いつもアプリ側で桁チェックしていたのですが・・・

634 :NAME IS NULL:2007/08/03(金) 08:52:42 ID:zkXqSFX2
MySQL Version 5
UTF-8
という作りのレンタルサーバーを利用しています。

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

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

サーバーのサポートが当てにならないのでここにきました。どこに問題があるのか分かる方がいましたら教えてください。

635 :NAME IS NULL:2007/08/03(金) 10:46:42 ID:???
>>633
5.0以降ならsql_modeを指定すればOracleのようにできます。
4.1でもsql_modeを指定すればできるかもしれないけど調べてません。

636 :NAME IS NULL:2007/08/03(金) 10:49:55 ID:???
>>633
create table時にcharsetにujisかeucjpmsを指定すればいいでしょう。

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



637 :634:2007/08/03(金) 10:57:30 ID:zkXqSFX2
>>636
このレスは>>634宛とみてよいでしょうか?
ありがとうございます。
早速試してみて、また経過を報告させていただきます。

638 :NAME IS NULL:2007/08/03(金) 11:09:31 ID:???
>>632
バイナリログか定期的なdumpをしていないのならば諦めるほかあるまい。

639 :NAME IS NULL:2007/08/03(金) 12:28:57 ID:???
mysql 5.0.x MyISAM だけれども、

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

という怪現象に遭遇中、同じ経験をし克服したヤツいますか?

640 :NAME IS NULL:2007/08/03(金) 12:50:28 ID:???
>>639
indexが壊れてる気がする
myisamchkとかしてみそ


641 :NAME IS NULL:2007/08/03(金) 15:00:20 ID:???
>>640
ありがとう。
check table すると壊れてないって言ってくるけど、repairすると直る。やはりエラーはなし。
"myisamchk -r xxx" = "repair table xxx" だと理解しているが今度出たらやってみる。
クエリキャッシュがなぜかリフレッシュされないことがあるのか?
と思ってきたので、RESET QUERY CACHE をしてみる。

642 :634: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ではソートも上手くいっていたのですが・・・なぜ上手くいっていたのかもわかりません。
どなたかご指摘お願いします。

643 :NAME IS NULL:2007/08/03(金) 20:14:59 ID:???
>>642
その調子だと、格納がちゃんとされているのかも怪しいけど

644 :634:2007/08/03(金) 20:34:38 ID:???
>>643
insertしたい文字列を
$str = mb_convert_encoding($str, "EUC-JP", "SJIS");
としたあとにinsertしていますが、こことは違う問題でしょうか?

645 :NAME IS NULL:2007/08/03(金) 21:33:44 ID:???
>>642
クライアントの文字セットが何になってるか確かめてちょ。

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

set names ujis
を実行すること。
(上がダメなら set names binary って手もあるけど、オススメはしない)


646 :634:2007/08/03(金) 21:46:49 ID:???
>>645
643さんとあわせてありがとうございます。

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

set namesについては今から試してきます。

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

しかしこれをSJISに出力しようとするとやはり文字化けしまうようです。

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

これ以上はたぶんスレ違いなのでPHPスレでどーぞ。


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

アドバイスを元にまた試行錯誤してきます。丁寧に対応してくれてありがとうございました。

650 :NAME 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サーバの設定だけで全てがうまく行く方法はないものでしょうか?

651 :NAME IS NULL:2007/08/04(土) 14:12:28 ID:???
>>650
運用中である2台のサーバのMySQLバージョンは?
そして1台にまとめたあとのバージョンは?

652 :650:2007/08/04(土) 15:06:54 ID:HPcoDndd
レスありがとうございます。
元のサーバのバージョンが4.1.20
移行先のサーバのバージョンが5.0.22です。

653 :NAME IS NULL:2007/08/04(土) 15:34:19 ID:???
>>652
運用中の2台をそれぞれA,Bと、以降先のをCとします。

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

そのダンプをCに突っ込めばうまくいくんじゃないのかな?


654 :NAME IS NULL:2007/08/04(土) 16:17:50 ID:???
質問です。
WHERE句で
`age' = 10 OR `age` = 20 OR `age` = 30

`age` IN (10, 20, 30)
とやるのでは、効率などに違いはないのでしょうか?
動作的には同じ結果が出たのですが、負荷に違いがでるのか気になります。


655 :NAME IS NULL:2007/08/05(日) 10:37:40 ID:???
INのほうが速い

656 :NAME IS NULL:2007/08/05(日) 12:21:47 ID:ihsPXEFs
5.1は永遠のベータ版ダナ〜

657 :NAME IS NULL:2007/08/05(日) 15:13:27 ID:???
utf8に統一すれば、問題回避できるのにアフォな香具師が多いな。

658 :NAME IS NULL:2007/08/05(日) 15:38:56 ID:???
UTF-8に統一できない政治的問題が多いからな
クライアントの指示が絶対だったりサーバに手を入れることが
不可能だったり

659 :NAME IS NULL:2007/08/05(日) 16:54:43 ID:???
MyISAM VARCHAR(100)のフィールドに数値2.2(引用符囲まず))をINSERTすると
2.1900000000〜〜
と近似値小数点以下数桁で格納されてしまいます、
仕様でしょうか?

660 :NAME IS NULL:2007/08/05(日) 21:59:35 ID:???
4.1.18で上記現象を確認しました、
5.0.27では「2.2」そのままで格納されました・・・4.1系特有の現象(バグ?)でしょうか・・。

661 :NAME IS NULL:2007/08/05(日) 23:25:27 ID:???
>>660
そうだよ。仕様だけどな。

公式にもあったよ。桁数がたんねーから丸まるってさ。

662 :NAME IS NULL:2007/08/06(月) 16:37:01 ID:/MGn34vw
MySQLで独自の関数みたいなものを作る方法はあるのでしょうか?

663 :NAME IS NULL:2007/08/06(月) 18:23:32 ID:???
>>662
udf

664 :NAME 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 でトランザクション管理するには
どうしたらいいでしょうか?


665 :NAME IS NULL:2007/08/06(月) 21:35:47 ID:FNS0/TEW
運用中のサイトとのかねあいで
mysql4.0をダウンロードしたいのですが
mysqlのサイトで該当ページを見つけることができません。
どこでダウンロードできるのでしょうか?

666 :NAME IS NULL:2007/08/06(月) 21:41:27 ID:???
>>665
MySQL入門以前って本に 4.0のバージョンが付いている。どこぞでダウンロードできるかどうかは知らね。

667 :NAME IS NULL:2007/08/06(月) 21:44:12 ID:???
http://downloads.mysql.com/archives.php

668 :NAME IS NULL:2007/08/06(月) 22:00:58 ID:???
ODBC関数のodbc_fetch_rowと同じものってMYSQL関数にある?

669 :NAME 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`)

どちらが一般的でしょうか?
また、作成したことがある方いらっしゃいましたらテーブル構成を見せていただけないでしょうか?

670 :NAME IS NULL:2007/08/07(火) 18:27:20 ID:???
>>669
説明が下手だね。
良くわかんないけど、テーブル的に期間は気にせずにdailyとか溜めていってクエリで特定の期間内を条件にランキングを出せば。

671 :NAME 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のヘボマシンです。
無理でしょうか?

672 :NAME IS NULL:2007/08/08(水) 02:09:47 ID:lZHQNHvN
phpMyAdminでテーブルのチェックをやると、
table 〜 is marked as crashed and shuld be repaired
と表示されるようになりました。
マークをされたのは分かりましたが、
このマークはいつの段階で利用されるのですか?
再起動時でしょうか?

673 :NAME IS NULL:2007/08/08(水) 02:18:10 ID:lZHQNHvN
myisamchkでrapairしたら出なくなりました
自動で行われるのではなく、
こんなふうに自分でやらないといけないのでしょうか・・・

674 :NAME IS NULL:2007/08/08(水) 23:15:38 ID:???
>>673
ttp://dev.mysql.com/doc/refman/5.1/ja/maintenance-schedule.html

675 :NAME IS NULL:2007/08/09(木) 04:13:09 ID:???
mysqlで、サーバのメモリが4GBとして、
1GBぐらいのデータベース(書き換えはあっても増えないデータベース)
をメモリ上に常駐して高速化する方法ってあるんでしょうか?
(更新データは随時ディスクに書き込み)

676 :NAME 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を実行した時、
テーブルは普通にアクセスできるのでしょうか?
それともロックされて、アクセス不可能な状態になるのでしょうか?

677 :NAME 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

678 :NAME IS NULL:2007/08/09(木) 08:59:55 ID:???
>>675
ttp://dev.mysql.com/doc/refman/5.1/ja/memory-storage-engine.html


679 :NAME IS NULL:2007/08/09(木) 12:29:27 ID:???
>>677
文字コードっぽいね

680 :NAME IS NULL:2007/08/09(木) 13:29:48 ID:???
>>675
他にメモリを食うプロセスが走ってなければ、
そのくらいならOSがメモリにキャッシュするんじゃないかと期待。
変なOS使ってなければの話だけど。

681 :NAME IS NULL:2007/08/09(木) 20:40:56 ID:???
MySQLで遊んでみたいのですが、ライセンス料金がかかると言われました。
個人で触ってみたいのですが、ライセンスキーを購入しないと行けないでしょうか?
商用でMySQLを使っているサイトは、すべてお金を払って使っているのでしょうか?

682 :NAME IS NULL:2007/08/09(木) 21:31:54 ID:???
FC6でMySQLServerが動作しており,そのマシン上でQuery Browserをインストールして
データベースへアクセスすることはできますが,Cのプログラムを用いて,
mysql_real_connectで接続することができません.

サーバ側に何か設定等が必要ですか.

683 :676 :2007/08/09(木) 23:11:09 ID:???
やっぱりロックされますね
checkしている対象テーブルだけじゃなく
関係ないdbにすらアクセスできなくなる。
稼働中にほいほい気軽に実行できるモンじゃないんですね

684 :NAME 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設定みたいのはないよね?

685 :684:2007/08/10(金) 11:54:41 ID:qyxNqw9Z
ごめん、>>684はID、NUM以外にPRIMARYな列があり、
そこに既にAUTO_INCREMENTがされている状態って前提

686 :NAME 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されるのでしょうか?

自分は前者として考えて使っているのですが間違っていますでしょうか?

687 :NAME IS NULL:2007/08/11(土) 02:52:31 ID:e9CmJUOZ
show table status;
を実行すると、テーブル一覧とその属性が表示されますが、
項目が多すぎて見にくいです。

必要な項目だけ絞って表示することはできますでしょうか。
たとえばテーブル名(Name)と更新日時(Update_time)のみを表示する、
といったことがしたいです。

688 :NAME IS NULL:2007/08/11(土) 18:58:14 ID:???
desc カラム名


689 :NAME 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

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

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

よろしくお願いします。

690 :NAME IS NULL:2007/08/14(火) 12:52:48 ID:vLfyd2Go
>>689 です。

人が少ないようなので、他でもきいてみます。
マルチポストになりますが、すみません。

691 :NAME 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 で解消される。


692 :NAME IS NULL:2007/08/14(火) 14:04:55 ID:???
>>684
サブクエリを使え。
SELECT MAX(NUM)+1 FROM TABLE WHERE ID=1 か。

693 :NAME IS NULL:2007/08/14(火) 15:37:13 ID:r5/gZLeq
ちょいと気になったんだが
一回のクエリに一本のインデックスしか使わないMySQLだけど、
サブクエリの場合、それぞれのクエリに別々のインデックス使えるの?


694 :NAME IS NULL:2007/08/14(火) 15:47:02 ID:???
PHPだとdb_convert_encodingで文字コードのコンバートができますが,
C言語はこのような関数はありますか?

695 :NAME IS NULL:2007/08/14(火) 18:06:10 ID:???
>> 693
使える

696 :NAME IS NULL:2007/08/14(火) 19:47:30 ID:???
>>695
そうなのかー
サブクエリ化することで高速化する
みたいなこともできそうだね
ありがとう

697 :NAME IS NULL:2007/08/14(火) 21:48:31 ID:???
>>696
サブクエリでなくて複数テーブルの join でもテーブル毎にインデックスが使われる

698 :NAME IS NULL:2007/08/15(水) 00:32:13 ID:???
>>693
あれ、これって5.0だか5.1で変わってなかったっけ?


699 :NAME IS NULL:2007/08/15(水) 11:06:39 ID:???
>>698
explain すれば一目瞭然。

700 :NAME 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'が含まれている場合に、
エラー無くリストアする手段を教えてください。


701 :700:2007/08/15(水) 17:03:49 ID:???
情報後出しスマソ。
dumpファイルの文字エンコードはutf8だった。
Databaseのデフォルトキャラクタセットはlatin1。

このあたりの問題だとしたら、
どうやったら回避できるのでしょうか?


702 :NAME IS NULL:2007/08/15(水) 17:28:36 ID:???
>>701
で、このまま latin1 で運用続けるつもりかい?

703 :700:2007/08/15(水) 18:45:37 ID:???
>>702
latin1にこだわりはないので、
MySQLの再インストールも辞しません。


704 :NAME IS NULL:2007/08/15(水) 22:51:59 ID:???
ちょ・・ま・・・改行コード落ちじゃねぇだろな

705 :NAME 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 種別,生産日

706 :NAME 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 種別, 生産日, 販売日, 修理日;

707 :NAME IS NULL:2007/08/16(木) 02:52:15 ID:???
4.0はサブクエリ使えんでしょ

708 :705:2007/08/16(木) 07:57:47 ID:???
>>706 さん
>>707 さん
制限の無いサブクエリをサポートしたのが4.1〜だと気づかず構文エラーを繰り返して、悩んでおりました。
JOIN を使うか、アプリ側で制御する事にします。
ありがとうございました。

709 :NAME IS NULL:2007/08/16(木) 10:43:08 ID:???
>>700
Windows版か・・・
Windowsディレクトリとかにある my.ini をエディタで編集し、
[mysql] と [mysqld] の下に default-character-set=utf8
を追加してサービスを再起動する。
Windows版にはadminツールみたいなGUIアプリが付いているみたいだけどそこかも出来るかも。



710 :NAME 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 のバグっぽ
こんな漏れに愛の手を


711 :sage:2007/08/17(金) 07:39:19 ID:???
何が問題なの?

712 :700:2007/08/17(金) 23:11:42 ID:???
>>704
改行コードは全てのINSERT文ごとに
入っているように見えるのですが、
確実にCRLFかと言われると
そうでないかもしれませんね。
念のため、dumpファイルの中身を
再確認したいと思います。

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

自分のやり方が間違っていないか、
月曜に再確認しながらやってみます。


713 :NAME IS NULL:2007/08/17(金) 23:56:55 ID:???
>>710
MySQLのODBCは昔からバグだらけ
直す気ないみたいだから
素直にlibmysql使うが吉

714 :NAME 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の中身は空。
実害があったのか、今のところ不明。

715 :NAME IS NULL:2007/08/18(土) 04:20:22 ID:???
パスなしで使う香具師は馬鹿
3306を外部に開放する椰子も馬鹿


716 :NAME IS NULL:2007/08/18(土) 08:47:53 ID:???
DB鯖をインターネットに繋いでる時点で論外。
DB鯖は、ファイヤーウォールの中で動かすものだし。

717 :NAME 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を書けば良いんでしょうか


718 :NAME IS NULL:2007/08/19(日) 07:25:59 ID:???
select * from Shouhin
where (Joken_a = 1 and Joken_b = 3)
or Joken_a = 2;


719 :NAME IS NULL:2007/08/19(日) 07:34:27 ID:???
>>718
あぁ、or でつなげば良いんですよね。すいませんでしたm(__)m

720 :NAME 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」この部分はどのように記述すれば良いですか?

721 :NAME IS NULL:2007/08/19(日) 13:48:44 ID:???
>>720
ちゃんとCの勉強してる? intを文字列に変換して連結でしょ。
もいっこのやり方は…書くのめんどい。

722 :NAME IS NULL:2007/08/19(日) 14:12:00 ID:???
すまない.連結?がよくわからない・・・

723 :NAME 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);


724 :NAME IS NULL:2007/08/19(日) 15:46:50 ID:???
>>723
小学校からやりなおせよ低脳

725 :720:2007/08/19(日) 16:02:03 ID:???
sprintf(querystring, "\"SELECT * from UserInfo WHERE UserID=%d\"", uid);
mysql_query(mysql, querystring);

このやり方は無理?

726 :720:2007/08/19(日) 16:22:04 ID:???
サンクス.できた

727 :NAME IS NULL:2007/08/19(日) 23:52:54 ID:???
個人情報のテーブルを作ろうと思っています。
ex) 名前|性別|年齢|趣味|・・・・

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

※「良い」というのは、参照効率やメモリ・CPUの負荷、等の面で


728 :NAME IS NULL:2007/08/20(月) 00:15:28 ID:???
そりゃあーた何をどうしたいかによる罠、
依存関係やらどう運用するかで決まるし、
最初の設計で皆苦労しとるんよ。

729 :NAME IS NULL:2007/08/20(月) 02:49:49 ID:R3oVd09H
ライセンスの件で質問です。
バンドメンバー募集サイトのWebアプリケーションを
個人で作っているのですが、MySQLはサーバー側のみで
使用するので当然アプリやMySQLを配布する訳ではないので
有料ライセンスにはならないですよね。
スポンサーの広告収入で運営したいと思っているので
一応商用サイトにはなると思うのですが。

730 :NAME IS NULL:2007/08/20(月) 02:56:35 ID:???
>>729
アプリを配布しないのであれば無問題


731 :NAME IS NULL:2007/08/20(月) 03:02:42 ID:???
>>730
ありがとうございます、スッキリしました。

732 :NAME 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


733 :NAME IS NULL:2007/08/20(月) 12:54:32 ID:???
>>724
よく見ると恐ろしい sprintfだな。
しかし小学校では女子だけ体育館に集合する事はあってもCの勉強はないヨ。


734 :NAME IS NULL:2007/08/20(月) 18:18:02 ID:???
ぱっと見でおかしいだろ。

735 :NAME 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ファイルが必要なのです。
どこにあるのでしょうか?

736 :735:2007/08/20(月) 22:17:41 ID:prQ3mqs2
>>735
mysql-5.0.41.tar.gzには.dswファイルはありませんでした。

737 :NAME IS NULL:2007/08/20(月) 22:45:51 ID:???
そんなファイルはありまsenna

738 :NAME IS NULL:2007/08/20(月) 23:10:04 ID:???
mysql-5.0.45-win-src.tar.gz があるけど
こっから取り出したらいいんじゃないかな

739 :NAME 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と同じ
名前のテーブルを作り、そこに格納するという方法が考えられますが、
その方法はベストといえるのでしょうか?
当方かなり初心者です、ご指導お願いいたします。

740 :NAME IS NULL:2007/08/20(月) 23:21:20 ID:???
Vector<String> student; // この教室の生徒のnumberの配列

Vector<int> student; // この教室の生徒のnumberの配列
でした、しつれいしました。

741 :NAME IS NULL:2007/08/20(月) 23:29:20 ID:???
>>728
>>732
なるほど、ありがとうございました。

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

日本国内をターゲットにしたのサイトなので、最大約1億レコードで
運用上問題なければOKかと・・・(笑)

742 :735:2007/08/21(火) 00:05:52 ID:oSdLFFt+
>>738
 レスありがd
 unix系に不案内なのでよく分からないのですが、そんなモンなのでしょうか?
 っていうか、.dswなのでWindowsの話?

 とりあえず、やってみます。

743 :NAME 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 */
);


744 :NAME IS NULL:2007/08/21(火) 11:45:07 ID:???
>>743
参考になりました、どうもありがとうございます。m( )m

745 :NAME IS NULL:2007/08/21(火) 13:37:17 ID:???
昔は第三正規化とか言ってたけどいまはそういう名称使われないの?

746 :NAME IS NULL:2007/08/21(火) 22:51:04 ID:???
いや使うだろ。
ただ、不勉強な人にそんなことを言っても通じないだろうから使ってないんじゃね?



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

>>739 もひどいが
>>741 もいまいちだよな


748 :700:2007/08/22(水) 10:16:01 ID:???
コマンドプロンプトから、
mysql db_name -u user_name --password=password < dump_file_name
って実行すれば何の問題もなく流れました。

己の愚かさに反省。orz
そして助言してくれた皆様に感謝。
・・・吊ってくる ノシ


749 :NAME 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を切らなきゃダメでしょうか?


750 :NAME IS NULL:2007/08/22(水) 12:29:10 ID:???
↑これですが、私の確認ミスで問題ありませんでした。
スレ汚し失礼しました。

751 :NAME 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と追加していく良い方法ないでしょうか?

752 :NAME IS NULL:2007/08/22(水) 17:02:18 ID:???
backup******.sqlの中にdrop tableやらcreate tableやら入ってるだけじゃないの?
元のファイルのエクスポート方法を見直すのが一番速いと思うけど
それが出来ないならシコシコとコメントアウト。

753 :NAME IS NULL:2007/08/23(木) 02:50:09 ID:???
公式から、ダウンロードするとき
個人情報を入力しないといけないようになりました?

754 :NAME IS NULL:2007/08/23(木) 07:28:32 ID:???
>>753
skipしていけば問題なし


755 :NAME IS NULL:2007/08/23(木) 09:57:56 ID:???
>>754
あ、小さい文字でなんかありました。
ありがとうございます。

756 :NAME 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`を取り出したいのですがどのような書き方があるでしょうか?

757 :NAME IS NULL:2007/08/23(木) 14:21:08 ID:???
>>756
過去ログ嫁
>>618

758 :756: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;


759 :NAME IS NULL:2007/08/23(木) 16:40:52 ID:???
>>758
group by は最初に見つかったレコードをチョイスする特性があるので、
まず element_tbl をサブクエリで並べたい順番に order by した結果を group by する。


760 :NAME IS NULL:2007/08/23(木) 21:23:22 ID:iOrH9/U/
1テーブルに付き、どのくらいのフィールド数にするのが適切ですかね?

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

皆さんはこういう場合どうしてますか?やはり複数テーブルを結合してますか?

761 :NAME IS NULL:2007/08/23(木) 22:09:04 ID:???
複数テーブルを結合してます

762 :NAME IS NULL:2007/08/23(木) 22:28:09 ID:???
>>760
正規化する必要がなければ1テーブルに入れるのが基本
しかも100オーバのフィールド数なんて珍しくないし

763 :NAME IS NULL:2007/08/23(木) 22:30:42 ID:???
データディレクトリに、ホスト名.lower-testがあって、
mysqld起動時にファイルシステムに書きに行っているようなのですが
これって何なんでしょう。。

リファレンスやGoogleさんにも、それらしい記述を見つけることができないので
どなたかご存知でしたらお力添えください。。

764 :NAME IS NULL:2007/08/23(木) 23:32:28 ID:???
cygwin on mysql for win.
この組み合わせってダメなの?
Win 版 MySQL のコマンドラインツールって cmd.exe からじゃないとダメ?

765 :NAME IS NULL:2007/08/24(金) 00:32:47 ID:???
パス次第


766 :NAME 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。

767 :NAME 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) <- ここでエラーが起き出した。

768 :NAME IS NULL:2007/08/24(金) 21:30:44 ID:???
>>767
MySQLが頑張って考えてる最中何も通信しなかったから
勿体無いから回線切ったった

769 :NAME IS NULL:2007/08/24(金) 21:39:39 ID:???
>>768
うーん、でもね、sleep 60秒 入れて再試行しても、あるいは10分後に手動で再試行しても
やっぱり同じエラーが返ってきたりしたんで、それは何?と思ってしまったんですよ。

770 :760:2007/08/24(金) 22:55:31 ID:abcdyQsi
>>762
遅レスですみません。
1つのテーブルに100オーバーなんて「普通」なんですか?
確かに、複数テーブルに分けてJOINしまくるというのは、
それだけでSQL文が長くなって、バグやミスに繋がりそうな気がします。

ただ、XOOPSとかphpBBとかOpenPNEとか有名なCMSツールを見ると
1つのテーブルに100オーバなんてないし、細かく分けているので、
どうする方が適切か?汎用性が高いのか、ずっと悩んでいました。
ちなみに、今組んでいるアンケートシステムは、後から変更する事はないです。

771 :NAME IS NULL:2007/08/25(土) 00:18:31 ID:???
「普通」とはなんでしょうか?

772 :763:2007/08/25(土) 00:46:58 ID:???
>>766
ありがとうございます。腑に落ちました。
これからソース眺めてみます


773 :NAME IS NULL:2007/08/25(土) 01:16:21 ID:???
普通じゃなくてもいいじゃん
やたらと入力(フィールド)項目がある
普通じゃないアンケート用システムなんだろ?


774 :NAME IS NULL:2007/08/25(土) 01:48:58 ID:???
自由に設問を追加できるようにしてくれ、なんて要望が出たときってどうすればいいんだろう。
アプリ側でカラムを追加できるようにさせるしかないかなあ?

775 :760:2007/08/25(土) 02:09:18 ID:???
>>773-774
となると、やはり正規化して「個人情報」「カテゴリ」「アクセス情報」など
分けられるだけ分けた方が良いかもしれませんね・・。

設計の段階でずっと悩んでいます。なにせ100以上のフィールドがある
DBを組んだ事がないので、どうするのが後々良いのか悩みます。。

776 :NAME IS NULL:2007/08/25(土) 02:41:18 ID:???
重複した質問とかしてないか?

777 :760:2007/08/25(土) 02:52:15 ID:???
それはないです。よくある性格診断アンケートのような感じです。
質問項目がやたら多いような・・。

778 :NAME IS NULL:2007/08/25(土) 06:09:04 ID:???
アンケートの種類にもよるのだろうけど、
キー以外全部CSVかXML形式でText(不定長サイズの文字列)に格納してしまったほうが楽かもしれない。
集計のときは端から全部読んでプログラムで結果を条件毎のマトリックスに加算してゆくことがほとんどで
SQLの集合関数は意外と統計には使いづらい。
調査項目の多いアンケートは結果見て何を集計するか決めたいといったケースが多く、
プログラムやデータ構造は作り捨てになりやすい。

779 :NAME IS NULL:2007/08/25(土) 06:15:01 ID:???
ああ回答欄をフィールドに一個一個割り当ててるんだろ。 それ、アホ設計じゃん。
そんなの俺なら質問1万項目あろうが4フィールド前後で生成可能だな。
でも方法は教えられんね。自分で死ぬほど考えて。

780 :NAME IS NULL:2007/08/25(土) 06:19:19 ID:???
項目名と回答で1レコードにするの?
それもそうとうだな・・

781 :NAME IS NULL:2007/08/25(土) 09:32:51 ID:???
名前 | 質問 | 回答

ってこと?
でもこれだと回答を抽出する時に少し面倒な気がする。良い方法あるん?

782 :NAME IS NULL:2007/08/25(土) 09:37:14 ID:???
何のためのリレーショナルデータベースだよ。
1対多でリレーションすればいいじゃん。

783 :NAME IS NULL:2007/08/25(土) 09:58:23 ID:???
id | 質問形態 | 質問 | 回答
だな

784 :NAME IS NULL:2007/08/25(土) 09:58:54 ID:???
名前も質問のひとつ

785 :NAME IS NULL:2007/08/25(土) 11:21:36 ID:???
>>781 >>783ちゃんは、正規化できてへんでーー
誰の回答かも分からへんしー。
でも、概要例としてなら分かるわー。

786 :NAME IS NULL:2007/08/25(土) 11:45:13 ID:???
質問マスタ
質問id | 質問形態 | 質問文 | その他

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

これで十分


787 :NAME IS NULL:2007/08/25(土) 15:17:21 ID:???
>>786
回答にコメントつけたいんだけど

788 :NAME IS NULL:2007/08/25(土) 18:11:00 ID:???
つければ?

789 :NAME IS NULL:2007/08/25(土) 18:17:22 ID:???
こういう持ち方をすると回答フィールドのが型指定できないのが難点。
単純な集計ならいいが、男女年齢層別の集計とかやりだしたら問い合わせが複雑にならないか。
入力システムならいいが集計時は横1レコード形式に変換してそう。

790 :NAME IS NULL:2007/08/25(土) 18:57:20 ID:???
>>788
回答者テーブルに回答idとコメント先回答idを追加する必要があるね

791 :NAME IS NULL:2007/08/25(土) 19:05:59 ID:???
>>769
MySQLのクライアントとサーバーの間にFireWallとか変なルーターとかいない?

792 :NAME IS NULL:2007/08/25(土) 19:10:04 ID:???
>>789
できるからええやん。 ただ、それなりのスキル無いと重いクエリになるが。

793 :760:2007/08/25(土) 21:47:27 ID:???
皆さん、いろいろ検討ありがとうございます。
自分が正規化するなら

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

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

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


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

でも、これって糞仕様なのでしょうか?


794 :NAME IS NULL:2007/08/25(土) 21:56:46 ID:???
上に出てる通りどこに重きを置くかによって違う。
システムはアンケートの入力それとも集計に重点をおくのか。
1回きりのアンケートなのか。繰り返し使うのか。
記名式かユーザーIDでの管理はあるのかそれとも匿名式か。
アンケートはネットでやるのか紙ベースか、
入力内容の精査はどの低度するのか、
集計方針は決まっているのか分析しながら決めるのか、などなど。

795 :NAME 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)

お門違いの質問でしたら申し訳ありませんが、何卒ご教示ください。

796 :NAME 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)」ってエラーになるです。

797 :NAME IS NULL:2007/08/26(日) 00:38:54 ID:???
>>795
MySQLを5にしろ

798 :NAME 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のソースからコンパイルしたデフォルト設定です。

799 :NAME IS NULL:2007/08/26(日) 05:13:33 ID:???
90万レコードでその速度なら
テーブル設計が悪いか、SQLが悪いか又はその両方

800 :NAME IS NULL:2007/08/26(日) 05:17:36 ID:???
>>799
それ、何かを答えてることになるの?
実質的に何も言っていないに等しいと思うんだけど。

801 :NAME IS NULL:2007/08/26(日) 05:32:21 ID:???
CPUかバスが原因だろ

802 :NAME IS NULL:2007/08/26(日) 06:02:00 ID:???
ユニークキーが重複してるときって上書きや無視しちゃっても大丈夫ですかね?


803 :NAME IS NULL:2007/08/26(日) 07:54:48 ID:cLbF/99H
on duplicate key update オプション付きなら上書きだし。

804 :NAME IS NULL:2007/08/26(日) 08:58:35 ID:???
>>798
インデックスとExplainの結果を見せてもらおうか

805 :NAME IS NULL:2007/08/26(日) 09:30:22 ID:f7724A+Z
今、2003stdにMS-SQLが動いてるんですが、MySQLの共存は可能ですか?
あまり共存とかしたくないけど、予算の都合上、入れられるのがそのサーバなもので。


806 :798: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秒以下で処理できますが、
それ以外ですとどうしても時間がかかってしまいます。

807 :NAME IS NULL:2007/08/26(日) 11:42:02 ID:???
where節に書く予定のフィールドをがんがんcreate indexすればいいじゃん
ってだけの話だね。

808 :NAME IS NULL:2007/08/26(日) 11:55:47 ID:???
そうやって全フィールドにindexを振ってしまったが
この先に待つものはいったいなんだろう・・・

809 :NAME IS NULL:2007/08/26(日) 12:12:39 ID:???
>>805
ポート被ってなけりゃ問題なく動く。

ただSQL Serverって制限しないと
ほとんどの物理メモリを押さえちゃうから、
そのあたりの調整は必須。


810 :NAME 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);

きりがないな

811 :NAME IS NULL:2007/08/26(日) 14:41:56 ID:???
同じ道具を使っても、出来る物が違う。
それがプロ製作と素人製作の違いなのだよアンダーソン君

812 :798:2007/08/27(月) 06:40:24 ID:???
>>807,810
がんがん18個ほどindexを作成いたしましたところ、
期待通りの速度を得ることができました。
#index作成に4時間かかりましたorz

どうもありがとうございました。

813 :NAME IS NULL:2007/08/27(月) 07:29:12 ID:???
ちょっと話を戻すようで申し訳ない。

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

みたいなテーブルがあるとき(実際には、回答者と質問内容については別のテーブルを参照する)
検索とかしようとすると手間のような気がするんだけど、何かスマートな方法ってある?

814 :NAME IS NULL:2007/08/27(月) 09:31:41 ID:???
なんの検索だよ

815 :NAME IS NULL:2007/08/27(月) 11:24:10 ID:???
>>813
普通の正規化なら、
・回答者マスタ
・質問マスタ
みたいなテーブルを作って、キー項目でJOINすると思うんだが
それが面倒だと思うならVIEWにすればいいんじゃね?


816 :NAME IS NULL:2007/08/27(月) 13:34:17 ID:y3LbHP1t ?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


817 :813:2007/08/27(月) 15:31:44 ID:???
>814
検索しないならDBに入れる意味ないんじゃ?

>815
いや、正規化の話じゃなく。

818 :816:2007/08/27(月) 15:52:09 ID:y3LbHP1t ?2BP(1002)
MySQLバージョンを5.1.20betaに上げましたがだめでした

819 :NAME IS NULL:2007/08/27(月) 16:11:53 ID:???
>>817
検索と一言で言っても、回答者検索から統計から広範囲に渡るがな。
回答者検索なら、どこが面倒なんだ? という事だ。

820 :NAME IS NULL:2007/08/27(月) 16:51:15 ID:???
>819
ごめん、回答者検索。
SQL初学者なもんで、すげー回りくどい方法で書いてたのかもしれない。



821 :NAME IS NULL:2007/08/27(月) 17:21:53 ID:???
もぅ知らない!

822 :NAME IS NULL:2007/08/27(月) 20:49:36 ID:???
>>820
おまえ日本語も初心者だろ

823 :NAME IS NULL:2007/08/28(火) 00:07:13 ID:???
ローカル内の2つのサーバにおけるmysqlデータベースデータを
同期しようと思っています。

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

データベースの内容は、2000レコードぐらいの個人情報です。

824 :NAME IS NULL:2007/08/28(火) 00:14:34 ID:???
MySQLのConnectorっていたるところでバグ多いよな
一番マシなのがjdbcくらい

825 :NAME IS NULL:2007/08/28(火) 00:15:48 ID:???
サブが先に更新された場合は?

826 :823:2007/08/28(火) 00:28:26 ID:???
>>825
サブは読み込むだけなんです。
メインもほとんどが読み込みですが、たまにメインの方で更新されるぐらいです。

高度な技は持っていないので、
何かシェルレベルでも支障が無い同期が取れるでしょうか?

827 :NAME IS NULL:2007/08/28(火) 01:18:47 ID:???
>>826
レプリケーションかなあ
一応テーブル指定でも取れる
ttp://www.irori.org/doc/mysql-rep.html

828 :NAME IS NULL:2007/08/28(火) 10:47:09 ID:bE9ZNEtp
mysqlのレプリケーションのバイナリログが膨らんであたふたしてるんだが、
バイナリログ作成止める方法ってどうすればよいんでしょう?
ちなみに、my.cnfのserver-idをコメントアウトしただけじゃダメですたorz

829 :NAME IS NULL:2007/08/28(火) 12:33:59 ID:???
>>828
my.cnfのlog-binをコメントアウトして再起動。

だけど、使い終わったバイナリログを消すだけでいいのでは?
PURGE MASTER LOGS TO 'xxxxx-bin.xxx';


830 :NAME IS NULL:2007/08/28(火) 15:08:42 ID:???
>>826
間違いなくレプリケーションだろ。

831 :805:2007/08/28(火) 20:25:27 ID:???
>>809
ありがとうございます。
参考にします。


832 :NAME 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 が取得したい結果です。
よろしくお願いいたします。


833 :NAME IS NULL:2007/08/29(水) 13:09:03 ID:???
>>832
tableA と tableB を left join して snum が null のレコードを探すでどうよ?


834 :NAME IS NULL:2007/08/29(水) 13:13:00 ID:OUZw7AOU
WEB上のフォームでは誕生日の欄が
[昭和・平成] []年[]月[]日

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

OPENPNEなどを見ると分ける形になっているのですが、
このように範囲が定まっていないデータを扱う場合、
出来るだけ項目毎にフィールドを分けた方が良いのでしょうか?

835 :NAME IS NULL:2007/08/29(水) 13:15:52 ID:???
>>834
全部西暦で管理。

データの参照の時には西暦→和暦変換、
格納の時には和暦→西暦変換をそれぞれ実行する。


836 :NAME 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);

837 :NAME 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なのでサブクエリが使えないのですが、
いつか使える環境で開発する時の参考になりました。

838 :NAME IS NULL:2007/08/29(水) 15:19:16 ID:???
>>834
データベースとしては、date型一つに収めるべし
利用(表示)によって適宜変換すればよし

839 :834:2007/08/29(水) 23:00:17 ID:???
>>835,838
なるほど。入力時は複数にしていたとしても、date型に納めれば
西暦から平成・昭和に分けることは出来るし、如何様にも対処出来ますね。

ただ、会員登録フォームなどで「平成・昭和」+年で
入力するフォームがありますよね?その場合も実際の登録は西暦なのでしょうか?
例えば、[平成][19]年 として入力した場合も、登録は2007にするような。


840 :NAME IS NULL:2007/08/30(木) 00:35:33 ID:???
あとで再利用するかどうかだな
聞くだけ聞いて利用しないならそれでもいい
利用するつもりならそのままなら面倒だろ


841 :NAME IS NULL:2007/08/30(木) 02:11:02 ID:???
てか、西暦と和暦は正確に1:1で対応してるんだから
わざわざ和暦で記録する必要性があるようには思えない。
「昭和70年」みたいな存在しないはずの数値は扱えなくなるけど、
それはすっきりした設計を犠牲にしてまでデータベースの側が
面倒を見る問題なのか? という疑問もある。
データの入り口(入力フォームとか)で適切なチェックをかければ
いいだけの話だし。


842 :NAME IS NULL:2007/08/30(木) 02:25:44 ID:???
>>841
西暦と和暦は1:2のときもあります

843 :NAME IS NULL:2007/08/30(木) 02:31:40 ID:???
波長60の周期関数じゃなかったっけ


844 :NAME IS NULL:2007/08/30(木) 09:29:26 ID:???
>>842
年月日で考えれば、キリの良い箇所はあるだろ。
昭和64年1月7日と平成元年1月8日とかな。
それなら西暦年月日と和暦年月日は1:1対応だ。


845 :NAME IS NULL:2007/08/30(木) 13:04:09 ID:aMigI0oO
PHPでわざと間違えたクエリーを$queryに入れて
if(!mysqli->query($query))
print("Error!: ".mysqli->error);
ってやってもError!って表示されるだけでmysqli->errorの部分が表示されないんですけど
どうしたらいいんでしょうか?

846 :NAME IS NULL:2007/08/30(木) 14:46:32 ID:???
>>845
$が抜けてるとかってオチ?

847 :NAME 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()を使った場合は、当然インデックスが使われないので遅くなってしまうと
思うのですが、こういった月ごと集計などを高速にやるやり方ってあるんでしょうか?

848 :NAME IS NULL:2007/08/30(木) 17:47:47 ID:???
>>843
それは還暦

849 :NAME IS NULL:2007/08/30(木) 17:50:03 ID:???
>>847
明らかに date_format が原因


850 :NAME IS NULL:2007/08/30(木) 17:53:09 ID:???
>>847
あります

851 :NAME IS NULL:2007/08/30(木) 17:53:30 ID:xXyjZ2jf
>>847
ttp://kokoromo.jugem.cc/?eid=204


852 :NAME IS NULL:2007/08/30(木) 18:09:41 ID:???
>>847
そのsqlならインデックス効かなかったっけ?

どっちにしても、月を切り出す程度なら 定石では
当月一日以降、翌月一日未満 って指定だよね。

853 :NAME IS NULL:2007/08/30(木) 18:18:55 ID:???
>>847
つべこべ言わずに explain しる。

854 :NAME 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)

855 :847: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倍ほど高速に。

みなさんアドバイスありがとうございました。

856 :NAME IS NULL:2007/08/31(金) 09:51:04 ID:???
>>854
ttp://sourceforge.net/tracker/index.php?func=detail&aid=1783667&group_id=23067&atid=377408
2.11.1で修正されるみたいです。


857 :NAME 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を書けばよいのか教えてください。

858 :NAME IS NULL:2007/08/31(金) 21:40:38 ID:???
>>857
version_idでグループしてrevision_idがMAXな
version_idとrevision_idだけの仮テーブルをこさえて
じょいん

859 :NAME IS NULL:2007/09/01(土) 21:39:05 ID:lOCeHxsv
create tableやcreate indexのsqlを吐いてくれる、
フリーのExcelファイルってないですか?

いくつかあったんですけど、
auto incrementとかPじゃないkeyが設定できないんス。


860 :NAME IS NULL:2007/09/01(土) 22:32:48 ID:???
>>858
一回SQLを発行して仮テーブルを作成し、
ジョインするってことは、一発のSQLでは無理ってこと?

861 :NAME IS NULL:2007/09/01(土) 23:00:56 ID:???
>>860
バージョンが(多分)5以上であればインラインビューを使えば
テンポラリテーブル使わず、SQL一発でできるよ。

862 :NAME 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'
これ以外でお願いします。

863 :NAME 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
書きゃいんじゃねーの

864 :NAME IS NULL:2007/09/05(水) 09:53:36 ID:???
>>862
select * from tbl WHERE SUBSTRING(`time`,0,10)='2007-09-04'



865 :NAME IS NULL:2007/09/05(水) 10:51:11 ID:???
>>862
普通、
select * from tbl WHERE date(`time`)='2007-09-04';
じゃね?

866 :NAME IS NULL:2007/09/05(水) 10:56:46 ID:???
関数で分解するとindex効かないっす

867 :NAME IS NULL:2007/09/05(水) 11:11:08 ID:???
autoincrementみたくさ
関数定義しといて
なんか追加したら別のカラムに計算して勝手に突っ込む
見たいなの無い?

868 :NAME IS NULL:2007/09/05(水) 12:04:41 ID:H/eyjQaz
↓空欄に一致させたいのですが、これだとうまくいきません。どうすればいいですか?
select * from t_table where id=''

869 :NAME IS NULL:2007/09/05(水) 12:14:49 ID:???
>>868
select * from t_table where id is null;


870 :NAME IS NULL:2007/09/05(水) 13:19:41 ID:H/eyjQaz
>>869
なるほど。ありがとうございました!

871 :NAME IS NULL:2007/09/05(水) 23:08:33 ID:???
>>867
http://dev.mysql.com/doc/refman/5.1/ja/create-trigger.html


872 :NAME 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のコミットが終了するまで待たされるという事?



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

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

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

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

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



874 :NAME IS NULL:2007/09/07(金) 23:45:39 ID:???
>>872
実際にコンソール2つでやってみればわかるよ!


875 :NAME IS NULL:2007/09/07(金) 23:56:29 ID:???
LOCKくらいしろ

876 :NAME IS NULL:2007/09/08(土) 07:47:26 ID:W79c84Ln
ローカルの環境で Microsoft Access 2000/2007 と
OpenOffice Base で作成したデータベースがあります。
これらを一括して MySQL データベースにまとめて
ODBC 経由でアクセスするようにアプリケーションを
書き換えようとしているのですが、mysqldump のように
スキーマとデータをまとめてダンプするようなツールは
Microsfot Access や OpenOffice Base には無いでしょうか?

877 :NAME IS NULL:2007/09/08(土) 08:06:24 ID:W79c84Ln
データ自体は Microsoft Access や OpenOfice Base から
ODBC 接続して複製すれば(マクロは追加で書かなきゃいけないのかも)
いけそうなんですが、スキーマは手動で移すしかないですか?

とりあえず CREATE TABLE などの SQL 文でダンプさえできれば、
あと少々の差異の調整はダンプを何らかのスクリプトで処理して
やればなんとかなると思うのですが・・・

878 :NAME IS NULL:2007/09/08(土) 08:11:57 ID:???
Microsoft Access 2007 にはテーブル単位で
「ODBC データベースへのエクスポート」が可能でした。
リレーションは移ってくれないのだろうか…

879 :NAME IS NULL:2007/09/08(土) 08:27:05 ID:???
エクスポートではできない。
リレーションも含めたダンプができればいいんだろうが。

Access 2007 ヘルプ - エクスポート - リレーションシップ
1 回の操作で 1 つのテーブルしかエクスポートできないため、
エクスポート操作でリレーションシップをコピーすることはできません。
複数のテーブルとそのリレーションシップをインポートする場合は、
インポート先のデータベースを開き、そのオブジェクトをインポートします。

880 :878:2007/09/08(土) 08:34:19 ID:???
インデックスの有無や制約は一切反映されませんでした。
Microsoft Access のエクスポート貧弱なり・・・

881 :NAME IS NULL:2007/09/08(土) 23:39:12 ID:???
アップサイジングウィザードっつーのがあったんだけどな
今のバージョンにはないのかな

882 :878:2007/09/09(日) 10:02:07 ID:???
>>881
Access 2007 からはユーザインターフェイスが大幅に変わって
うまく見つけられなかったけど、「データベースの移動」
っていう項目の中に SQL Server へのデータの移動がある。
なので SQL Server にはスキーマも含めてうまく移行できると思う。

で、あらためて SQL Server から MySQL に移行すればいいのかな。
MySQL Migration Tool を使うのがベスト?
このツールはまだ一回も使ったことないんでこれから検討。

883 :NAME IS NULL:2007/09/09(日) 22:18:37 ID:8M0+Vljb
ネーミングのせいで評価を落としてしまってる件。
ポスグレの方がずっと使えそう。
名前って大事だよな、ミギー。

884 :NAME IS NULL:2007/09/09(日) 23:36:46 ID:???
かわいいじゃん、まいえすきゅーえる
ポスの方がすぐに読めないから名前は嫌い

885 :NAME IS NULL:2007/09/09(日) 23:56:25 ID:QjCU4T3R
int型に文字列を入れようとするとwarning は出るんですが、INSERTされてしまうんです。
これをされないようにするにはどうすればいいか教えてもらえないでしょうか?

886 :NAME IS NULL:2007/09/10(月) 00:46:07 ID:???
>>885
http://dev.mysql.com/doc/refman/5.1/ja/server-sql-mode.html

887 :NAME IS NULL:2007/09/10(月) 03:13:39 ID:???
set names hoge
って、なんで「NAMES」なんていうキーワードなのかさっぱりわからん。

888 :NAME IS NULL:2007/09/10(月) 13:11:08 ID:6m8MdV+L
>>886
ありがとうございます。
解決しました。

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

それと int型に 99.99 を入れようとすると自動的に丸められて挿入されてしまうんですがこれは防ぐ方法ないですか?

889 :NAME IS NULL:2007/09/10(月) 13:48:34 ID:???
>>888
int型って何か分かってる?

前処理で切上げ・切捨て・四捨五入など
必要な処理をすれば、何の問題も無かろうに。

890 :NAME IS NULL:2007/09/10(月) 13:53:32 ID:6m8MdV+L
>>889
分かってるつもりです。
エラーではじいて欲しいだけなんです。
postgresだと int型に 99.99を入れようとするとシンタックスエラーになるので
mysqlでも出来ないかな?とおもって探しています。


891 :NAME IS NULL:2007/09/10(月) 14:16:11 ID:???
>>890
「そもそもint型に実数突っ込む実装が糞」って言ってるの。

892 :NAME 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には落胆しました。』
とあります。
実際はどうなのでしょうか?



893 :NAME IS NULL:2007/09/10(月) 17:00:27 ID:???
>>892
アホなの?

894 :NAME IS NULL:2007/09/10(月) 17:02:16 ID:???
うん、アホだから聞いてるw

895 :NAME IS NULL:2007/09/10(月) 17:03:55 ID:???
>>892
メモリ馬鹿食いなのはSQL Serverもだな。


896 :892:2007/09/10(月) 17:07:44 ID:???
>>895
ってことは、PHPでDBの勉強するなら
自分のPC、メモリ馬鹿食いは避けれないってことなのかな?

897 :NAME IS NULL:2007/09/10(月) 17:10:34 ID:???
>>896
世の中のRDBMSが全てそうだと思うなよwww
SQLiteでも使えや。


898 :892:2007/09/10(月) 17:19:44 ID:???
お、SQLiteってのがあるのですかww
一度調べて出直してきます。
回答ありがとでした^^

899 :892:2007/09/10(月) 17:47:06 ID:???
>>897
SQLiteでPHPのプログラム組んだとして・・・、
SQLiteが入ってないサーバでしか動かないって落ちはないよね?

900 :NAME IS NULL:2007/09/10(月) 17:54:18 ID:???
>>899
日本語でOK。

つかSQLiteでググってみてから
それでも分からなきゃSQLiteのスレで訊けwww

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

それが出来なければ、MigrationToolkitは使えないから諦めるんだな

902 :NAME IS NULL:2007/09/11(火) 00:55:09 ID:???
古いのは、ここから落とせるでしょ。JRE 5.0 Update 8 も。
http://java.sun.com/products/archive/

903 :873: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」を入れろやコラ!!と
相変わらず動いてくれないなあ・・・



なんでなんだろ

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

905 :NAME IS NULL:2007/09/11(火) 23:54:27 ID:???
既にデータが沢山入っているテーブルに新たなカラムを追加しようと思っています。

これは、

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

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

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

初歩的な質問で申し訳ありませんが、よろしくお願いします。

906 :NAME 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個の掲示板にこの書き込みをコピーして貼って下さい。
そうすれば、あなたの願い事は叶うでしょう。もし、貼らなければ、願い事を逆のことが起こるでしょう。とても奇妙ですが当たってませんか?

907 :905:2007/09/12(水) 01:26:52 ID:???
自己解決しました。
default '' というパラメーターをつければおkみたいです。
ありがとうございます。

908 :NAME IS NULL:2007/09/12(水) 16:20:51 ID:QChlKlei
mysql4.1.20を使用しています
postgresばかり使っていたのでmysqlの事がさっぱりわからないのですが
SELECT currval や SELECT NEXTVAL
の代わりになるようなものはMYSQLには用意されていないのでしょうか?

909 :NAME IS NULL:2007/09/12(水) 18:37:39 ID:???
>>908
postgres あまりわかんないけど、auto_increment と last_insert_id() を調べてみ。

910 :NAME IS NULL:2007/09/13(木) 01:05:56 ID:vM9MWgfF
>>909
last_insert_id()がちょうどSELECT currvalにあたるようです
ありがとうございます

911 :NAME IS NULL:2007/09/13(木) 23:08:45 ID:+g8hjTGs
CREATE TABLE文でPRIMARY KEYを指定して
主キーに設定したカラムは、自動的にインデックスが
作成されるのでしょうか?それとも主キーでも
自分でCREATE INDEX文でインデックスを作成しないと
いけないのでしょうか?

912 :NAME IS NULL:2007/09/13(木) 23:27:09 ID:???
>>911
勝手に出来るよ
安心汁

913 :NAME 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

914 :NAME IS NULL:2007/09/14(金) 00:10:34 ID:nR/wca1E
>>913
auto incrementで設定したキーって唯一のPKでなければ
ならないんではなかったっけ?
なので

primary key(id1, id2, id3, id4)ではなく
primary key(id4)ならばエラーはなくなる(はず)

915 :NAME 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;

916 :915:2007/09/14(金) 01:01:23 ID:???
何度も失礼します。
show index from sample;を実行したところ、
>>915のSQL文の主キーがid4しか出てこなかったので、
PRIMARY KEY(id4, id1, id2, id3)のid1, id2, id3は
主キーとしては無視されているようです。
エラーが出なかったためはまってしまいました。

917 :915:2007/09/14(金) 01:10:02 ID:???
でも、show fields from sample;を実行したら、
id1, id2, id3, id4は全て主キーになってました…。
もちろんid4はauto_incrementになってます。
やはり>>914さんが言うとおりに、
主キーかつAuto_incrementのカラムは表に1つだけ
というのが正しい事なのでしょうか?もう分かりません。

918 :NAME IS NULL:2007/09/14(金) 01:42:27 ID:???
目と目が逢う 瞬間 主キーだと気付いた

919 :NAME 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」を取得したいのですが、なかなか上手くいきません。
ほとほと行き詰まってしまいました。
お力添えをいただけませんでしょうか。
宜しくお願いします。

920 :NAME IS NULL:2007/09/14(金) 06:04:31 ID:???
>>918
漏れは別れてから気付いた


921 :NAME 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`

922 :919:2007/09/14(金) 22:25:59 ID:???
>>921
ばっちりいけました!
なるほどこのようにすればいいんですね。
勉強になりました。ありがとうございました!

923 :NAME 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;
みたいな感じのことがしたいのです



924 :NAME IS NULL:2007/09/15(土) 11:09:16 ID:???
select max(hoge) + 1 from fuga;
としたときにデータが空だと
NULLが出力されてしまいますが
NULLを0とみなして計算して
1を出力してもらうためには
どういう記述にすればよろしいでしょうか?

925 :NAME IS NULL:2007/09/15(土) 11:15:45 ID:???
select coalesce(max(hoge),0) + 1 from fuga;


926 :NAME 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 |

927 :NAME IS NULL:2007/09/16(日) 17:07:51 ID:rVRRSUiB
SQL文の中で、名前にハイフンを含むデータベース名は
どのように書いたらいいのでしょうか。
スクリプトからアクセスする場合はhoge-fugaで問題ないのですが、
phpMyAdminからやプロンプトから、例えば
CREATE DATABASE hoge-fuga;
とするとパースエラーになってしまって・・・
hoge\-fugaなどとしてもダメです。

928 :NAME IS NULL:2007/09/16(日) 17:33:11 ID:???
ハイフンを含まないデータベース名にすれば無問題

929 :NAME IS NULL:2007/09/16(日) 17:39:28 ID:rVRRSUiB
>>928
データベース名にはすでにハイフンが入っているんです。
スクリプトからはそれでアクセスできていますが
直打ちだとどうしたものか・・・
すべてスクリプトを介してアクセス、というのはナシの方向でひとつ・・m(_ _)m

930 :NAME IS NULL:2007/09/16(日) 20:22:29 ID:???
`hoge-fuga`

931 :NAME IS NULL:2007/09/16(日) 22:00:21 ID:rVRRSUiB
>>930
ありがとうございます!助かりました!

932 :NAME IS NULL:2007/09/18(火) 13:59:24 ID:LM+QWEw9
mysqlとphpの連携を学習したいと重いDBを勉強したいのですが、
Mysql5.0をインストールしました。
入門レベルとして、何を覚えていけばよろしいでしょうか?

OSはwindowsXPです

933 :NAME IS NULL:2007/09/18(火) 14:56:17 ID:???
まず入門書を数冊読破して下さい

934 :NAME IS NULL:2007/09/18(火) 15:29:02 ID:???
SQL文を覚えてください

935 :NAME IS NULL:2007/09/18(火) 16:22:18 ID:6uQh2xqH
update hoge_tbl set countup = (select countup from hoge_tbl) + 1;
上記のような自身のカウントアップをさせたいのですが
update時に同テーブルをサブクエリに指定しているのが原因という事は
わかったのですが、MYSQLにはどのような代替案があるのでしょうか?

936 :935:2007/09/18(火) 16:34:37 ID:???
自己解決しました


937 :NAME IS NULL:2007/09/18(火) 16:40:33 ID:???
update hoge_tbl set countup = countup + 1;

では問題があるのだろうか??


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



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

しかし重いDBが希望のようですので、
windowsのままでOracleかMSSQLでも購入してください。

940 :NAME 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

ごきょうじゅお願いします。

941 :NAME IS NULL:2007/09/19(水) 06:30:18 ID:thY75gxD
BLOBやTEXTカラムではインデクスする文字列の長さを指定する必要がある

って事なんだけど、エラーメッセージにもそのように書いてあるやん

942 :NAME IS NULL:2007/09/19(水) 23:53:34 ID:???
それだとuniqueにならない恐れがありますよね?

943 :NAME IS NULL:2007/09/20(木) 01:29:51 ID:???
>>942
そんなんなんとかしろ

944 :932:2007/09/20(木) 10:47:44 ID:fT/6kBZZ
レス遅くなりました。
とりあえずはMysqlで勉強したいと思います。
やはりSQL文をコマンドラインに打ち込んで覚えるのがいいですよね?
教本あるのですがさっぱり

945 :NAME IS NULL:2007/09/20(木) 13:04:10 ID:???
>>944
そう重います(笑)

946 :NAME IS NULL:2007/09/20(木) 13:24:21 ID:???
InnoDBを使ってるんですが、
innodb_file_per_tableオプションを付けたほうがパフォーマンスは上がるんでしょうか?

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



947 :NAME IS NULL:2007/09/21(金) 00:31:02 ID:???
InnoDB使ってるやつなんて いんの?

948 :NAME IS NULL:2007/09/21(金) 12:34:52 ID:???
MySQL User Conf Japan 2007 のInnoDBパフォーマンスチューニングでは?そんなパラメータの話は出てこなかった気が。

949 :NAME IS NULL:2007/09/21(金) 14:21:48 ID:???
>>946
関係ある。あたりまえだが、ファイルサイズが大きくなれば一般に遅くなる。

ibdata1が同一物理ディスク上にあるなら、Windowsでいうデフラグするだけで早くなる可能性はある。

950 :NAME IS NULL:2007/09/21(金) 20:25:14 ID:???
>>949
可変長カラムがあってもInnoDBはフラグメンテーション発生しないんでなかったっけ?
Winじゃなければ関係ないような。

951 :NAME IS NULL:2007/09/22(土) 08:34:10 ID:???
ファイルのフラグメントと、DBのフラグメントは違うんじゃないか?
ファイルが大きくても、たくさん開くよりは、たいていは速いよ。

952 :NAME 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



953 :NAME IS NULL:2007/09/22(土) 16:14:45 ID:???
utf8はMySQL4.1からサポート。

954 :952:2007/09/22(土) 17:05:08 ID:???
>>953
そういうことでしたか。
ありがとうございました。

955 :NAME IS NULL:2007/09/23(日) 00:03:21 ID:nJudGDWP
すいません、初心者です。
今、テーブル作ろうと思ってるんだけど、1/7/2007って値が入るカラムのデータ型ってなんになるのかな?
一応、mysqlのホームページでリファレンスマニュアル見たけどわからんかった・・・

956 :NAME IS NULL:2007/09/23(日) 00:09:45 ID:???
>>955
アメリカのデートだな

957 :NAME IS NULL:2007/09/23(日) 00:16:14 ID:nJudGDWP
>>そうなんすか?駄目理科・・・
テキスト型じゃまずいのかな・・・そっちの方向で考えているのですが・・・
初心者かっこわりー

958 :NAME IS NULL:2007/09/23(日) 00:29:37 ID:nJudGDWP
>956
テキスト型で行けました。ありがとうございました。

959 :NAME 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

いまいち思い出せず…。

960 :NAME 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)


961 :NAME 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)


962 :NAME IS NULL:2007/09/23(日) 04:13:25 ID:???
わけあって Microsoft Access からアクセスする必要が
出てきたんだけど、 ODBC で接続すると #DELETED# って
表示されるよ、Access で。

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

既存の MySQL ベースで動いているウェブアプリのメンテナンス
用のツールを、Access フロントエンドで作ってくれっていう
案件なんだよ・・

963 :NAME 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/


965 :NAME IS NULL:2007/09/24(月) 10:35:31 ID:0g3D2SCa
ume

966 :717: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;

967 :NAME IS NULL:2007/09/26(水) 11:43:20 ID:???
バックエンドがMySQL4.1でAccess2000がフロントエンドです。
サーバーエンコーディングがujisで、クライアントエンコーディングがcp932。

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

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

PostgreSQLと比べるとマルチバイトの設定がムズいっス。


968 :NAME IS NULL:2007/09/26(水) 21:50:04 ID:???
>>967
クライアントがcp932ならサーバではeucjpmsを使うべき。


ただ、eucjpmsは5.0以降の対応だったかも。
つか、4.1使うなら5.0にしたほうがいいんじゃね?


969 :NAME 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先生にお伺いを立てていたのですが、それも行き詰まってしまいました。
アドバイス頂けませんでしょうか。

970 :NAME 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


971 :967:2007/09/27(木) 08:10:03 ID:???
>968
thx.

色々試してるけど、やっぱダメっぽい。
うーん、5.0インスコしてみます。


972 :NAME IS NULL:2007/09/27(木) 17:19:26 ID:???
5.0+Access2000とか
5.0+Access2007とか
やってみたけどだめだったぽ


973 :967:2007/09/27(木) 21:02:21 ID:???
>972
Σ(゚Д゚ υ) アタァ!!

mjsk。 _/ ̄|○|||


974 :NAME IS NULL:2007/09/28(金) 04:43:18 ID:???
MySQLの方じゃなくてAccessの方に原因があるから
default-charsetとかいじっても無理だろうな

975 :NAME IS NULL:2007/09/28(金) 11:12:20 ID:???
あれ、そうなん?
てっきりODBCの設定でなんとかなるものとばかり……


976 :NAME IS NULL:2007/09/28(金) 19:39:29 ID:???
結論:Accessを使うのが悪い

977 :NAME IS NULL:2007/09/29(土) 01:43:35 ID:???
>>967がエスパー期待の質問とはいえ、話がどんどん面白い方向に行ってるな。w


978 :NAME IS NULL:2007/09/29(土) 11:52:18 ID:???
MySQLのODBCコネクターがバグってるから
そこを直さない限り何をあがいても駄目

979 :NAME IS NULL:2007/09/29(土) 19:00:08 ID:???
ODBCもカスみたいなもんだけどなぁーーー

980 :NAME IS NULL:2007/09/30(日) 15:26:13 ID:???
>>979
だとしてもほかに接続方法ある?

981 :NAME IS NULL:2007/09/30(日) 17:52:54 ID:???
mysqlclient

982 :NAME IS NULL:2007/09/30(日) 18:18:22 ID:???
>>981
おま、それはちょっと・・・

983 :NAME IS NULL:2007/10/01(月) 03:42:46 ID:???
>>980

>>976

984 :NAME IS NULL:2007/10/01(月) 08:17:36 ID:???
>>983 客に言ってくれ。

985 :NAME IS NULL:2007/10/01(月) 10:42:40 ID:???
AccessのVBAでCのDLL呼べるから
mysqlclientでもいいような気がする
テーブルの直リンクとか出来ないといけないのかな

297 KB
■ このスレッドは過去ログ倉庫に格納されています

★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.04.00 2017/10/04 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)