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

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

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

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

PDO

PDO(PHP Data Objects)はPHPのデータベース抽象化レイヤーです。

SQL

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

Q&A

解決済

4回答

5364閲覧

MYSQLで同一条件のレコードを複数回取得する

SugiuraY

総合スコア317

MySQL

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

PDO

PDO(PHP Data Objects)はPHPのデータベース抽象化レイヤーです。

SQL

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

0グッド

1クリップ

投稿2017/10/23 05:16

SQL文での条件指定について、一点後質問させてください。
下記のようなWhere In 区で1番目と3番目のように同じ条件が出現する場合、
結果をfetchすると一つしかXを返してこないと思います。

これについて、同一条件であっても2回以上条件が出現する場合、それぞれの結果を出力させたい
のですが、可能でしょうか?
宜しくお願い申し上げます。

SQL

1SELECT X FROM table1 WHERE (A,B) In (('8951','201612'),('8952','201703'),('8951','201612')) 2//'8951','201612'⇒ X=100 3//'8952','201703'⇒ X=200 4 5//期待するfetchの結果 6[0]=>array([0]=>100) 7[1]=>array([1]=>200) 8[2]=>array([2]=>100) //[0]と条件重複していても結果を出力させたい

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

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

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

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

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

guest

回答4

0

これってこういうことですよ

  • リンゴが3個、みかんが5個、レモンが10個あります
  • リンゴかみかんかリンゴは全部でいくつ有りますか?

答え:リンゴ=3+みかん=5+リンゴ=3で11

明らかにロジックがおかしいですよね?

投稿2017/10/23 05:36

yambejp

総合スコア114829

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

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

SugiuraY

2017/10/23 06:40

ご回答有難うございます。 ご指摘は仰る通りでございます。
guest

0

ベストアンサー

与えた条件の数だけ行数を取り出すというのは不可能です。
条件を格納したテーブルなどで条件分の行数を生成しないと確保はできません。

以下は内部的に条件テーブルに該当するデータを生成した場合です。

SQL

1select con.*, t1.x 2from ( 3 select '8951' as A,'201612' as B 4 union all select '8952','201703' 5 union all select '8951','201612' 6 )as con 7 left join table1 t1 8 on con.a=t1.a and con.b=t1.b

投稿2017/10/23 05:41

sazi

総合スコア25188

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

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

SugiuraY

2017/10/23 06:41

ご回答有難うございます。 やはり、不可能ですね。。 違うロジックを考えます
sazi

2017/10/23 06:45

以前の質問では条件を動的に生成していたので、 where 条件を動的に生成するのではなく、union 部分を動的に生成するという方法も考えられます。
guest

0

別々に抽出してUNIONで結合でしょうかね。

SQL

1SELECT X FROM table1 WHERE (A,B) In ('8951','201612') 2UNION ALL 3SELECT X FROM table1 WHERE (A,B) In ('8952','201703') 4UNION ALL 5SELECT X FROM table1 WHERE (A,B) In ('8951','201612')

投稿2017/10/23 05:31

編集2017/10/23 05:46
ttyp03

総合スコア16998

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

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

sazi

2017/10/23 05:43

UNION ALL では?
ttyp03

2017/10/23 05:45

失礼しました。抜けてました。
sazi

2017/10/23 05:49

因みに、UNIONは結合ではなくマージです。
sazi

2017/10/23 05:59 編集

コメントした後に調べてみたら、結合と言っているところもありますね。 失礼しました、スルーして下さい。
SugiuraY

2017/10/23 06:38

ご回答有難うございます。 意図的な重複入力をみとめておら、ユーザーから大量な重複も予想されるため、問い合わせの回数は最小限に考えておりました。 また、異なるロジックを検討してみます!
guest

0

ちょうど少し前に似たような質問がありましたが、WHEREはあくまでテーブルから必要なものを絞り込むためのものなので、条件の書き方で同じレコードが2回取られることはありません。

どうしても必要なら、別に抽出してからUNION ALLで結合するなどの手段もあります。

投稿2017/10/23 05:27

maisumakun

総合スコア145183

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

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

SugiuraY

2017/10/23 06:32

ご回答有難うございます。 SQL側ではない、他の手段を考えてみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問