MySQL5とPHP7で検索システムを製作しています。
info_table
+---+-----+---
| id2 | name |・・・
+---+-----+---
| 1 | AAA | ・・・
| 2 | BBB | ・・・
| 3 | CCC | ・・・
+---+-----+---
list_table
+--+------+-----+-----+
| id | name2 | year | text |
+--+------+-----+-----+
| 1 | AAA | 2017 | あああ |
| 2 | BBB | 2017 | いいい |
| 3 | CCC | 2017 | ううう |
| 4 | AAA | 2017 | えええ |
| 5 | BBB | 2017 | おおお |
| 6 | AAA | 2018 | かかか |
| 7 | CCC | 2018 | ききき |
+--+------+-----+-----+
上記のような2つのテーブルを結合した後、「yearが2017」のレコードを検索。
その時にname2が重複した場合、idが一番大きいレコード以外を削除したいです。
さらに、ソートもできれば最高です。
理想とする結果
+--+------+-----+-----+---+-----+---
| id | name2 | year | text | id2 | name |・・・
+--+------+-----+-----+---+-----+---
| 3 | CCC | 2017 | ううう | 3 | CCC | ・・・
| 4 | AAA | 2017 | えええ | 1 | AAA | ・・・
| 5 | BBB | 2017 | おおお | 2 | BBB | ・・・
+--+------+-----+-----+---+-----+---
結合し検索する所までは出来たのですが、重複したレコードの削除で躓いてしまいました。
$sql = 'SELECT * FROM list_table LEFT JOIN info_table ON name = name2 WHERE year = "2017" ORDER BY id';
GROUP byを試しましたが、理想の検索結果にはなりませんでした。
良い方法をご教示頂ければ幸いです。
A 回答 (3件)
- 最新から表示
- 回答順に表示
No.3
- 回答日時:
> 検索結果の中から一番最新のレコードのみを表示したいので、削除で間違いありません。
DBに対する認識がちがうような・・・
削除はテーブルからデータを削除することですから、削除をすると
list_tableの中身のデータがなくなってしまうのですが大丈夫ですか?
ちなみにインデックスちゃんと貼っていますか?
info_tableはid2に主キーを設定してください
list_tableはidを主キーに、name2,yearをあわせて複合インデックスを設定してください
返信ありがとうございます。
勉強不足で申し訳ありません。
削除ではないですね。
条件で抽出した後、idが一番大きいレコードを残すという事です。
インデックスは主キー、複合インデックス共に設定しています。
No.2
- 回答日時:
とりあえずはこう
select * from list_table as t1
inner join info_table as t2 on t1.name2=t2.name
where exists(
select name2 from list_table
where year=2017
group by name2
having max(id)=t1.id
)
order by id
返信ありがとうございます。
検索結果の中から一番最新のレコードのみを表示したいので、削除で間違いありません。
書き忘れてしまい申し訳ないのですが、実際のinfo_tableには1万件ほど、list_tableには2万件ほどのレコードがあります。
yambejp様から頂いたコードを試したところ、理想の検索結果を取得できましたが、終了まで数分かかってしまいました。
検索時間を短くしたいのですが、何か良い方法はありますでしょうか?
よろしくお願いいたします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- SQL Server ACCESSで表が作りたく、そのためのSQL文や設定方法を教えてください。 1 2022/08/15 12:28
- SQL Server ACCESSで3ファイルを結合して、表を作成するやり方を教えて下さい。 17 2022/08/15 20:34
- Excel(エクセル) ¥マークを含むパスの処理について(マクロ、または関数) 2 2022/12/25 02:11
- その他(データベース) カラム上の重複を削除するクエリを教えてください 3 2022/04/12 14:11
- SQL Server ACCESSで複数テーブルを結合して、リストを作る方法を教えてください。 2 2022/08/12 19:32
- Perl perl このテキストファイルを簡単に配列に入れるには? 2 2022/04/27 20:24
- その他(Microsoft Office) パワークエリの複数ファイルのデータ統合について 3 2022/07/14 17:06
- Windows 10 バッチファイルの記述法とルールについてアドバイスをお願いいたします。 1 2022/04/13 10:50
- Visual Basic(VBA) 【VBA】特定の文字で改行(次の行)に行きたい。 3 2022/04/11 17:20
- JavaScript JavaScript|特定URLだった時、特定の要素を変更するコードの書き方を教えてほしいです 2 2023/08/25 21:43
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで最後の文字だけ置き...
-
Access パラメータクエリをcsv...
-
副問合せの書き方について
-
SQL Left Join で重複を排除す...
-
[MySQL] UNIQUE制約の値を更新...
-
insertを高速化させたい
-
SQLにて特定の文字を除いた検索...
-
select文のwhere句に配列を入れ...
-
VIEWの元のテーブルのindexって...
-
inner joinをすると数がおかし...
-
SQLサーバから、項目の属性(型...
-
WordpressのContact form 7でzi...
-
複数テーブルのGROUP BY の使い...
-
selectした大量データをinsert...
-
”photo id” とは何ぞや?
-
PL/SQLの変数について
-
ローカルルーターモードとは
-
#1136 - Column count doesn't ...
-
Unionした最後にGROUP BYを追加...
-
android studio
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで最後の文字だけ置き...
-
SQL Left Join で重複を排除す...
-
VIEWの元のテーブルのindexって...
-
SQLサーバから、項目の属性(型...
-
select文のwhere句に配列を入れ...
-
副問合せの書き方について
-
マイクラPC版のコマンドで効率...
-
Unionした最後にGROUP BYを追加...
-
selectした大量データをinsert...
-
SQLにて特定の文字を除いた検索...
-
[SQLServer] テーブル名からカ...
-
1テーブル&複数レコードの更新...
-
inner joinをすると数がおかし...
-
クエリ表示と、ADOで抽出したレ...
-
ある条件の最大値+1を初番する...
-
sqlで、600行あるテーブルを100...
-
複数テーブルのGROUP BY の使い...
-
insertを高速化させたい
-
PL/SQLの変数について
-
キー毎の、ある列のmaxのレコー...
おすすめ情報