0

タイトルで説明したとおりです。

複数のテーブルからデータを取得し、テーブル間に関係がないクエリを作成する方法。

例:
次のような 2 つのテーブルがあります。

Table (Categories)          Table (Pic_files)
-------------------  |  ---------------------- 
 Cat_id | cat_name   |   pic_id  | pic_title 
-------------------  |  ----------------------
   1    |  Animals   |      1    | Dog_Walks
-------------------  |  ----------------------
   2    |  Nature    |      2    | red_flower
------------------   |  ----------------------
                     |      3    | blue_flower
                     |  ----------------------
 so on  |  so on     |    so on  |   so on
------------------   |  ----------------------

私が欲しいのは、次の 2 つのクエリを 1 つのクエリにまとめたようなものです

クエリ 1:

("SELECT cat_name FROM Categories WHERE Cat_id='2'")

クエリ 2:

("SELECT pic_title FROM Pic_files WHERE Cat_id='2' LIMIT 5 ")

そして、特定のテーブルのデータを印刷したい場合は、次のことを行います

foreach($data as $pic){
  echo $pic['pic_title']; // to get the data from Categories table
}

その場合も

foreach($data as $cat){
  echo $cat['cat_name']; // to get the data from Pic_files table
}

要するに、2 つ以上のクエリを 1 つのクエリに結合し、それらを列名で処理したいのですが、すべてのテーブルがいくつかのテーブルと関係がないことを忘れないでください。

4

2 に答える 2

0

これは、クロス結合を使用して行うことができます。

select *
from (SELECT cat_name FROM Categories WHERE Cat_id='2') cat cross join
     (SELECT pic_title FROM Pic_files WHERE Cat_id='2' LIMIT 5) t
于 2012-09-12T17:30:03.313 に答える
0

ここで人々が答えを出すのに苦労しているのは、あなたが探しているものを理解することだと思います.

データベースへの 1 回の呼び出しで複数の SQL クエリを実行できるようにする PHP ライブラリが確かに存在します。例として mysqli_multi_query を参照してください。しかし、これはあなたが探しているもののようには聞こえません。無関係なテーブルに対して複数のクエリを単一のクエリとして実行し、魔法のようにデータのセットを個別に取得できる魔法の方法を見つけたいと思われます。関連のないテーブルでデカルト結合などを行う場合、結果セットには、探しているものよりも桁違いに大きな結果が得られ、データベースとアプリケーションの両方でパフォーマンスの問題が発生します。

クエリの数を減らすためにクエリの数を減らしたいように思えますが、これは IMO の悪い設計アプローチのように聞こえます。確かに、結合を使用して RELATED テーブルに対するクエリを最小限に抑えることができます。しかし、なんらかの方法で無関係なテーブルを結合しようとすると、システムが予想以上に複雑になり、パフォーマンスの問題が発生する可能性があります。データベースのクエリを減らすことは、データベース パフォーマンスの最適化のすべてであるというわけではありません。クエリに対して適切にインデックスが作成されたテーブルがあることを確認する必要があります。保存するデータに適切なデータ型とサイズがあることを確認する必要があります。インデックスをメモリに保持するには、メモリが適切に割り当てられていることを確認する必要があります。メモリ、ディスク容量、およびディスク I/O の要件を満たすように適切に構成されたサーバーがあることを確認する必要があります。

于 2012-09-12T18:27:31.347 に答える