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

みんなの評価 : ☆
レスフィルター : (試験中)
得られた行セットに対して1から通し番号を付加するにはどうしたらいいですか?
id value
a 100
b 200
c 300
d 400
に対してwhere value >= 300して
c 1
d 2
のような結果がほしい感じです
id value
a 100
b 200
c 300
d 400
に対してwhere value >= 300して
c 1
d 2
のような結果がほしい感じです
すみません、質問です。
過去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'
とかすると年度の集計はできますが、過去のデータの全ては抽出できず困っております。
何か良いアプローチがあればご教授の程宜しくお願い致します。
過去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'
とかすると年度の集計はできますが、過去のデータの全ては抽出できず困っております。
何か良いアプローチがあればご教授の程宜しくお願い致します。
MySQL5.1.32ですが、おもにphpmyadminでの操作ですが
テーブルT1のid(INT)に一気に1から500までの数字を入れる方法を
教えてください。
テーブルT1のid(INT)に一気に1から500までの数字を入れる方法を
教えてください。
>>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でした」というメッセージがでます。
すんませんコピペ間違いでした。
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
いらないって、何がですか?
いらないって、何がですか?
やりたいことがさっぱりわからん
500レコードはすでに入っていて、id列だけを更新するってこと?
500レコードはすでに入っていて、id列だけを更新するってこと?
元が0件だったら
INSERT INTO T4 SELECT FROM T4
したって何も起こらないでしょう?
で、phpMyAdminと10分ほど戯れたけどちょっと無理だと思った。
ストアド作ってphpMyAdminから叩くか、
元データ用意してLOAD DATA INFILEするか、
普通にプログラム書いてINSERTするか
だと思う
INSERT INTO T4 SELECT FROM T4
したって何も起こらないでしょう?
で、phpMyAdminと10分ほど戯れたけどちょっと無理だと思った。
ストアド作ってphpMyAdminから叩くか、
元データ用意してLOAD DATA INFILEするか、
普通にプログラム書いてINSERTするか
だと思う
あるフィールド(INT型で同じものはない)に、
1、2、3、5、6…というようにレコードがあるのですが、
その中でぬけている一番小さい整数、ここでは、4になりますが、
これを見つけるのに効率のよい方法はどのようなものがあるでしょうか。
接続型アクセスでやっているので、1から順にループさせると、数が多く
なったときに大変だ と思いまして…。
1、2、3、5、6…というようにレコードがあるのですが、
その中でぬけている一番小さい整数、ここでは、4になりますが、
これを見つけるのに効率のよい方法はどのようなものがあるでしょうか。
接続型アクセスでやっているので、1から順にループさせると、数が多く
なったときに大変だ と思いまして…。
set @a = 0;
select val from (select @a := @a + 1 val, id from tbl order by id) tbl_v where val != id limit 1;
あまり自信はないけど
select val from (select @a := @a + 1 val, id from tbl order by id) tbl_v where val != id limit 1;
あまり自信はないけど
>>669
自分自身と差分取ればいいよ
SELECT chiko+1 FROM unko WHERE chiko NOT IN (SELECT chinko-1 FROM unko) LIMIT 1;
自分自身と差分取ればいいよ
SELECT chiko+1 FROM unko WHERE chiko NOT IN (SELECT chinko-1 FROM unko) LIMIT 1;
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はっとくように。
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はっとくように。
ありがとうございます。
やはり、こういう事を思いつくというのは、経験でしょうか…。
これから、実験してみます。
やはり、こういう事を思いつくというのは、経験でしょうか…。
これから、実験してみます。
カラムa, b, cが重複しているレコードを自分自身のテーブルから見つけるにはどうすればいいか教えて下さい
各ユーザーにアクセスするホストを追加しようと思っているのですが、
各ユーザーのパスワードがわからないためどうしようか迷っています。
IP帯とかではなく、IPだけを増やしたいんですが、良い方法はないでしょうか。
mysql.user内のユーザーをコピーして、ipアドレスを変更して追加し、
mysql.db内にも同様にipアドレスを変更したものを追加してみたのですが、
うまくいきません。
ユーザーをダミーのパスワードで追加し(grantコマンド)、パスワードの部分を前のIPのものに変更
すると大丈夫なのですが、上記の二つのテーブルを変更しただけじゃだめなんでしょうか?
flush privileges; はやっています。
各ユーザーのパスワードがわからないためどうしようか迷っています。
IP帯とかではなく、IPだけを増やしたいんですが、良い方法はないでしょうか。
mysql.user内のユーザーをコピーして、ipアドレスを変更して追加し、
mysql.db内にも同様にipアドレスを変更したものを追加してみたのですが、
うまくいきません。
ユーザーをダミーのパスワードで追加し(grantコマンド)、パスワードの部分を前のIPのものに変更
すると大丈夫なのですが、上記の二つのテーブルを変更しただけじゃだめなんでしょうか?
flush privileges; はやっています。
>>674
select a, b, c from table_name group by a, b, c having count(a) > 1;
select a, b, c from table_name group by a, b, c having count(a) > 1;
>>675
そんなはずないだろうと思って試してみたら、フツーにできたよ。
mysql.userのレコード追加とflush privilegesで接続確認できた。
もちろんmysql.dbにレコードないと、information_schemaとtestしか参照できないけど。
そんなはずないだろうと思って試してみたら、フツーにできたよ。
mysql.userのレコード追加とflush privilegesで接続確認できた。
もちろんmysql.dbにレコードないと、information_schemaとtestしか参照できないけど。
>>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;
>>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;
InnoDBでトランザクションを使えばOK
begin;
insert ...
insert ...
insert ...
commit;
begin;
insert ...
insert ...
insert ...
commit;
トランザクションの解説書に出てきそうなくらいの典型例すぎる…。
俺ら試されてるのかとも思ったぞw
俺ら試されてるのかとも思ったぞw
トランザクション使うと、インサートの速度はどの位落ちますかね?
innodbの時点で比べ物にならないんじゃ無いかと思って
避けてしまっている自分がいます…
innodbの時点で比べ物にならないんじゃ無いかと思って
避けてしまっている自分がいます…
MyISAM:INSERTごとにディスクに書き込む
InnoDB:COMMITのときにまとめて書く
なので上手な人がチューニングすればトランザクション使ったほうが速い
InnoDB:COMMITのときにまとめて書く
なので上手な人がチューニングすればトランザクション使ったほうが速い
688ですが、多分僕が気にしすぎなんでしょうね。
今度テストでもしてみます。
ありがとうございました。
今度テストでもしてみます。
ありがとうございました。
なんか初めてっぽい人ほど変なところで速度を気にする傾向が
ある気がする。>>688もそうだし初めてのスキーマ設計っぽいのに
ジョインすると速度が遅くなるから云々いう人とか。
素人考えで下手に小細工を試みるよりはまずちゃんと正規化もして
トランザクション等DBに備わる標準的な機能を使って実装した方が
とりあえず速度は出る。そういう風にRDBMSは設計されている。
パフォーマンスチューニングはその後に心配した方がよい。
ある気がする。>>688もそうだし初めてのスキーマ設計っぽいのに
ジョインすると速度が遅くなるから云々いう人とか。
素人考えで下手に小細工を試みるよりはまずちゃんと正規化もして
トランザクション等DBに備わる標準的な機能を使って実装した方が
とりあえず速度は出る。そういう風にRDBMSは設計されている。
パフォーマンスチューニングはその後に心配した方がよい。
mysql のコマンドプロンプトで何を入力しても
'>
'>
'>
っていう状態になってしまったんですが、この状態から脱出するにはどうしたいいんでしょうか。
'>
'>
'>
っていう状態になってしまったんですが、この状態から脱出するにはどうしたいいんでしょうか。
質問です。
PHP+MySQLでタグ検索実装を考えています。
blogテーブル内のtagsというキーに、以下のような文字列データを格納しています。
1: PHP,MySQL
2: PHP5,CakePHP
3: PHP,Smarty
ここで、「PHP」で検索したときは、完全一致する1と3だけが返ってくるようにしたいのです。
処理をPHPに任せれば、正規表現等で行けると思うのですが、スマートにMySQLだけで処理できればと考えています。
どなたかよろしくお願いします。
PHP+MySQLでタグ検索実装を考えています。
blogテーブル内のtagsというキーに、以下のような文字列データを格納しています。
1: PHP,MySQL
2: PHP5,CakePHP
3: PHP,Smarty
ここで、「PHP」で検索したときは、完全一致する1と3だけが返ってくるようにしたいのです。
処理をPHPに任せれば、正規表現等で行けると思うのですが、スマートにMySQLだけで処理できればと考えています。
どなたかよろしくお願いします。
>>697
正規化
正規化
自宅鯖と開発マシンがあるんだけど
鯖にあるDBのレコードに開発マシンにあるレコードを加えたい。
重複しているレコードは入れずに、開発マシンにだけ入っているレコード移したいんですが
どうやるのが一番簡単ですか?
ようするに双方のレコード足したいんですけど。
鯖にあるDBのレコードに開発マシンにあるレコードを加えたい。
重複しているレコードは入れずに、開発マシンにだけ入っているレコード移したいんですが
どうやるのが一番簡単ですか?
ようするに双方のレコード足したいんですけど。
>>699
primaryで重複しているなら、単にINSERTすればいいかと
primaryで重複しているなら、単にINSERTすればいいかと



類似してるかもしれないスレッド
- MySQL 総合 Part12 (1001) - [94%] - 2008/1/30 17:34 ○
- MySQL 総合 Part25 (947) - [94%] - 2017/6/18 6:30
- MySQL 総合 Part13 (996) - [94%] - 2008/6/10 21:02 ☆
- MySQL 総合 Part14 (1001) - [94%] - 2008/11/23 10:17 ☆
- MySQL 総合 Part17 (1001) - [94%] - 2010/6/10 20:47 ○
- MySQL 総合 Part18 (986) - [94%] - 2011/1/17 15:46
- MySQL 総合 Part19 (982) - [94%] - 2011/6/9 2:33
- MySQL 総合 Part26 (860) - [89%] - 2023/2/2 9:30
- MySQL 総合 Part20 (995) - [89%] - 2011/10/17 4:48
- MySQL 総合 Part21 (1001) - [89%] - 2011/12/25 22:16
- MySQL 総合 Part22 (1001) - [89%] - 2012/7/10 16:45
- MySQL 総合 Part23 (992) - [89%] - 2013/8/11 17:00
- MySQL 総合 Part24 (1010) - [89%] - 2015/2/14 4:46
- MySQL vs PostgreSQL Part2 (941) - [31%] - 2022/5/26 1:30 ○
トップメニューへ / →のくす牧場書庫について