トップページ⇒php
988コメント357KB

mysql ヘルプ!

■ このスレッドは過去ログ倉庫に格納されています
0001名無しさん@お腹いっぱい。02/01/22 16:08ID:kMbsTQE3
リモートから家(常時接続)のmysqlサーバにつなげません
状況を詳しく書きます
PHPが動くプロバイダーのディレクトリにおいた自分の家の
mysqlサーバを操作するPHPに
$db = mysql_connect("mysqlサーバのip:3306","ゆーざ","ぱす");
と書いたのですが、駄目でした。
どうすればいいのでしょうか?
0051nobodyさん02/10/14 18:48ID:???
SELECT で対象を
あるデータベース内の全てのテーブルにしたいのですが、
どのように SQL を書けばよいのでしょうか?
0052nobodyさん02/10/14 21:13ID:???
>>51
joinしる!
0053nobodyさん02/10/19 15:58ID:???
http://pc3.2ch.net/test/read.cgi/tech/1008316065
で聞いた方がいいかもね。
ドライバ開発者もいるみたいだし。
0054nobodyさん02/11/02 05:56ID:???
数値の合計とか平均とか出したい場合、CGIで計算して表示するのとsqlで計算して表示するのどちらがいいのでしょ?
0055nobodyさん03/01/01 02:13ID:g22yKLaX
Windows版のMySQL-MAXの公開やめちゃったの?
0056nobodyさん03/01/01 19:19ID:pXgJfOxP
当方,テキスト形式のデータをperlで整形して,
perl scripからmysqlに読み込ませてきましたが,
新しいMySQLのバイナリー配布版で,"LOAD
DATA INFILE"が利用できなくて,困っており
ます。

ttp://www.mysql.com/doc/en/LOAD_DATA_LOCAL.html

これまでは,perl scriptから一度に複数のテキストファイルをmysqlに読み込ませました。

foreach ("load data infile 'list.txt' into table list", "load data infile 'lemmafe.txt' into table lemmafe"){
$out2 = $dbh->prepare("$_");
$out2->execute;
}

現在は,この作業をterminalから
mysql -u hogehoe -p --local-infile=1
とmysql clientを立ち上げて,手作業でtext
データを読み込ませています。

sourceファイルからmysqlをコンパイルすれば,
問題は解決できるようですが,コンパイルには
自信がありません。

local-infile=1でコンパイルしたosx用のバイナリ
ーファイルを配布しているサイトはありません
でしょうか?
0057nobodyさん03/01/01 19:38ID:g22yKLaX
ftp://mirror.mcs.anl.gov/pub/mysql/Downloads/MySQL-3.22/
ftp://mirror.mcs.anl.gov/pub/mysql/Downloads/MySQL-3.23/
ftp://mirror.mcs.anl.gov/pub/mysql/Downloads/MySQL-Max-3.23/
ftp://mirror.mcs.anl.gov/pub/mysql/Downloads/MySQL-4.0/
ftp://mirror.mcs.anl.gov/pub/mysql/Downloads/MySQL-Max-4.0/
0058nobodyさん03/01/01 19:42ID:g22yKLaX
Ver3.23.49からデフォルトでLOAD FILE LOCAL文が使用できなくなっている。
もしphpMyAdminでCSVファイルのアップロード等を行う必要がある場合、
「--with-local-infile」オプションをつけるか、
mysqlコマンドで「--local-infile=1」というオプションをつけて実行することで有効になる。
0059nobodyさん03/01/01 19:45ID:g22yKLaX
ここ。
http://www.mysql.gr.jp/jpdoc/4.0/manual.ja_MySQL_Database_Administration.html#LOAD_DATA_LOCAL
0060ID:g22yKLaX@5903/01/01 19:47ID:g22yKLaX
すまそ、59のURLはブラウザにコピペしないと適切な箇所にジャンプしません。
00615603/01/01 21:52ID:pXgJfOxP
> mysqlコマンドで「--local-infile=1」というオプションを
>つけて実行することで有効になる。
mysqlサーバを立ち上げるときに,--local-infile=1を次のように
入れても,無効でした(osx)

/Volumes/mysql/mysqlNew/bin/safe_mysqld --user=mysql --local-infile=1 &

mysqlのソースをコンパイルするときに,local-infile=1を指定しないと,
サーバーでは有効にならないのでしょうか?
0062nobodyさん03/01/06 00:49ID:YMUOqc9Y
auto_incrementとprimary keyを設定しているフィールドのあるテーブルで、
2つのレコードを入れ替えたいのですが

例)
num,site__,url
_10,2ch___,http://2ch.net/
_22,Google,http://google.com/
↓
num,site__,url
_10,Google,http://google.com/
_22,2ch___,http://2ch.net/

こんなことできますか?
それとも手作業的にupdateしないとダメ?
0063山崎渉03/01/15 13:36ID:???
(^^)
0064nobodyさん03/02/28 17:53ID:XIiZ4aB7
hogeと言うデータベースがあるとします。
このデータベース「hoge」にはMySQLのユーザ「root」でしかアクセス出来ないようにするにはどうしたら良いでしょうか。

逆に、「foo」と言うユーザーは「boo」と言うデータベースにしか接続できない様にするにはどうすれば良いのでしょうか。

よろしくお願いします。

0065nobodyさん03/03/11 13:25ID:pS3CSiOr
>>64
かねやんMySQLAdminってソフト使ってみたらどうでしょう。

質問させて下さい。
$sth->fetchall_arrayref();で
NAMEやTYPEを取得したいのですがどうすればいいですか?

$sth->fetchrow_array();なら
$names=$sth->{'NAME'}とすれば
$names->[0]で取得できますが、
2回もfetchするのは、効率悪い気がします。
お願いします。
0066nobodyさん03/03/12 04:14ID:txYiwVgf
age
0067nobodyさん03/03/12 11:46ID:???
>>65
MySQLの質問というよりはDBIモジュールの質問ではないかな。
$sth->execute;
$name = $sth->{NAME};
$type = $sth->{TYPE};
$data = $sth->fetchall_arrayref;

これで漏れは全部のデータが取得できるんだが。
0068nobodyさん03/03/12 12:18ID:myMG93+U
>>67
ありがとうございました。
たしかにDBIモジュールの質問ですね。
ORACLEだとfetchall_arrayrefでも
$sth->{NAME}->[0]とかすれば
最初のNAMEを取得できたのに
MYSQLではエラーになったので
ここに質問してしまいました。
以後気を付けます。
0069nobodyさん03/03/12 23:17ID:PTQ2BK4j
副問い合わせが使えないからどうすればいいですか?
0070山崎渉03/03/13 16:58ID:???
(^^)
0071nobodyさん03/03/25 16:25ID:BGwX64RN
InnoDBを導入することになりました。
けど読み方がわからないのでおしえてください。
0072nobodyさん03/03/27 03:03ID:Ya09dI5I
PHPを使って、webよりユーザー登録、ユーザー削除、権限の設定などをする
スクリプトはありますか?
0073nobodyさん03/03/27 12:10ID:???
phpmyadmin?
0074山崎渉03/04/17 12:11ID:???
(^^)
0075山崎渉03/04/20 06:22ID:???
   ∧_∧
  (  ^^ )< ぬるぽ(^^)
0076nobodyさん03/05/17 17:45ID:ghc51a2p
Unicode(UTF-8)で接続出来ませんか?
0077nobodyさん03/05/17 17:55ID:/0gIo8DK
http://www.h3.dion.ne.jp/~oto/
0078nobodyさん03/05/18 16:45ID:NH4N97Dj
>76
Unicodeはあくまでも文字のコードであって、
通信の方式やツールのことじゃないから、質問意味不明ナリ

データベースの文字型の扱いをUTF-8にしたいってんなら、
MySQL4あたりだと出来るはずだよ。
0079nobodyさん03/05/18 16:46ID:aNJYcTmW
リンクスタッフは登録無料!1クリック10円。
バナー紹介料として、リンクスタッフ登録の度に1000円の報酬。
掲示板などに宣伝すればクリックや紹介がある度に報酬が得られます。
登録はメールアドレスと任意のパスワードを入力すれば完了です。
メールアドレスはフリーメールでもOK!
今なら登録するだけで1000円プレゼント。
ちなみに私の先月分の収入は、1日30分ぐらいの宣伝で138340円でした。

http://accessplus.jp/staff/in.cgi?id=9140
直リンクできないのでアドレスをコピーして貼り付けてジャンプしてください。
0080動画直リン03/05/18 17:08ID:rGbr42DC
http://homepage.mac.com/hitomi18/
0081nobodyさん03/05/19 17:16ID:O90Qa4tT
TIMESTAMP型を使って自動的に更新日時が入るようにしたいんですが、
YYYYMMDDHHMMSSのように区切り文字なしでDBに格納されてしまいます。
DATETIME型のようにYYYY-MM-DD HH:MM:SS のフォーマットで
DBに格納されるようにしたいんですが可能でしょうか?
0082梨03/05/20 23:52ID:Y6HkOJuA
>>81
マニュアルにズバリ書いてあったよ。頭使ってもわかりそう。

ヒント: 4バイト

で、DATE_FORMATじゃだめなん?
0083nobodyさん03/05/21 01:20ID:???
初歩的な質問ですが、データ数が少ない場合(100とか200)
テキストファイル使った方が効率良いんでしょうか。
最近は楽さを選んでみんなDB使っちゃってるんですが、
無駄にサーバーに負担かけてるかな?
0084梨03/05/21 16:21ID:AbGSjTDt
>>83
何をするかによるんでないかい?
「データ数」の定義も微妙だし。

行数が200程度しかないフラットな掲示板のログファイル1つのために
DB使うのはやりすぎって気もするけど、
書き込みが多いからロックファイル作って云々考えるとどっこいかも。

漏れは基本的にMySQLかな。
いろんなサーバに入れる場合は、ファイルで管理する事が多い。
0085山崎渉03/05/22 01:57ID:???
━―━―━―━―━―━―━―━―━[JR山崎駅(^^)]━―━―━―━―━―━―━―━―━―
00868103/05/22 11:01ID:rjjMwksk
>>82
レスありがとうございます。

確かにマニュアルにフォーマットを指定できるようなことは書いてあるのは
読んだのですが、具体的にどのような書式で指定すればいいのかがわかりません。

4バイトだとYYMMという形式になってしまうのではないんでしょうか?

DATE_FORMATも読みましたが、私がやりたいのはCREATE TABLEで作成する際に
TIMESTAMPで何か書式が指定できるのかな、と思いまして。。。
0087bloom03/05/22 11:08ID:x2YZ4VCE
http://homepage.mac.com/ayaya16/
0088梨03/05/22 13:51ID:meYOXQTH
>>86
ごめん。TIMEか何かと勘違いしていたので訂正します。

MySQLの日付型は次のフォーマットを持ちます。
a. 格納フォーマット
b. 表示フォーマット
c. (指定用の)共通フォーマット

結論から言うと、TIMESTAMPは、
aが4バイトのUNIX秒型、bがYYYYMMDDHHMMSSの桁数指定型、
cはDATEやDATETIMEと共通のフォーマットになっています。

bで指定出来るのは桁数だけなので、
表示フォーマットを指定するにはcで調整するしか無いです。
それが嫌ならば、DATETIME型を手作業で更新するという手もあります。

詳しくは「6.2.2.2 DATETIME, DATE, TIMESTAMP 型」に全部書いてあります。
http://www.mysql.gr.jp/jpdoc/3.23.x/manual.ja_Reference.html
00898103/05/22 15:50ID:rjjMwksk
>>88
なるほど。やはりbの表示フォーマットは変えられないんですね。

リファレンスのその部分は何度か読んだのですが、
表現的によくわからなかったので、ここで質問しました。

これでスッキリしました。DATETIME型でやってみます。
ありがとうございました。
0090nobodyさん03/05/22 22:23ID:jBpXLiPH
テーブルのカラム名にdescという名前が使用できません。

SQL> create a_table ( desc varchar(64) );
ERROR 1064: You have an error in your SQL syntax
near 'a_table (desc varchar(64) )' at line 1

どうしたらいいっすか?
0091nobodyさん03/05/22 22:36ID:???
>>90

もう一度テーブルの作り方勉強したら?
00929003/05/22 22:41ID:jBpXLiPH
>>90
descもdescrもdescriもdescribもdescirbeも使えない。
00939003/05/22 22:47ID:jBpXLiPH
>>91
ごめん、まちがい
mysql> create table a_table (desc varchar(64) );

>>92
descとdescribeがカラム名として使えない
0094nobodyさん03/05/22 22:49ID:???
DESC 、 DESCRIBE は予約語
テーブルやフィールド名として使用できないれす
00959003/05/22 23:55ID:???
>>94
ぐぅ、残念。「'」や「"」で囲んでもだめだった。
Oracleとは違うのね。
0096nobodyさん03/05/23 00:11ID:???
>>95
「`」 で囲んでみたら?

「`」は Shift+@ ね。
00979003/05/23 09:40ID:???
>>96

mysql> create table a_table ( `desc` varchar(64) );
Query OK, 0 rows affected (0.00 sec)

mysql> desc a_table;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| desc | varchar(64) | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+
1 row in set (0.00 sec)

すげー、できたよ!
めっちゃ多謝です >96
0098nobodyさん03/05/23 09:53ID:5VJPohZk
質問。
次のようなテーブルがあります。
mysql> select * from sample;
+----+-------+
| id | count |
+----+-------+
| 1 |  100 |
| 2 |  100 |
+----+-------+

ここで
mysql> update sample set count=count+10 where id=1;
とすると

mysql> select * from sample;
+----+-------+
| id | count |
+----+-------+
| 1 |  110 |     ← 10増えている
| 2 |  100 |
+----+-------+

のようになります。
このupdate文は、アトミックなんでしょうか?
つまり、多人数で同時に実行しても必ず意図した
結果が保証されるんでしょうか?
0099nobodyさん03/05/24 15:41ID:???
>>98
http://www.mysql.gr.jp/jpdoc/4.0/manual.ja_Reference.html#LOCK_TABLES
http://www.mysql.com/doc/en/LOCK_TABLES.html
日本語訳だけじゃなくて元の英文にもあたって欲しいんだが、
例(単一のupdate)だとlock不要(即ち保証される)
むしろ弊害と折れは読んだが、どうか?

http://www.mysql.com/doc/en/Tips.html
"very fast!"ってどんだけ速いんだよぅ?
0100nobodyさん03/05/24 15:42ID:+sQLJUip
ついでなんで、100age
0101nobodyさん03/05/24 16:38ID:oDSDORJV
★○マ○コは地球を救う★
http://yahooo.s2.x-beat.com/linkvp/linkvp.html
0102nobodyさん03/05/26 09:56ID:???
>>99
返事がおくれたけど、ありがとう。
これで安心して眠ることができるよ。

でも、なんで弊害なの?害となることが思いあたらん。
0103山崎渉03/05/28 17:07ID:???
     ∧_∧
ピュ.ー (  ^^ ) <これからも僕を応援して下さいね(^^)。
  =〔~∪ ̄ ̄〕
  = ◎――◎                      山崎渉
0104質問その�@03/05/29 00:52ID:???
MySQL4.0.5 、WinXP 、Apache1.3.24の環境で質問です。
以下のような二つのテーブルがあります。
テーブル名 j_table
+----+-------+
| id | jusho |
+----+-------+
| 1 | 新宿  |
| 2 | 渋谷  |
| 3 | 新宿  |
| 4 | 新宿  |
+----+-------+

テーブル名 k_table
+----+-------+
| id | konomi |
+----+-------+
| 1 | giko |
| 2 | giko |
| 3 | giko |
| 4 | mona |
+----+-------+
0105質問その�A03/05/29 00:52ID:???
�@gikoが好きな人は何人か?
mysql> select count(*) from k_table where konomi="giko"; だと3

�Agikoが好きで新宿住まいの人は何人か?
mysql> select count(*) from k_table a,j_table b where a.konomi="giko" && b.jusho LIKE "%新宿%"; だと3

�Bgikoが好きで渋谷住まいの人は何人か?
mysql> select count(*) from k_table a,j_table b where a.konomi="giko" && b.jusho LIKE "%渋谷%"; だと3

�Cgikoが好きで中野住まいの人は何人か?
mysql> select count(*) from k_table a,j_table b where a.konomi="giko" && b.jusho LIKE "%中野%"; だと0

テーブルを結合させると該当する行があると、住所の条件に関係なくgiko好きが3人と出てしまうのですがこれは何故でしょうか?
該当する行が無い場合はキチンと0になるのですが・・・
普通�Aは2、�Bは1になるはずなのですが、結合の仕方がまずいのでしょうか?
だれかぜひ教えてください・・・おながいします!
0106nobodyさん03/05/29 01:16ID:???
>105
aのidとbのidはどのような関係が?
countしないでどこかに出力してごらん。

SQLの基本なので良い機会なので入門書を買って味噌。
0107nobodyさん03/05/29 01:30ID:???
>>106
おお、そうですた。
a.id=b.idするのを忘れてますた。
なぜこんな初歩的なミスを・・・
ありがとうございました。
0108nobodyさん03/05/29 10:44ID:???
>107
いや言いたかったのはWHEREの条件に混ぜるんじゃなくて、
必要ならリレーション(関係)を張っては?ということ。
"外部キー"とか"JOIN"とかその辺の単語でぐぐーる。
0109nobodyさん03/06/17 12:58ID:0HXSsTQY
auto_incrementの初期値を0にする方法を教えてください。

テーブル作成時にauto_incrementをカラムに指定した場合、
初期値は1になります。この初期値を0にしたいんですが、できますか?

1以上の正整数に指定するのは、次のような方法でできました。
create table table1 (
id integer not null auto_increment,
value varchar(64),
primary key(id)
)
auto_increment = 100;
しかし100を0にしても、初期値は1にしかなりません。
auto_incrementの初期値を0にする方法があれば、
教えてください。
0110nobodyさん03/06/17 13:22ID:???
カラムA、カラムBが合った時に、その両方が一致する行をユニークにしたいのです。
A B
aa 11
bb 11
aa 22
cc 22
aa 11 ←こいつはINSERTさせたくない

イメージ的にはABの2カラムを合わせてPRIMARY KEYにしたいのです。
こういう場合はどうすればいいんでしょうか。
0111nobodyさん03/06/17 14:49ID:???
>>110

You can use "primary key(A, B)".

----
create table sample (
A varchar,
B integer,
primary key(A, B)
);
----
0112nobodyさん03/06/18 18:04ID:???
>>111
めちゃサンクス。primary key(A, B) でいけました。
#実際にはAがBLOBなのでprimary key(A(128), B) としました。
0113nobodyさん03/06/18 23:51ID:TnNRaExh
mysqlではレコードを追加したらそれに張ってあるインデックスも自動的に
追加されるのでしょうか?
0114nobodyさん03/06/18 23:57ID:???
追加されないDBなんてあるの?
0115nobodyさん03/06/19 00:34ID:70FTCJ+V
A,Bのテーブルがあるとします。

A
ID1りんご
ID3みかん
ID4ぶどう


B
ID2メロン
ID3みかん
ID4ぶどう


この二枚のテーブルでどちらかのテーブルに存在すればヒットする
ようなselec文はどう書いたらいいのでしょうか。重複する行は、
一行のみ抜き出したいです。

こういうかんじにです。

ID1りんご
ID2メロン
ID3みかん
ID4ぶどう

よろしくお願いします。
011611303/06/19 02:25ID:70FTCJ+V
> 114

追加されました。確認もせずに投稿してしまいました。
すいませんでした。
0117nobodyさん03/06/19 02:36ID:tb30wkPm

罪と罰のゲーム、皆さんもやりませんか?
http://gekiya77.gi-ga.net/cgi/
以下から、新規登録出来ますので。
http://gekiya77.gi-ga.net/cgi/ore_reg.cgi

<注>私は管理人ではなく、ただの利用者です。
0118nobodyさん03/06/22 22:04ID:xUqQ3nDm
>>115
left outer join
0119nobodyさん03/06/27 20:50ID:HoNlAHtV
mysqlのインデックスファイルであるMYIを見るツールはないのでしょうか。
どんな感じでインデックスがはられているのかみたいのです。
0120nobodyさん03/06/28 01:44ID:???
>>119
バイナリーエディタ…
MYDとかと同じ。つかバイナリー見ても理解できんでしょ。

インデックス情報見るなら素直にSHOW INDEXコマンド。
有効にインデックスが機能しているかはEXPLAIN SELECTでチェックすれ
012111903/06/28 17:10ID:3aXiHYmQ
すいません、説明不足でした。
インデックスが英語のFULLTEXTインデックスなんです。
どんなワードがインデックスに入っているのか確認したかったのです。
stringsというコマンドでバイナリにはいっている文字列がみえるのが
わかりましたが、MYIファイルをきれいに表示する方法はないでしょうか?
ないとは思うのですが、もしあって知らなかったらとおもって聞いてしまいました。
0122nobodyさん03/06/30 12:25ID:5tKrGL8Q
データベース板できました
http://pc2.2ch.net/db/
0123nobodyさん03/07/10 00:05ID:yUDG6lLt
一個の項目をとある文字で分割して検索する事ってできますか?
splitみたいな。
no|key|
1|a,b,c|
でkeyを「,」で区切って「b」があるかどうかで検索…。
正規表現を使う事も考えましたが、できるならうれしいなっと。
0124無料動画直リン03/07/10 00:14ID:YKCrjqtm
http://homepage.mac.com/miku24/
0125nobodyさん03/07/11 01:26ID:???
>>123
key LIKE '%,b,%' OR key LIKE 'b,%' OR key LIKE '%,b'
012612503/07/11 01:30ID:???
正規表現といっているから効率は度外視。
本音を言えば「外部キーくらい正規化すれ。」
012712303/07/11 04:21ID:ET0riVu5
レス有難うございます。
「外部キーくらい正規化すれ。」 について勉強してきました。
こんな効率的なやり方思い浮かびませんでした。
そして、新たなる壁に当たりました…。
例えば、keyを別テーブルの置き、keyにbが含まれているものを検索した場合…
普通にヒットしますが、このとき、ヒットしたnoのそれ以外のキーをSELECT時に取得する事は出来るでしょうか?
ちなみに、テーブル構成はこのような感じです。
--TableA
no|省略
1 |省略
--TableB(キー)
no|key|
1 |b|
1 |a|
1にはaとbが登録されているとして、bで検索した場合、それ以外の「a」も取得できるようにしたいのです。
一生懸命検索もしたんですが、どうしても分かりませんでした(T.T)
参考サイトでも良いので誰か助けてー
012812303/07/11 08:52ID:???
noでグループ化して登録keyの「数」を取得するとこまではいけました。(countで)
が、欲しいのは中身なのれす…。
012912303/07/11 15:18ID:???
すみません、む板の方に移動してきます。
0130山崎 渉03/07/15 11:07ID:???

 __∧_∧_
 |(  ^^ )| <寝るぽ(^^)
 |\⌒⌒⌒\
 \ |⌒⌒⌒~|         山崎渉
   ~ ̄ ̄ ̄ ̄
0131nobodyさん03/07/31 19:38ID:AJvCrklt
mysql3.23.55使用してます。
テーブルを作成する時にデフォルト値を設定できますが、
NOW()をデフォルトにはできないのでしょうか。

create table member(
username varchar(60) NULL,
createdate datetime default "NOW()"
);

とし、

insert into member (username) values('AAA');

実行しても

mysql> select * from member;
+----------+---------------------+
| username | createdate |
+----------+---------------------+
| AAA | 0000-00-00 00:00:00 |
+----------+---------------------+

となり、入力した日時が入ってくれません。
どうすれば良いのでしょうか。。
0132nobodyさん03/07/31 21:57ID:VMyHT8tg
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@


http://ninkirank.misty.ne.jp/19/enter.cgi?id=okyaku

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@



.
0133nobodyさん03/08/01 02:27ID:???
>>131
それをやるなら createdate は TIMESTAMP型じゃないか?
013413103/08/01 14:23ID:???
>>133
できました!ありがとうございます。
0135nobodyさん03/08/01 17:59ID:???
MySQLってどうよ
http://pc2.2ch.net/test/read.cgi/tech/1008316065/642
から勝手に移動してきました。重複して見る方スマソ。
質問をコピペします。
↓ここから

GROUP化したタプルに現れるデータに条件付けするにはどうすればよいですか?

No ID 名前
--------------
2  a あほ
1  a ばか
3  a まぬけ

SELECT * FROM table GROUP BY ID
で取り出すとき、3つのタプルのどれが出てくるかを制御したいんです。
例えばNoの1番小さいやつ(1 a ばか)を取り出す、とか。

↑ここまで
よろしくです。
0136nobodyさん03/08/01 19:12ID:???
>>135
できないんじゃねーの
っていうか、そもそもそんなことができるDBってあるわけ?

ちなみに
http://allabout.co.jp/computer/database/closeup/CU20020307/?FM=glcct
を見ると、

SQL> select empno,ename,job,sal,deptno from emp group by job;
select empno,ename,job,sal,deptno from emp group by job
    *
1行でエラーが発生しました。
ORA-00979: GROUP BYの式ではありません


SELECTの後ろの列名にグループ化した列、集計関数で集計した列でない列を指定したために
エラーとなっている

だそうだが...。
0137nobodyさん03/08/01 20:22ID:???
>>136
やっぱできないのかなあ。
自分で調べた限りではできなかったけど、調べ方が悪いのかと思って2chを頼ってみた。

>>135が実際に必要となる場面としては、
----------------------------
UserName Date EMail Amount
----------------------------
というテーブルがあって、UserNameごとの合計金額をSUM(Amount) GROUP BY UserNameで集計しているんですけど、
その時ついでにEMailも出力しているのです。
ところが、同じUserNameでも複数のEMailが存在する場合があるんです。
その場合はDateが最新であるタプルのEMailを出力したい。

というわけだったのです(最初からこれを書いた方が分かりやすかったですね。すいません)

今は一旦UserNameを取り出して、各UserNameに対してDateが最新であるタプルのEMailを取得しているんですが
UserNameが多くなってきたので時間がかかるようになってしまいました。

何かアドバイスがあればよろしくおながいします。
0138nobodyさん03/08/02 01:50ID:???
>>137
これではだめ?
実際に試してないから、このままで実行できるかわからないけど、
テーブル名をlogとした場合、

CREATE TEMPORARY TABLE temp
AS SELECT UserName, MAX(Date) AS Date, SUM(Amount) AS Amout
FROM log GROUP BY UserName;

SELECT * FROM temp, log
WHERE temp.UserName = log.UserName AND temp.Date = log.Date;

適切なインデックスを作成してあれば、速いはず。
ただ、設計自体が間違っているような気がしないでもないが...。
0139山崎 渉03/08/02 02:22ID:???
   ∧_∧
  (  ^^ )< ぬるぽ(^^)
0140ぼるじょあ ◆ySd1dMH5Gk 03/08/02 04:50ID:???
     ∧_∧  ∧_∧
ピュ.ー (  ・3・) (  ^^ ) <これからも僕たちを応援して下さいね(^^)。
  =〔~∪ ̄ ̄ ̄∪ ̄ ̄〕
  = ◎――――――◎                      山崎渉&ぼるじょあ
0141nobodyさん03/08/02 12:08ID:???
>>138
あ、なるほど。
MAX(Date)をSELECTするとDateがMAXなタプルのEMailが取り出せるんですね。
今実験環境がないのでできませんが今度試して報告します。ありが�d。

この最新のEMailが欲しいという要望は後から出てきたので
今までのプログラムに付け足す形でやったので
>>137に書いてあるようになってしまったんです。

>ただ、設計自体が間違っているような気がしないでもないが...。
・・・うーん。特に変な設計したつもりはないんですけどねぇ。
0142nobodyさん03/08/09 06:13ID:ykXF7Sbd
MySQLのバックアップは、
/usr/local/mysql/var/
配下の目的のDBのディレクトリをコピーするだけでOKですか?
復元時は、このディレクトリを戻してやるだけで使えるのでしょうか?
何となく、乱暴すぎる気もするし…どうなんでしょう?
0143nobodyさん03/08/09 09:15ID:???
>>142
 サーバダウンが迫ってるとか緊急時はそれでおーけー
 それ以外の時は、きちんとコマンドラインからやるのが吉
0144山崎 渉03/08/15 22:39ID:???
    (⌒V⌒)
   │ ^ ^ │<これからも僕を応援して下さいね(^^)。
  ⊂|    |つ
   (_)(_)                      山崎パン
0145nobodyさん03/08/28 21:47ID:???
LIKE %A%

みたいに一文字検索って出来るのですか?
0146nobodyさん03/08/30 14:20ID:???
>>145
できる
0147nobodyさん03/09/02 15:19ID:nC941VSc
MySQLのユーザーを削除するにはどうするの?
drop user hogehoge; じゃだめだった。
マニュアル読んでも、どこにかいてあるのかさっぱり。
0148nobodyさん03/09/02 15:59ID:???
新しく作ったユーザでうまくログインできん。
パスワードありではログインできず、なしだとログインできる。
パスワードを設定したにもかかわらずだ。


## MySQLにrootでログインし、ユーザを作成する
bash$ mysql -u root -p
Enter password:

mysql> grant all on *.* to user1 identified by 'passwd1';
Query OK, 0 rows affected (0.00 sec)

mysql> exit;
Bye

## 作成したユーザでログインすると、パスワードありではログインできず、
## パスワードなしだとログインできる。なぜ?
bash$ mysql -u user1 -p
Enter password:
ERROR 1045: Access denied for user: 'user3@localhost' (Using password: YES)
bash$ mysql -u user1

mysql>

なぜ?どっか抜けてる?
0149nobodyさん03/09/02 16:11ID:???
>>148

ユーザ名だけでなくホスト名も指定する。
mysql> grant all on *.* to user1@localhost identified by 'passwd1';
mysql> grant all on *.* to user1@"%" identified by 'passwd1';
0150nobodyさん03/09/03 02:32ID:uWREVGUN
>>147
MySQLはユーザ管理をデータベースのテーブルで行っているので、
該当するユーザにマッチする行を削除する。
具体的には、

USE mysql;
DELETE FROM user WHERE User='該当ユーザ';
FLUSH PRIVILEGES;

確かにマニュアルではそれらしい記述が見つかんないな。
とは言え、ユーザ管理を自身のデータベースデーブルで行うという
MySQLのちょっと変わった部分は、MySQLの本を買えばどこにでも
出ているような内容なので、何か本買った方がいい。
0151nobodyさん03/09/03 07:25ID:???
>>150
さんくす。
そうか。やっぱり入門書かなんか買おうかな。
お勧めの本とか、逆に勧めない本とかあれば教えて。
田舎なんで、本屋にいっても置いてなくて読めないんだ。
■ このスレッドは過去ログ倉庫に格納されています