947 :
NAME IS NULL:2008/06/04(水) 16:53:49 ID:sTUXwMfM
UPDATE test SET name='aaa' WHERE id='1'
UPDATE test SET name='bbb' WHERE id='2'
UPDATE test SET name='ccc' WHERE id='3'
と言うように、各レコードを更新するに辺り
上記のように3回のSQLを実行せずに、まとめて1回で実行する
方法はありますでしょうか?
UPDATE test SET
name=IF(id=1,'aaa),
IF(id=2,'bbb',
IF(id=3,'ccc', 'xxx')
)
)
WHERE id in (1,2,3)
それで速くなるの?
試せばわかるんじゃね?
ぐぁぁああぁ…replace into って、delete → insert だから、
autoincrement のフィールドの値が変わるじゃねぇか…。
952 :
NAME IS NULL:2008/06/04(水) 23:33:29 ID:R8ngxTCT
mysqlで誰にも知られていない
秘密のコマンドがあると聞いた
そのコマンドとは?
とりあえずマニュアル読めば誰にも知られていないわけではないけれど
>>952が知らないコマンドは出てくるんじゃないの?
>>952 またかよ…。 だからSELECTだっつってんだろが
秘密のコマンドはあります。
でも誰も知らないから誰も答えられません。
956 :
NAME IS NULL:2008/06/05(木) 16:34:39 ID:539Qwkef
WebARENA SuitePRO V1を使っていて
mysql-3.23.58-16.FC3.1から
アップデートしたいのですが、
どうすればよいのでしょうか?
素直にV2 に移行する。
958 :
NAME IS NULL:2008/06/05(木) 20:17:33 ID:539Qwkef
>>957 やはりそれが一番簡単ですかね。
ドメインとメールアカウントが
けっこうあるので移転がめんどうだ・・・
959 :
NAME IS NULL:2008/06/07(土) 02:13:41 ID:YKItF8pv
ここで質問してもいいのかな?
もし、スレ違いだったら誘導してくれると嬉しいです。
服の検索をするためのテーブル設計について行き詰まっています。
同じ服だけど、他種類のサイズがある場合、
どういうテーブル設計にすればいいか考えあぐねています。
現状では、
(1) 服のサイズ以外の基本情報テーブル
(2) 服の型番で、各サイズごとに記載したテーブル
を用意しています。
サイズで検索し、当てはまった商品の基本情報と全サイズ一覧を出す場合、
一度のリクエストで、何度もクエリを送信しなければならず、非効率です。
何とか良い方法はないでしょうか?
あるいは、そういう目的別のテーブル設計事例集などがあればいいのですが、
テーブル設計でAmazon検索しても、なぜか魔法瓶が羅列されてしまって、参考になりませんw
お薦めの本、あるいは、複数サイズの洋服の最適なテーブル設計があれば、
ヒントだけでも頂けませんでしょうか?
JOINしたら一発ででね?
JOINでもVUEでも一発で出すことはできるんですが、
型番ごとに各サイズを格納するという作業をプログラム側でやってしまうのは、
良い方法なのでしょうか? なんか泥臭い感じがして。
>型番ごとに各サイズを格納するという作業をプログラム側でやってしまうのは、
あのね、「服の型番」と「サイズ」がどういう関係にあるか自体、業界外の人間には分からないんだ。
「型番」が決まればサイズが決まるのか、それとも、型番→サイズというハイアラーキーになっているのかとか…。
「型番」=「商品の基本情報」(のプライマリキー)で、「型番」→「サイズ」がハイアラーキーなのなら、
「型番ごとに各サイズを格納するという作業」は単なるJOINだから、プログラム側では何もしなくてよいのでは。
なんだかシステム・エンジニアの要件定義そのもだな。
業界や会社の物事を、いかにコンピューター上で実現するか。
>>962 例えば、型番「hoge」の中にS(15)、M(20)、L(25)があるというイメージです。
言われているハイアラーキーな関係になるかと思います。
>>959で言うと、
(1) テーブルに、型番「foo」の基本情報のフィールドがあり、
(2) テーブルに、S、M、L というサイズのフィールドが、
型番「foo」に対してそれぞれあります。
上記前提で、
例えばサイズ検索をして、hogeのMが引っ掛かった場合、
「foo」の全サイズ情報も出力したいので、SとLのフィールドが必要になります。
しかし、型番「bar」のサイズ展開は、L、XL、XXLであるため、
型番を元に、サイズをひとつのフィールドにまとめてしまうと、
検索するのに問題が生じます。
よって、それぞれのサイズのフィールドに、
各型番の基本情報をまとめるようなビューを作成しなければならないのです。
この方式だと、検索結果に一致したサイズの型番で
改めてクエリを投げて、結果をまとめるという処理が必要になります。
未熟なので、もっと効率的な方法はいくらでもあるのでしょうし、
指摘されている方法であっけなく片付けられる手順があるのかも知れませんが、
それを学ぶ手段や書籍を見つけられずに試行錯誤しているのが現状です。
MySQLに関してチューニングや入門書はいくらでも見つけられるのですが、
こういう事例に関しての設計例は、一切見つけられなくて困っています。
何とかお知恵あるいは書籍の情報を頂ければと思うのですが。
>それぞれのサイズのフィールドに、各型番の基本情報をまとめる
の意味が分からん。
単純に、これじゃだめなの?
基本情報に「bar」があり、サイズがMかLのものを取得。
create table dress (RID int primary key auto_increment, ID varchar(24), sz varchar(8));
create table info (RID int primary key auto_increment, ID varchar(24), body text);
insert into dress (ID,sz) values ('foo','S'),('foo','M'),('foo','L),('bar','S'),('bar','M'),('bar','L'),('bar','LL'),('bar','LX');
insert into info (ID,body) values('foo','dress type foo'),('bar','dress type bar');
select distinct D.ID,D.sz,I.body from dress as D left join info as I using (ID) where (I.body like '%bar%' and( D.sz = 'M' or D.sz = 'L'));
966 :
964:2008/06/07(土) 11:14:09 ID:???
・サイズ情報テーブル size
n,type,size,length,width
1,'foo','S',15,40
2,'foo','M',20,45
3,'foo','L',25,50
4,'bar','L',24,52
5,'bar','XL',28,58
6,'bar','XXL',32,64
・商品情報テーブル item
n,type,name,info
1,'foo','ふー','フーな感じです。'
2,'bar','ばー','バーな感じです。'
かなりシンプルにしましたが、
テーブルのイメージとしてはこんな感じです。
ここからsize.lengthで検索し、
一致したtypeの商品情報と他のサイズの情報を取り出したいのです。
良い設計あるいは最適な取り出し方について事例を知っていれば
教えて頂けると嬉しいです。
967 :
964:2008/06/07(土) 11:26:12 ID:???
>>965 すいません、入れ違いました。
ご回答ありがとうございます。
ただ、
>>966のようなイメージなのです。
>>965だと、barのLに関するdress, info情報は返ってきますが、
同時に(同時じゃなくてもいいですが)、barのLLとXLのdress情報も欲しいのです。
サブクエリ exists の定番。
試してないけど
select distinct I.type,I.name,S.size,S.length,S.width from item as I left join size as S using(type)
where exists (select X.type from size as X where (X.size = 'M' and X.length= 15 and X.type = I.type);
969 :
NAME IS NULL:2008/06/07(土) 11:31:40 ID:FRaL8y0I
winmysqladminnとやらは
5.0や6.0のバージョンではないの?
コマンドからしかできないのですかね?
>>968 ありがとうございます。
非常に参考になります。
かなり欲しい結果に近い部分を得られました。
select distinct I.type,I.name,S.size,S.length,S.width from item as I left join size as S using(type)
where exists (select X.type from size as X where (X.length=15 and X.type=I.type));
で、fooのsize「S」が一致し、fooの全ての情報が取り出せました。
これに、X.length=15にあてはまるS.sizeがどれなのかも合わせて欲しいのです。
やはり、その場合は2回クエリを投げる必要がありますか?
実際のテーブルは規模がもっと大きいので、
検索結果が100件あるとすると、
ひとつのリクエストなのに1+100回クエリを投げないといけなくなり、
どうにか上手にまとめられればと思います。
971 :
964:2008/06/07(土) 12:03:39 ID:???
すいません。
>>970は私です。
よく考えると、
>>968さんのクエリと、
通常のサイズ検索クエリ(select size from size where length=15;など)の2回やれば、
欲しい結果が全て得られることが分かりました。
1回では不可能な気がするので、現状最善の方法が見つかりました。
これでどうにかなりそうです。
大変勉強になりました。ありがとうございます。
mysql5で最初から作られている
information_schema
っていうデータベースって削除してよい?
本家の解説読んでもイマイチワカランカッタ
manual 29.7.5 には、「触るな」と書いてあるが。
>>974 それVIEWみたいなもんだろ。
各テーブルの情報がテーブルっぽく見えてるだけのような。
消す意味が分からん。
>>974 おまいは testデータベースも残しておけ
>>974 information_schemaはRDBMSにとって必須なものだよ。
Windowsのレジストリってよくわからない設定しか書いてないから
消してよい?って言ってるようなもん。
つまり、「それを消すなんてとんでもない。」
CREATE VIEW v AS SELECT * FROM t;
みたいにしてビューを作ると「*」が展開された形で作成されてしまい、
元のテーブルtのカラムが増減したときビューを作り直さなければならない
のですが、「*」を展開しない状態でビューを作ることはできないのでしょうか?
980 :
NAME IS NULL:2008/06/10(火) 03:18:18 ID:dXdBkxZR
phpMyAdminのクエリ統計で、
? /秒の数値を見ているのですが、
「52.55」になっています。
起動してから一秒当たり52.55回SQLが発行されたという意味だと思いますが、
MYSQLでどの程度まで耐えられるのでしょうか?
これから、アクセスが伸びていくサイトなので、どの辺までが限界が読めなくて困っています。
max_connectionの設定を1000にしてあるので、最大接続数エラーになったことはないのですが、
サーバーのこの数値がここまでいくと、そろそろ限界っていったものがありますか?
宜しくお願いします。
>>980 そうゆうのは、本番環境に投入する前にベンチなりとっとくもんじゃね?
それに、当然CPU,Memにもよるだろうし、ほかのプロセス(httddとかphpとか)状況にもよるし、
なにより、どんなクエリが発行されるかによって、(同一ハード環境でも)はっきり言って100倍違う。
ちなみにウチの環境だと、
cpu Core Duo 2.0Ghz Men 1GB で、
ごく軽いクエリをmysqldが100%cpu使って20000/s以上出るけど、
ちょっと複雑なクエリにすると、途端に1000/s位になるし、
Apache + mod_perl で実環境に近い状態でやると250/s位。
だからウチの場合ではその近辺まではなんも手ぇ打たんでいいかなと判断してる。(現状 20-25/s位で推移してるし)
もちろんこれはウチの環境に限っての話であって、これらの数値は全く意味をなさないけど。
サーバマシンの構成やデータ量、どんなクエリ投げてるかは、君しか知らんから、一概にいくらとは言えないよ。
982 :
NAME IS NULL:2008/06/10(火) 12:02:34 ID:gwmqg6/k
JMeter でも使ってなんかベンチするとか.
linuxにてシェルスクリプトでデータベースやテーブルの雛形構成を
作りたいと思っているのですが、手動なら>mysql 起動後に
SQLを打ち込んでいますが、スクリプトからの場合はどのような
方法が良いでしょうか?
984 :
983:2008/06/10(火) 13:45:11 ID:???
すみません、自己解決しました。
テキストファイルにコマンド列記し、
mysql -u root < hoge.txt でいけました。失礼しました。
mysqldumpで 指定したフォルダに保存したい場合は
どうすればいいんでしょうか?
教えて下さい。
986 :
985:2008/06/10(火) 14:49:42 ID:???
自己解決致しました。
申し訳ありませんでした。
987 :
973:2008/06/10(火) 16:40:12 ID:???
ひょっとして、この現象に見舞われてるのは俺だけなのか?
いきなりバグ呼ばわりは無視される。
って言うか、これはバグだろ。俺の方でも起こるし。5.0 使えばいい
windowsのコマンドプロンプトで
> mysql
と
> mysqladmin
はどう違うんでしょうか?
administrator(管理者権限)で入るか入らないかの違い。
992 :
990:2008/06/11(水) 11:27:50 ID:???
>>991 レスありがとうございます。
では、administratorとrootはどう違うんでしょうか?
root ってのは、単なるアカウント(ユーザー) 名。
linuxやった方がいいのでは?
995 :
990:2008/06/11(水) 14:23:51 ID:???
>>993 なるほど。よくわかりました。ありがとうございます。
>>994 あまりリナックスはさわったことないので挑戦してみます!