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

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

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

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

phpMyAdmin

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

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Q&A

2回答

1159閲覧

phpMyAdminで1件のレコードが何度も表示される問題について

ikatako

総合スコア270

MySQL

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

phpMyAdmin

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

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

0グッド

1クリップ

投稿2020/11/01 14:36

###発生している問題
phpMyAdminを使用しています。
SELECTでは1件しかレコードがないのに、phpMyAdminのページ送りで見ると重複して表示される問題にハマりました。
原因や解決策をご存じでしたら教えて頂けませんでしょうか。

###実際の画面
問題の画面を添付します。
1ページ目、2ページ目、そしてSELECTの結果です。

ご覧のように1ページ目にも2ページ目にも同じ

matter_IDthread_IDorder_number
511

というレコードが表示されています。

しかしSELECTされたレコードはこれ1件しかなく、なぜページ送りの際に重複表示されるのか…

イメージ説明

これでは1件なのか2件なのかわかりにくくてとても困ると思うのですが、こういうものなのでしょうか?

おそらくSELECTの結果が正しくて実際には1件しかないのだと考えています。
しかしさっきSELECTしてみるまで2件あると思っていて、なぜ2件になってしまうのか???とかなりの時間悩んでしまいました。

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

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

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

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

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

m.ts10806

2020/11/01 22:24

phpMyAdmin以外のツール、またはコマンドラインから見た場合はどうでしょうか。
mix-peach

2020/11/02 00:10

「1ページ目」のselect文を複数回を実行して、 必ず「毎回同じ並び順」で結果レコードが表示されますか??
ikatako

2020/11/02 00:27

はい。今5回試して「毎回同じ並び順」でした。 ちなみに行数を25件でなく50件にしても2ページ目で重複しますが、250件(1ページにthread_ID=1のレコードがすべて表示される件数)にすると重複しませんでした。つまりページ送りの際に重複するようです。
mix-peach

2020/11/02 06:55

プルダウンで指定している「キーでソート」の「fk_p_comments_02」を「なし」に変更しても、2ページ目に重複レコードが表示されますか?
ikatako

2020/11/02 09:19

いいえ。その場合は重複はなくなります。ちなみにPKであるmatter_IDでソートされます。
mix-peach

2020/11/04 00:14

「キーでソート」を「なし」のまま、SQLで orderby thread_ID asc, matter_ID asc と指定しても、重複はしないですよね? であれば、「fk_p_comments_02」このキーソート指定が、意図せずselect結果そのものを変えているのでは・・?もしそうなら、そもそも取得結果の「総数」自体が、実際のレコード数と異なっているのでは?と思いますが、そんなことはないのでしょうか? できれば、テーブル定義(問題が起きているのは中間テーブルだと思うので、親テーブル2つと合わせて3つ分)を提示された方が良いかも。。
mix-peach

2020/11/04 00:21

↑の、コメント書いてから思い直しました。必ず「2ページ目」で起こる話だったので、 > キーソート指定が、意図せずselect結果そのものを変えているのでは・・?もしそうなら、そもそも取得結果の「総数」自体が、実際のレコード数と異なっているのでは?・・・ これは私の思い過ごしかも。。^^; 原因がキーソート指定の「fk_p_comments_02」だと思うのは、変わりませんが。
ikatako

2020/11/04 01:26 編集

> 原因がキーソート指定の「fk_p_comments_02」だと思う あ、いえ、それは原因ではないと思います。 > ちなみにPKであるmatter_IDでソートされます。 とわざわざ書いたのは、「なし」にするという操作”だけ”であればPKであるmatter_IDでソートされますという意図です。もしその操作”だけ”でなく、「なし」にした後でthread_IDのカラムをクリックしソートすると、「なし」であってもやはり重複は生じます。 下記は仰る通り重複しませんでした。 > 「キーでソート」を「なし」のまま、SQLで > orderby thread_ID asc, matter_ID asc > と指定しても、重複はしないですよね? でも上記のようにクエリを自分で書かないといけないのは手間ですね。 質問画像の1ページ目や2ページ目で実行している SELECT * FROM `p_comments` ORDER BY `thread_ID` ASC というクエリは私が書いたものではなく普通にphpMyAdminの画面操作で生成されるクエリなのに、今回のような間違いがありうるというのはphpMyAdminに対して少し不満を感じてしまいます。
m.ts10806

2020/11/04 02:22

phpMyAdminどうこうより、MySQLの仕様だと思います。実際は特に問題が起きているわけではありません。 テーブル定義次第で制御できる内容でもあります。
guest

回答2

0

なんとも言えないですが、表示順が確定するまできっちりorder byしてないからでは?

投稿2020/11/02 00:44

yambejp

総合スコア114767

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

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

ikatako

2020/11/02 09:52

ありがとうございます。少しピンとこなかったのですが、それをきっちりやるためにはどうすればいいということですか。 またphpMyAdminというのはそれがきっちり行われなかったりするのでしょうか。
yambejp

2020/11/04 00:18

order by thread_ID asc, matter_ID asc としてください SQLのorder by は一次ソート時に同順位の場合、その中の表示順位は 保証されていません。
ikatako

2020/11/04 01:26 編集

流石の洞察ですね。そのようにしましたら重複なくなりました。 しかし困っちゃいますね。 質問画像の1ページ目や2ページ目で実行している SELECT * FROM `p_comments` ORDER BY `thread_ID` ASC というクエリは私が書いたものではなく普通にphpMyAdminの画面操作で生成されるクエリなのですから、そこはよしなにして欲しいですよね。
yambejp

2020/11/04 01:29 編集

mysqlにはデフォルトのソート設定というのがあって、うまくいけば 以下を一度実行しておくと安定するかもしれません ALTER TABLE p_comments ORDER BY matter_ID ASC; デフォルトソートが二次ソートに反映される保証があるかは 調べていませんが・・・
ikatako

2020/11/04 01:33

本当にたくさんご存じですね。そちら実行しますと確かにthread_IDの並びが変わりました。ただ重複は起こってしまうようでした。情報ありがとうございます。
guest

0

phpMyAdminに対して少し不満を感じてしまいます。

所詮DBツールなので、納得のいく他のDBツールに乗り換えるという選択肢もありだと思います。

投稿2020/11/18 02:23

sazi

総合スコア25173

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問