質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

phpMyAdmin

phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

MariaDB

MariaDBは、MySQL派生のオープンソースなリレーショナルデータベースシステムです。 また、MySQLとほぼ同じデータベースエンジンに対応しています。

Q&A

解決済

1回答

856閲覧

【MariaDB】(phpMyadmin)ソートして二行目のデータのみを更新したい。

jagaimo300

総合スコア20

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

phpMyAdmin

phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

MariaDB

MariaDBは、MySQL派生のオープンソースなリレーショナルデータベースシステムです。 また、MySQLとほぼ同じデータベースエンジンに対応しています。

0グッド

0クリップ

投稿2020/10/27 05:45

#前提
・phpMyadmin(MySQL 15.1 Distrib 10.4.14-MariaDB, for Win64)
・使用環境Windows10 Home XAMPP
・Perlでクエリを実行する

##状況把握
Perlで計算した値を既存のデータベースにアップロードする。
WHEREでid指定などは不可

条件
regist-dateが最新のものから4番目の行(ここで言う)id=3の行のcntの値を3にする

##テーブルの例
テーブル名 graph-data

idregist-datecnt
12020-5-152
22020-6-283
32020-8-151
42020-9-152
52020-10-288
62020-11-151

データ型
id → int(10)
regist-date → date
cnt → int(10)

このテーブルを、、

__行をregist-dateが新しい順にこう並べ替え、__

idregist-datecnt
62020-11-151
52020-10-288
42020-9-152
32020-8-151
22020-6-283
12020-5-152

__こうしたい__(四行目のcntの値を3に変更)

idregist-datecnt
62020-11-151
52020-10-288
42020-9-152
32020-8-153
22020-6-283
12020-5-152

##筆者が失敗したクエリ

MySQL

1 UPDATE graph_data SET cnt = 3 ORDER BY regist_date DESC LIMIT 1,1 ;

明らかな構文エラーですね、筆者はつい、、可能だと思っていました。。
勉強不足の露呈、、、
UPDATE はLIMITで開始点 終止点を指定できないんですね。。。
下記のような取得件数は指定できるようですが。

DESC LIMIT 2
DESC LIMIT 36

###ググってみた感じ
CASEなどといった条件指定はたくさんあるが、今回の
こういった処理は現実的でないような、、

もし方法があればご教授いただければ幸いです。
不足情報ございましたら追記致します。
よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

maisumakun

2020/10/27 05:53

どうしても1本のクエリでやらないといけないのですか? (いったん更新したい行がどれかを調べる→それだけ更新する、というのをPerlから行うほうが楽かと思います)
jagaimo300

2020/10/27 06:02

maisumakun様 > データベース6つ テーブル9つ 6カラム 10レコードなので3240か所は 大変だと思い楽をしようと思った次第でした。。 検討してみます、ありがとうございます。
guest

回答1

0

ベストアンサー

SQL

1update `graph-data` set cnt=3 2where id=(select id from(select id from `graph-data` order by `regist-date` desc limit 3,1) as sub)

投稿2020/10/27 06:00

yambejp

総合スコア114581

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jagaimo300

2020/10/27 06:09

yambejp様> ご回答頂きありがとうございました。 この、処理は初めて拝見しましたがとても正確に実行することができました。 改めて、ありがとうございます。
yambejp

2020/10/27 06:13

mysqlの場合自分自身をつかって更新ができませんが、 自分自身を一旦サブクエリにいれることで別テーブルと認識するので 更新の条件として利用できます
jagaimo300

2020/10/27 06:30

yambejp様> サブクエリ調べてみたら、これはとても勉強になります。。 さっそく実行して一週間かかりそうな膨大なデータ挿入が30分ぐらいで終わりそうです。。 サブクエリ勉強してたくさん練習します。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問