0

如标题中所述。

如何创建从多个表中检索数据的查询,并且表之间没有关系。

示例:
我有两个如下表:

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
------------------   |  ----------------------

我想要的是接下来的两个查询组合在一个查询中

查询一:

("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 个或多个查询,并按列名处理它们,不要忘记所有表与某些表没有任何关系

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

我认为人们在这里为您提供答案而苦苦挣扎的是了解您在寻找什么。

肯定有 PHP 库允许您通过一次调用数据库来执行多个 SQL 查询。以 mysqli_multi_query 为例。但是,听起来这不是您要寻找的。似乎您想找到一种神奇的方法,将不相关的表上的多个查询作为单个查询执行,然后以某种方式神奇地能够独立地获取数据集。如果您要在不相关的表上执行笛卡尔连接等操作,您的结果集中的结果将比您正在寻找的结果大几个数量级,从而在数据库和应用程序上引入性能问题。

听起来您想减少查询数量以减少查询数量,这听起来像是一种糟糕的设计方法 IMO。当然,您可以使用连接最小化对相关表的查询。但是尝试以某种方式连接不相关的表可能会给您的系统带来更多的复杂性和性能问题,而不是您想要的。减少对数据库的查询并不是数据库性能优化的全部。您需要确保为查询正确索引表。您需要确保您存储的数据具有适当的数据类型和大小。您需要确保您有正确分配的内存以将索引保存在内存中。您需要确保拥有正确配置的服务器,以满足您的内存、磁盘容量和磁盘 I/O 要求。

于 2012-09-12T18:27:31.347 回答