のくす牧場
コンテンツ
牧場内検索
カウンタ
総計:127,625,404人
昨日:no data人
今日:
最近の注目
人気の最安値情報

私的良スレ書庫

不明な単語は2ch用語を / 要望・削除依頼は掲示板へ。不適切な画像報告もこちらへどうぞ。 / 管理情報はtwitter
ログインするとレス評価できます。 登録ユーザには一部の画像が表示されますので、問題のある画像や記述を含むレスに「禁」ボタンを押してください。

元スレMySQL 総合 Part15

mysql スレッド一覧へ / mysql とは? / 携帯版 / dat(gz)で取得 / トップメニュー
スレッド評価: スレッド評価について
みんなの評価 :
タグ : - insertall + - mregexp + - SSD + 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。
レスフィルター : (試験中)
←前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ→ / 要望・削除依頼は掲示板へ / 管理情報はtwitter
651 : 649 - 2009/03/05(木) 07:31:31 ID:??? (+32,+5,-19)
>>650
仰る通り、sqlplusの機能でした。すみません。
該当コマンドはなさそうですか。

ありがとうございました。
652 : NAME IS - 2009/03/06(金) 13:43:03 ID:??? (+4,-30,-31)
得られた行セットに対して1から通し番号を付加するにはどうしたらいいですか?
id value
a 100
b 200
c 300
d 400
に対してwhere value >= 300して
c 1
d 2
のような結果がほしい感じです
653 : NAME IS - 2009/03/06(金) 15:05:06 ID:??? (+55,+27,-17)
順位をつけるってことか?
だったら自己結合使えば
654 : NAME IS - 2009/03/07(土) 16:58:11 ID:??? (+3,-30,-293)
すみません、質問です。

過去5年分の家計簿データがあったとします。
その5年間の年毎のトータル支出金額を抽出したいのですが、
SELECT SUM(金) FROM 家計簿テーブル GROUP BY 年
としてしまうと、
2004年 100万円
2005年 110万円
2006年 120万円
という風に抽出されますよね?
即ち、それぞれの年の1~12月までのデータが集計され、結果が出ます。

でも、こうではなくて、それぞれの年の4月~翌年3月までのデータを集計し、抽出したいのです。
2004年度 100万円
2005年度 110万円
2006年度 120万円
のような感じでしょうか。

'2008-04' <= DATE_FORMAT(年月日, '%Y-%m') AND DATE_FORMAT(年月日, '%Y-%m') <= '2009-03'

とかすると年度の集計はできますが、過去のデータの全ては抽出できず困っております。

何か良いアプローチがあればご教授の程宜しくお願い致します。
655 : NAME IS - 2009/03/07(土) 18:29:52 ID:??? (+32,+0,-2)
年じゃなくて年度で入れる
656 : NAME IS - 2009/03/07(土) 19:19:29 ID:??? (+62,+29,-34)
>>655
ありがとうございます。

まず月だけ抜き取って3以下なら無理やり年を前年に書き換える形で対応できました。
657 : NAME IS - 2009/03/07(土) 22:23:28 ID:??? (-1,-29,-9)
>>652
こんなのはどう?
set @c=0;
select id,@c:=@c+1 from hoge where value >=300;
658 : NAME IS - 2009/03/11(水) 21:45:07 ID:??? (+17,-30,-21)
MySQL5.1.32ですが、おもにphpmyadminでの操作ですが
テーブルT1のid(INT)に一気に1から500までの数字を入れる方法を
教えてください。
659 : NAME IS - 2009/03/11(水) 22:06:39 ID:??? (-2,-29,-8)
>>658ですが
SET @id =0;
SELECT p_id, @id := @id +1
FROM T4
WHERE p_id <=500;
だと書きこまれません
660 : NAME IS - 2009/03/11(水) 22:43:47 ID:??? (-1,-30,-10)
>>658ですが、訂正です
SET @id =0;
SELECT p_id, @id := @id +1
FROM T1
WHERE p_id <=500;
だと書きこまれません
662 : NAME IS - 2009/03/12(木) 05:44:27 ID:??? (-1,-29,-1)
なんでINSERTしないでSELECTしてるの?
663 : NAME IS - 2009/03/12(木) 07:34:43 ID:??? (+3,-30,-47)
>>658です。
すんませんコピペ間違いでした。
SET @a =0;
INSERT INTO T4 (p_id,id,res_time,flag,time_stamp)
SELECT p_id, (@a := @a +1) as id,res_time,flag,time_stamp
FROM T4 WHERE p_id <=500;
「SQL は正常に実行されました」
「戻り値は0でした」というメッセージがでます。

664 : NAME IS - 2009/03/12(木) 08:11:09 ID:??? (+56,+29,-19)
オートインクリメントなら別にいらなくね?
665 : NAME IS - 2009/03/12(木) 08:29:24 ID:hVykgf0t (-13,+29,-4)
>>664
いらないって、何がですか?
666 : NAME IS - 2009/03/12(木) 09:38:26 ID:??? (+54,+26,-9)
やりたいことがさっぱりわからん
500レコードはすでに入っていて、id列だけを更新するってこと?
668 : NAME IS - 2009/03/12(木) 10:39:35 ID:??? (+4,-30,-40)
元が0件だったら
INSERT INTO T4 SELECT FROM T4
したって何も起こらないでしょう?

で、phpMyAdminと10分ほど戯れたけどちょっと無理だと思った。

ストアド作ってphpMyAdminから叩くか、
元データ用意してLOAD DATA INFILEするか、
普通にプログラム書いてINSERTするか
だと思う
669 : NAME IS - 2009/03/12(木) 12:45:33 ID:??? (+64,+29,-67)
あるフィールド(INT型で同じものはない)に、
1、2、3、5、6…というようにレコードがあるのですが、
その中でぬけている一番小さい整数、ここでは、4になりますが、
これを見つけるのに効率のよい方法はどのようなものがあるでしょうか。

接続型アクセスでやっているので、1から順にループさせると、数が多く
なったときに大変だ と思いまして…。
670 : NAME IS - 2009/03/12(木) 13:07:25 ID:??? (+3,-30,-33)
set @a = 0;
select val from (select @a := @a + 1 val, id from tbl order by id) tbl_v where val != id limit 1;

あまり自信はないけど
671 : NAME IS - 2009/03/12(木) 13:26:59 ID:??? (+11,-30,-27)
>>669
自分自身と差分取ればいいよ
SELECT chiko+1 FROM unko WHERE chiko NOT IN (SELECT chinko-1 FROM unko) LIMIT 1;
672 : NAME IS - 2009/03/12(木) 13:52:05 ID:??? (+3,-30,-157)
select
 min(R.VAL) + 1
from
 (select VAL from T
  union select 0 as VAL from dual) R
where
 not exists (
  select * from T S
  where S.VAL = R.VAL + 1
 )
and
 R.VAL != (select max(VAL) from T)

FROM句のサブクエリーのunion以降は(整数列の開始値-1)。
例えば開始値が0なら「union select -1 as VAL from dual」とする。
開始値関係なく単に整数列の歯抜けをチェックしたいのならfrom句の
サブクエリーは取っ払ってfrom T Rとすればよい。
調べたいカラムにはindexはっとくように。
673 : NAME IS - 2009/03/12(木) 14:29:38 ID:??? (+57,+29,-20)
ありがとうございます。
やはり、こういう事を思いつくというのは、経験でしょうか…。

これから、実験してみます。
674 : NAME IS - 2009/03/12(木) 15:31:01 ID:??? (+58,+29,-6)
カラムa, b, cが重複しているレコードを自分自身のテーブルから見つけるにはどうすればいいか教えて下さい
675 : NAME IS - 2009/03/12(木) 15:33:26 ID:??? (+4,-30,-154)
各ユーザーにアクセスするホストを追加しようと思っているのですが、
各ユーザーのパスワードがわからないためどうしようか迷っています。
IP帯とかではなく、IPだけを増やしたいんですが、良い方法はないでしょうか。

mysql.user内のユーザーをコピーして、ipアドレスを変更して追加し、
mysql.db内にも同様にipアドレスを変更したものを追加してみたのですが、
うまくいきません。

ユーザーをダミーのパスワードで追加し(grantコマンド)、パスワードの部分を前のIPのものに変更
すると大丈夫なのですが、上記の二つのテーブルを変更しただけじゃだめなんでしょうか?

flush privileges; はやっています。

676 : NAME IS - 2009/03/12(木) 16:53:09 ID:??? (+5,-30,-20)
>>674
select a, b, c from table_name group by a, b, c having count(a) > 1;
677 : NAME IS - 2009/03/12(木) 17:13:48 ID:??? (+4,-30,-61)
>>675
そんなはずないだろうと思って試してみたら、フツーにできたよ。
mysql.userのレコード追加とflush privilegesで接続確認できた。
もちろんmysql.dbにレコードないと、information_schemaとtestしか参照できないけど。
678 : NAME IS - 2009/03/12(木) 17:43:59 ID:??? (-1,-29,-31)
>>677

phpMyAdminからだと出来ませんでした。。。
直接叩いたら出来ました。ありがとうございます!
679 : NAME IS - 2009/03/12(木) 21:22:44 ID:??? (+3,-30,-203)
>>668
>>658です。
ストアドしてみました。結果phpMyAdminから実行できました。

//500レコード作成
DELIMITER $$
DROP PROCEDURE IF EXISTS display$$
CREATE PROCEDURE CreateNo(no int)
BEGIN
DECLARE counter INT DEFAULT 0;
simple_loop: LOOP
SET counter=counter+1;
INSERT INTO T4 (id) VALUES(counter);
IF counter=no THEN
LEAVE simple_loop;
END IF;
END LOOP simple_loop;
END$$
DELIMITER ;
call CreateNo(500);

//削除
TRUNCATE table T4;
680 : NAME IS - 2009/03/12(木) 22:01:34 ID:??? (+65,+29,-6)
>>658
やればできる子だったのか
ちょっと感心した
681 : NAME IS - 2009/03/12(木) 22:17:54 ID:??? (+64,+29,-16)
>>680
>>658です。
遠回りばかりしていますが
がんばります。
よろしくおねがいします。
683 : NAME IS - 2009/03/13(金) 14:00:25 ID:??? (-10,-30,-27)
InnoDBでトランザクションを使えばOK
begin;
insert ...
insert ...
insert ...
commit;
684 : NAME IS - 2009/03/13(金) 14:28:57 ID:??? (+57,+29,-55)
トランザクションの解説書に出てきそうなくらいの典型例すぎる…。
俺ら試されてるのかとも思ったぞw
686 : NAME IS - 2009/03/13(金) 16:48:32 ID:??? (-1,-29,-8)
それはさすがに
mysql_query begin php
で一回ぐぐってくるべき
687 : NAME IS - 2009/03/13(金) 19:46:55 ID:t21kErVu (-28,+26,-12)
ググったら分かった。
688 : NAME IS - 2009/03/15(日) 01:40:15 ID:??? (+67,+29,-24)
トランザクション使うと、インサートの速度はどの位落ちますかね?

innodbの時点で比べ物にならないんじゃ無いかと思って
避けてしまっている自分がいます…
689 : NAME IS - 2009/03/15(日) 05:49:24 ID:??? (+48,+25,-1)
測ればいいじゃん
690 : NAME IS - 2009/03/15(日) 09:33:30 ID:??? (-1,-29,-19)
MyISAM:INSERTごとにディスクに書き込む
InnoDB:COMMITのときにまとめて書く
なので上手な人がチューニングすればトランザクション使ったほうが速い
691 : NAME IS - 2009/03/15(日) 09:44:44 ID:??? (+57,+29,-5)
チューニングも何も、ある程度の量以上なら普通にトランザクションのが速い
692 : NAME IS - 2009/03/15(日) 14:49:59 ID:??? (+57,+29,-5)
688ですが、多分僕が気にしすぎなんでしょうね。
今度テストでもしてみます。
ありがとうございました。
693 : NAME IS - 2009/03/15(日) 15:04:42 ID:??? (+81,+30,-132)
なんか初めてっぽい人ほど変なところで速度を気にする傾向が
ある気がする。>>688もそうだし初めてのスキーマ設計っぽいのに
ジョインすると速度が遅くなるから云々いう人とか。

素人考えで下手に小細工を試みるよりはまずちゃんと正規化もして
トランザクション等DBに備わる標準的な機能を使って実装した方が
とりあえず速度は出る。そういう風にRDBMSは設計されている。
パフォーマンスチューニングはその後に心配した方がよい。
694 : NAME IS - 2009/03/15(日) 16:16:02 ID:??? (+68,+29,-24)
>>693
確かにそうですよね。
大体webの場合、そこまでパフーマンスが問題になる事は稀ですしね。
695 : NAME IS - 2009/03/15(日) 21:05:37 ID:??? (-1,-29,-24)
mysql のコマンドプロンプトで何を入力しても

'>
'>
'>


っていう状態になってしまったんですが、この状態から脱出するにはどうしたいいんでしょうか。
696 : NAME IS - 2009/03/15(日) 21:33:40 ID:??? (-11,-29,+0)
' を入れる

697 : NAME IS - 2009/03/16(月) 02:27:55 ID:??? (+15,-30,-139)
質問です。
PHP+MySQLでタグ検索実装を考えています。

blogテーブル内のtagsというキーに、以下のような文字列データを格納しています。

1: PHP,MySQL
2: PHP5,CakePHP
3: PHP,Smarty

ここで、「PHP」で検索したときは、完全一致する1と3だけが返ってくるようにしたいのです。
処理をPHPに任せれば、正規表現等で行けると思うのですが、スマートにMySQLだけで処理できればと考えています。

どなたかよろしくお願いします。
698 : NAME IS - 2009/03/16(月) 04:08:50 ID:??? (+25,-4,+0)
>>697
正規化
699 : NAME IS - 2009/03/16(月) 08:42:37 ID:Y73NIwKY (+31,+29,-47)
自宅鯖と開発マシンがあるんだけど
鯖にあるDBのレコードに開発マシンにあるレコードを加えたい。
重複しているレコードは入れずに、開発マシンにだけ入っているレコード移したいんですが
どうやるのが一番簡単ですか?

ようするに双方のレコード足したいんですけど。
700 : NAME IS - 2009/03/16(月) 08:48:10 ID:??? (+2,-29,-8)
>>699
primaryで重複しているなら、単にINSERTすればいいかと
←前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ→ / 要望・削除依頼は掲示板へ / 管理情報はtwitterで / mysql スレッド一覧へ
スレッド評価: スレッド評価について
みんなの評価 :
タグ : - insertall + - mregexp + - SSD + 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。

類似してるかもしれないスレッド


トップメニューへ / →のくす牧場書庫について