MySQL 総合 Part5

このエントリーをはてなブックマークに追加
939NAME IS NULL:2005/11/21(月) 02:38:34 ID:???
>>937
サブクエリはいらんと思うが。。。

select
name, coalesce(sum(uriage), 0) as uriage
from mastertb
left outer join uriagetb on mastertb.id = uriagetb.id
where name like 'AAA%'
group by mastertb.id;
940937:2005/11/21(月) 03:01:36 ID:???
>>939さん
ありが追うございます。
ごめんなさい、説明間違えました。。。
keywordtb.keywordがxxxで始まるIDごとの売り上げがほしいのですが、
keywordtbレコード数×uriagetb レコード数分合計が出てしまい、
計算が合いません。

@matsertb     Akeywordtb
id name      id keyword
---------      -------------------
1  aaa001     1 xxx0001
2  aaa002     1 xxx0002
3  bbb001     1 xxx0003
4  bbb002     2 yyy0001
5  aaa003     3 xxx0001
            3 xxx0002
Auriagetb
id tuki uriage
----------------
1  10   100
1  11   200
2  10   300
3  11   400
4  11   500
5  10   600
5  11   700


B結果
a.name b.uriage
------------------
aaa001 300
bbb001 400

941NAME IS NULL:2005/11/21(月) 11:28:16 ID:kgOtiYdS
MySQL5,1っていつ頃出るか皆目見当つきませんか?
942NAME IS NULL:2005/11/21(月) 12:15:24 ID:???
idc1c2c3
10013
1012
102123



idc
1001
1003
1012
1021
1022
1033

このようにテーブルを変換したいのですが、
どのようにSQLを書けばいいのでしょうか?
943NAME IS NULL:2005/11/21(月) 12:30:49 ID:???
>>942
スペースが除去されてしまって、カラムの区切り位置が判りませぬ
944NAME IS NULL:2005/11/21(月) 12:55:02 ID:???
>>943
すみません。


id c1 c2 c3
100 1 3
101 2
102 1 2 3



id c
100 1
100 3
101 2
102 1
102 2
103 3


です。
945NAME IS NULL:2005/11/21(月) 16:13:39 ID:STvFOXar
>>931
Mysqlが使えるところでも、
PerlのDBIモジュールがなぜか
入ってないところがあるからかなぁ?
phpの構築優先、Perlは2の次って感じかも。

おいらはPerlでも使ってるけど。
946NAME IS NULL:2005/11/21(月) 17:14:00 ID:TgU/MA2m
キャラクターセットを調べるコマンドってありますか?
utf8やlatin1などと出てくると思うのですが
947NAME IS NULL:2005/11/21(月) 21:21:18 ID:???
>>945
PHP4はデフォでMySQLが使えるけど、PerlはCPANからインスコしないといけないからかな。
PHP5ではSQLiteに変更になっちゃったけど。
948NAME IS NULL:2005/11/21(月) 21:59:13 ID:STvFOXar
>>947
なるほど、PHPは最初から使えたのね。
949940:2005/11/22(火) 00:24:22 ID:???
自己解決。
上のほうで出ていたTemporaryTableが意外と難しくなかったため、そちらで回避しました。
どうもありがとうございました。
950930:2005/11/22(火) 01:28:00 ID:???
>>935
ほんとだ。
Pearからquery("SHOW TABLE STATUS LIKE 'テーブル名'")
でヘッダが取得できた。こりゃ便利だ
951NAME IS NULL:2005/11/22(火) 08:04:17 ID:???
>>950
SHOW に限らず結果セットを返してくる SQL 文は
全部 SELECT と同じように使えるよ。
952NAME IS NULL:2005/11/22(火) 19:58:44 ID:???
すみません、英語のマニュアル等をみたり、ググってみても
ちょっと見つからなかったので質問させていただきます。

当方phpMyAdmin 2.7.0-beta1+MySQL 5.0.15(win版)を
WinXpProで稼動しているのですが、phpMyAdminの画面で
ビューならびに、トリガー、ストアドプロシージャの作成は
SQLコマンド画面から直接コマンドを送る以外に、GUI操作
で簡単に作成できるような機能はまだ実装されていないの
でしょうか?

また同様に外部キーの設定もSQLコマンドを直接送るしか
ないのでしょうか?
953NAME IS NULL:2005/11/22(火) 20:47:53 ID:???
>>944
これだ゛れかおしえてください。
954NAME IS NULL:2005/11/23(水) 00:52:40 ID:???
>>944
ビューってより、テーブルを作り替えるってことでしょうか?
955NAME IS NULL:2005/11/23(水) 01:12:18 ID:???
>>944
新しくテーブルを作ればよいの?
create table t2 select id,c1 from t where c1 is not null
union select id,c2 from t where c2 is not null
union select id,c3 from t where c3 is not null;
956940:2005/11/23(水) 01:14:35 ID:YAMI2oR6
>>953
苦肉の策ですが。

create temporary table tmptb
(id varchar(3) ,
cvarchar(1) ,
PRIMARY KEY (id , c )
);
insert into tmptb select id as id , c1 as c from tb1 where c1 != "" ;
insert into tmptb select id as id , c2 as c from tb1 where c2 != "";
insert into tmptb select id as id , c3 as c from tb1 where c3 != "";
select * from tmptb order by id , c;
957940:2005/11/23(水) 01:18:15 ID:???
>>955
スマートですね。。
958NAME IS NULL:2005/11/23(水) 13:41:37 ID:???
>>954-956
テンポラリーなテーブルを作らずに、任意のcを抽出したいのですが、
素直に最初のテーブルの状態で

c1=1 or C2=1 or ....

とやるのがいいのでしょうか?
それともテンポラリーなテーブル作った方がいいでしょうか?
959NAME IS NULL:2005/11/23(水) 13:59:14 ID:???
>>958
それで用が足りるならそれでいいんでは?
960NAME IS NULL:2005/11/23(水) 17:27:11 ID:zX9bGfyz
PHP使ってDBの負荷を観測しようかと考えてるのですが…

Questions,7967029
Uptime,53941

QuestionsをUptimeで割れば混雑具合が分かるのでしょうか?
961NAME IS NULL:2005/11/23(水) 17:29:27 ID:???
>>959
いや、元々はc1からc5まであって、
抽出するときの条件が複数になるから、
二つめの形になったものをSELCTしたほうが簡単に書けるかなと思って。
962NAME IS NULL:2005/11/24(木) 02:52:48 ID:Y4TFTONw
txtファイルを再度インポートした際に上書き?できるようにしたいのですが
どういった方法がありますか?

name
-----
a←
b← のデータに上書きするような感じです
c←
↓に追加されるのでなく


963NAME IS NULL:2005/11/24(木) 07:57:29 ID:???
>>962
nameをuniqueにして、insertの代わりにreplaceを使う
964NAME IS NULL:2005/11/24(木) 22:04:51 ID:???
SELECT id,fa,mmc FROM tb WHERE id=1
UNION
SELECT id,fa,mmc FROM tbORDER BY mmc LIMIT 100, 30;
100は可変

id=1と、100番目から30個取得したい場合、2回SELECTするしかないのでしょうか?
また、上の場合id=1の行がかならず先頭に来ることは保証されていますか?
965NAME IS NULL:2005/11/25(金) 01:19:34 ID:???
phpとmysqldが別のサーバにインストールされている場合
php mysql間の通信は暗号化されているのでしょうか。
966NAME IS NULL:2005/11/25(金) 02:07:47 ID:ECnAQf/t
| 何について調べますか?
| ┌────────────┐
| | お前を消す方法       |
| |                  |
| └────────────┘
| [ オプション(O) ]   [ 検索(S) ]
|
`──────────┐ ┌───
           , '´l,  ..| ./
       , -─-'- 、i_  |/
    __, '´       ヽ、
   ',ー-- ●       ヽ、
    `"'ゝ、_          ',
      〈`'ー;==ヽ、〈ー- 、 !
       `ー´    ヽi`ヽ iノ
                ! /
              r'´、ヽ
              `´ヽノ



           , '´l,
       , -─-'- 、i_
      , '´○ _ ○  ヽ、
      i    /  |     ヽ、
       ゝ ├-┤       ',
      〈`'ー;==ヽ、〈ー- 、 !
       `ー´    ヽi`ヽ iノ
                ! /
              r'´、ヽ
              `´ヽノ
967NAME IS NULL:2005/11/25(金) 03:25:23 ID:pnUQMbxe
Acsessでlinux上のmysqlに接続ってできますか?
968NAME IS NULL:2005/11/25(金) 04:38:54 ID:pnUQMbxe
できるみたいでした。スレ汚しすいませんでした
969NAME IS NULL:2005/11/25(金) 09:53:43 ID:???
>>965
されてない。必要なら自分でSSL噛ますようにしないと駄目。
その手のドキュメントが存在した気がする。
970NAME IS NULL:2005/11/25(金) 10:00:43 ID:JqnBQ7af
以下のようなSQL文で、
日付の比較に時間がかかっています。

select * from aaa where start <= '2005-11-25'
and end >= '2005-11-25'

チューニングする方法はあるでしょうか?

971NAME IS NULL:2005/11/25(金) 13:40:58 ID:???
インデックス張るとか
972NAME IS NULL:2005/11/25(金) 18:23:30 ID:???
>>970
'2005-11-25' をキャストしたった方が速い様な気も
するけど、MySQLが最適化してる気もする。
 あと出てくる2つの日付はいつも同じ?
なら ... and end>=start のが速そうですね
973NAME IS NULL:2005/11/25(金) 19:38:05 ID:???
end >= start と end >= '2005-11-25' は全然意味が違うと思うのだが。
974NAME IS NULL:2005/11/25(金) 20:57:04 ID:???
諸兄には余りに初歩的なのかも知れませんが一つ教えて。現在Win版で勉強中なんですけど、
Linuxにインストールしてwinのクライアントから日本語データを入れる場合って日本語の設定ってどうするの?
975NAME IS NULL:2005/11/25(金) 22:53:24 ID:???
mysql のアップグレードに失敗してどういう訳か再インストールもままならず、
mysqlhotcopy なども利用できないのでしょうがなくとりあえず
データベース用のディレクトリをそのままバックアップして OS の再インストールをしたいと考えてます。

使っていたバージョンは MySQL 3 でして、 OS 再インストール時には ver 4 以降を利用したいと思っているのですが
この場合データベース用のディレクトリをそのままコピー&ペーストでテーブルの完全な引継ぎは可能でしょうか?

どなたか教えてください。
976NAME IS NULL:2005/11/26(土) 06:12:34 ID:???
サブクエリーを使わずに「集計してから結合」ってできます?


select 社員マスタ.入社年度, 社員マスタ.氏名, a.時数計, a.売上計
from
(SELECT 社員ID, Sum(時数) AS 時数計, Sum(売上額) AS 売上計
FROM 売上データ
WHERE 日付 Between '3/1/2001' And '3/31/2001' group by 社員ID) as a

left join 社員マスタ on 社員マスタ.社員ID = a.社員ID order by 社員マスタ.
入社年度

こーいうことがしたいんですけど、ウチの鯖のMySQLは4.0.26なんですよね・・・・
結合してから集計だとどうやっても集計が何重も無駄に重なって正しくカウントされない(´д`)
977NAME IS NULL:2005/11/26(土) 06:58:58 ID:2dGwNsu1
xamppでphpMyAdminとMySQL5.0をインストールしました。
phpMyAdminのキャラクタセットをeuc-jpにしたいのですが、
$cfg['DefaultLang'] = 'ja-euc';
$cfg['DefaultCharset'] = 'euc-jp';
と変更しても、選択メニューにutf-8しか出てきません。
これは「4.1以上はutf-8しか想定してません」という意味でしょうか?
いっそutf-8で使おうかとも思うのですが問題はないものでしょうか?
978NAME IS NULL:2005/11/26(土) 08:16:51 ID:???
>>977
SET NAMES ? などでクライアント側エンコーディングを指定すると
サーバー側エンコーディングを使って SELECT 時に
自動変換されるので特に問題ない
979NAME IS NULL:2005/11/26(土) 13:23:50 ID:igepm8sw
0で始まる9桁の数字をchar型で入れようとしても
最初の0が抜けて入ります。
解決方法教えてください。エロいひと。
980NAME IS NULL:2005/11/26(土) 13:41:28 ID:???
>>979
INSERTする時、' で囲っていないとか。

INSERT INTO t VALUES(003) → 3 が書き込まれる
INSERT INTO t VALUES('003') → 003 が書き込まれる
981NAME IS NULL:2005/11/26(土) 14:12:42 ID:igepm8sw
>>980
それで解決しました!
どうもありがとうございました。
982NAME IS NULL:2005/11/26(土) 14:32:59 ID:???
>>979
000000001が00000001になるのかと思ったよ。
983NAME IS NULL:2005/11/26(土) 21:09:10 ID:???
>>960-976の質問にも答えてください(><)
984NAME IS NULL:2005/11/27(日) 00:48:24 ID:???
>>979
0フィルってのも楽でいいよ
985NAME IS NULL:2005/11/27(日) 02:51:39 ID:???
http://www.mysql.gr.jp/frame/modules/bwiki/index.php?FAQ

ここマジで役に立つね
文字化け問題でストレスたまりまくりだったけど
何とかまともに動くよーになった
作った人たちに感謝
986NAME IS NULL:2005/11/27(日) 14:44:16 ID:???
mysql4.1.13でtextでフィールド作るとblobになっちゃうのはなぜ?
987NAME IS NULL:2005/11/27(日) 17:34:33 ID:qkh6/+hT
MySQL 5.0.16-nt(Windows版)で、VARCHARに英数字だと
正常に挿入できるのに日本語をINSERTしようとすると、
ERROR 1406 (22001): Data too long for column 'str' at row 1
と言うエラーが出てINSERTに失敗するのですが、解決策は無いのでしょうか?
全部TINYBLOBとかで解決するのはあまりにも悔しい…。

ちなみに、「show variables like 'char%'」の結果は
character_sets_dirを除いて全てutf8です。
988NAME IS NULL