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

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

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

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

SQL

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

Q&A

解決済

3回答

1125閲覧

検索時のSQL

GIRLibra

総合スコア33

MySQL

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

SQL

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

0グッド

0クリップ

投稿2015/02/12 05:10

複数の箇所から検索できる機能を作成したかったのですが
条件やjoinするテーブルが多くうまく出来ませんでした。

◇テーブルAのid=1に対して
テーブルBで2つのデータを保持してる場合
→検索結果でid=1が2レコードになる。

◇集計したい値があるが上記の理由で
結果が望んでいるものより多くなる。

◇空白区切りの文字で検索された場合は
該当のAND部分だけループさせればいいのでしょうか。

うまく検索結果を表示する為にはどのようにすればよろしいでしょうか。
また、検索機能を作成する際の工夫や注意点等あったら教えていただけないでしょうか。

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

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

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

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

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

guest

回答3

0

テーブルBをキーにSUMって見ては如何でしょうか?
申し上げにくいのですが、テーブルAに固執しすぎているのではないでしょうか?

投稿2015/02/15 11:58

takayukiinaba

総合スコア1158

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

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

0

ベストアンサー

ちょっと状況がつかめてないので検索機能を実装するときに意識していることを挙げてみますね^^
解決につながればいいんですが・・・

1.SQLを作成するときは単純な「SELECT * FROM tableA」から1つずつデーブルをJOINしていくようにして、
理想となる結果が取得できるSQLを作ってしまいます。(Navicatとかコマンドとかで)

2.相当複雑なSQLになりそうであればSQLは分けてしまいます。
思わぬ不具合が起きるよりは潔いかと。

3.検索機能であればプログラミング言語で作成されるSQLを切り替えたりします。

lang

1 $SQL = "SELECT * FROM tableA WHERE 0 = 0 " 2 if ( 項目Bの条件が入っていたら ) { 3 $SQL .= " AND 項目B = ".項目Bの検索条件 4 }

こんなところでしょうか・・・。
出来れば作成したSQLを見せていただけませんか?

投稿2015/02/13 12:29

CyberMergina

総合スコア295

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

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

GIRLibra

2015/02/16 01:02

ありがとうございます。 例えばテーブルBにチェックボックスの値を2つ持っている場合、joinしたときに id=1に対して2レコード取得されるということでした。(ループして表示させるとid=1が2つある状態) 1回目のSQLを元に重複のないidを再取得後、更に表示用のデータを再取得という方法で出来ました。2.はこういうことだったのでしょうか… ありがとうございました。
guest

0

SELECT A.id,A.項目1,A.項目2,B.項目1,B.項目2 FROM テーブルA A
INNER JOIN テーブルB B
ON A.id = B.id
WHERE A.id = 1
GROUP BY A.id,A.項目1,A.項目2,B.項目1,B.項目2
もしくは
SELECT DISTINCT A.id,A.項目1,A.項目2,B.項目1,B.項目2 FROM テーブルA A
INNER JOIN テーブルB B
ON A.id = B.id
WHERE A.id = 1
のどちらかで行けると思います。

投稿2015/02/12 07:11

JunHara

総合スコア7

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

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

GIRLibra

2015/02/12 10:08

id=1 | 項目1 | 項目2 | 項目3A | 値1=3 | 値2=5 | id=1 | 項目1 | 項目2 | 項目3B | 値1=3 | 値2=5 | id=2 | 項目1 | 項目2 | 項目3 | 値1=6 | 値2=3 | これをid=1でまとめてレコードが一つになった場合 項目3Bはどうやって検索するのでしょうか。 また値1を足したものと値2を足したものの合計を求めたいのですがうまくいきません。 実際はid=1は1レコードであって欲しいのでid=1の値とid=2の値を足して 9にしたいのですが、id=1が2レコードあるので3+3+6=12となってしまします。 (id=1でgroup byしても12です) 全部一つのsqlで結果を求めようとしているのですが 方法が間違っているのでしょうか。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問