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

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

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

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

SQL

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

Q&A

解決済

2回答

1131閲覧

3つのテーブルの中から最新5件を取得したい

creative_09

総合スコア80

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

SQL

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

0グッド

0クリップ

投稿2020/09/20 13:31

3つのテーブルから最新の5件を拾いたいとき、
具体的にはどういう流れで組めばいいのでしょうか?

テーブルはそれぞれカラム数が違い、カラム名も一部異なります
3つのテーブルからそれぞれの5件を抜き出すのではなく、
3つすべてでcreated_atが新しい5件を取得する方法として検討もついていませんので、
一般的にこのような場合の考え方だけでも教えていただければと思います

itemテーブル
id,created_at,body,user_id

productテーブル
id,created_at,title,user_id,price

eventテーブル
id,created_at,title,user_id,body

テーブルは上記のような形となっていますが
検索などをつかうのでしょうか?

よろしくお願いいたします

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

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

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

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

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

guest

回答2

0

ベストアンサー

UINON や UINON ALL を多用しないといけないのは本来1つのテーブルに統合して設計するべきだったことが多いですし、パフォーマンスが悪いです。
title, body は文字型を、priceは数値型を想定しましたが、適切なコメントが付くように質問のテーブル定義はCREATE TABLE文で載せてください。

同じSQLでもデータベースやそのバージョンによって方言が大きいですから、どのデータベースを使うのかを質問のタグで示したり、バージョンも明記した方が適切なコメントが付き易いです。SQLの観点から Oracle Database, PostgreSQL, MySQL の特徴を整理しよう!

以下実行していませんが、

SQL

1SELECT 2 tables 3 , id 4 , created_at 5 , CASE WHEN tables IN('event', 'product') THEN title 6 ELSE body END 7 , user_id 8 , CASE WHEN tables = 'event' THEN title 9 WHEN tables = 'product' THEN TO_CHAR(price) END 10FROM( 11 SELECT 'event' AS tables, id, created_at, title, user_id, body, 0 as price from event 12 UINON ALL 13 SELECT 'product' , id, created_at, ' ' , user_id, ' ' , price from product 14 UINON ALL 15 SELECT 'item' , id, created_at, ' ' , user_id, body, 0 from item 16 ) 17ORDER BY created_at 18LIMIT 5;

投稿2020/09/20 23:26

Orlofsky

総合スコア16415

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

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

creative_09

2020/09/21 12:04

回答ありがとうございます。 SQLのタイプなど記載しておらずすみません。 Mariadbを使用しております。 またlaravelを使っています。 上記の答えを読んでもさっぱりわからないのですが、 答えを参考に調べてみます。 こちらの回答でそれぞれの最新5件づつではなく、 3つのテーブルから新しい順に5つのみ取得で間違いないでしょうか?
Orlofsky

2020/09/21 12:53

質問は修正できます。 >どのデータベースを使うのかを質問のタグで示したり、... SQLを勉強しないでLaravelでデータベースを使えるとお思いで?
creative_09

2020/09/22 02:29

ありがとうございます。 無事に意図する動作が確認出来ました。 ですが、おっしゃるとおりunionを使う時点で1つのテーブルに統合すべき場合が多いということをしれたのも大きかったです。 動作はしましたが、ひとつのテーブルで統合する方向で行きたいと思います。 教えて頂きありがとうございます。
guest

0

イメージはUNIONでまとめて並べ替えそれの上位5件を取得する方法
DBの種類によって書き方が変わるけど書き方の参考例

SQL

1SELECT A.id, A.created_at, A.table_name 2FROM 3(SELECT id, created_at, 'item' AS table_name FROM item 4UNION ALL 5SELECT id, created_at, 'product' AS table_name FROM product 6UNION ALL 7SELECT id, created_at, 'event' AS table_name FROM event) AS A 8ORDER BY A.created_at 9LIMIT 5

※別の回答者さまで指摘あればおねがいします。内容を修正します。

投稿2020/09/20 15:38

編集2020/09/20 15:38
kuma_kuma_

総合スコア2506

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

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

creative_09

2020/09/21 12:05

回答ありがとうございます。 unionを使うのですね、こちらよくわかっていないので、調べてやってみます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問