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

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回答

898閲覧

SQLで除外処理が一件の場合について

anesan

総合スコア6

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に必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

1グッド

0クリップ

投稿2020/03/13 13:14

編集2020/03/13 13:43

###質問
SQLで除外処理が一件の場合の処理について、方法AとBはどちらがいいでしょうか?

###現状
現状は、Twitterと同じサイトを作っていて、ユーザーのページを表示する仕組みを構築する段階です。

###目的
目的は、「先頭に固定するツイート」があり、それを含むツイートを20件を取得することです。

###方法A
その方法で悩んでいます。

以下のようにあるユーザーのツイートを20件取得しようかと思っていますが、でもレコードが多い場合、除外するSQL(「not exist」も「!=」も)重いですよね。

➀固定ツイートのIDを取得(SQLの処理)
➁固定ツイートを1件取得(SQLの処理)
➂固定ツイートを除外して20件取得(SQLの処理)
➃上の➁➂を連結(PHPでやる処理)

###方法B
そこで考えたのですが、除外するSQLはなくして

➀固定ツイートのIDを取得(SQLの処理)
➁固定ツイートを1件取得(SQLの処理)
➂ツイートを20件取得(SQLの処理)
➃上の➂から固定ツイートがあれば削除(PHPの処理)

という処理にしようかと思いました。

これだと固定ツイートがある場合に20件でなく19件の結果になってしまいますが、そこはたいして重要でないので、SQLが早い方がいいだろうと思った次第です。

###質問(改めて)
お聞きしたいのですが、方法Bの処理ってアリですか?それとも方法Aの方がいいですか?

もしくは良い方法があれば教えて頂きたいとも思います。

識者のみなさま宜しくお願い致します。

s.k👍を押しています

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

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

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

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

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

guest

回答2

0

ベストアンサー

方法Bの派生で21件取っておけば、固定のを削除しても20件になります。

投稿2020/03/13 13:20

maisumakun

総合スコア145183

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

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

anesan

2020/03/13 13:41 編集

ユーザーランキング1位!ありがとうございます! 一応Twitterと同じ感じをご想像頂きたかったのですが、そうしますとたとえば無限ロードのとき、取得結果に固定ツイートがなかった場合に21件になってしまうのでアレな感じもいたします。
anesan

2020/03/13 13:41

↑コメント編集いたしました
maisumakun

2020/03/13 13:59

> 取得結果に固定ツイートがなかった場合に21件になってしまうのでアレな感じもいたします。 固定ツイートがなくても、最後のを1個削れば20件にできます。
anesan

2020/03/13 14:05 編集

あっ!!あぁ…あああっっ!! SQLで21件取得する。あとはPHPで、取得されたものに固定ツイートがあれば削除、なければ最後の1個を削除。ですね。ありがとうございます!そうします!
guest

0

固定の件数がわかってるなら、それ+20件でも良さそうな気はしますが。

投稿2020/03/13 13:43

yureighost

総合スコア2183

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

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

anesan

2020/03/13 13:49

ありがとうございます。固定は1件ですね。 たとえばページ番号を持っておいて、1ページ目は「それ+20件」で取得し、2ページ目以降は「20件」で取得するという意味ですか?なるほどですね。 すると20件の中に固定ツイートが含まれているかもしれないので、どこかで除外しないといけませんよね。その除外はどうやりますか? ・SQLではじめから除外? ・毎回PHPで除外 やはり早そうなのでPHPでしょうか?
yureighost

2020/03/13 13:56 編集

あー、なるほど。 固定ツイートはタイムラインに関わらず優先ですが、 タイムライン並びだと2ページ目以降に取得されてしまうこともあるってことですか。 やっと理解できました。 確かに速さ優先ならPHPで後で消してしまった方が良さそうですね。
anesan

2020/03/13 14:02

お詳しそうな方にそう言っていただけますと自信が持てます。やはりPHPで削除するBにします。ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問