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

时间:2012-09-12 17:27:07

标签: php mysql

如标题所述。

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

示例:
我有两张表如下:

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

我想要的就像在一个查询中合并的下两个查询

查询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
}

简而言之,我想在一个查询中组合两个或多个查询,并按列名对它们进行处理,并且不要忘记所有表与某些表没有任何关系 < / p>

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

我认为,在给你答案的过程中,人们正在努力解决你正在寻找的问题。

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

听起来你想减少查询次数以减少查询次数,这听起来像是一种糟糕的设计方法IMO。当然,您可以使用连接最小化RELATED表上的查询。但是,试图以某种方式加入不相关的表可能会给你的系统带来更多的复杂性和性能问题而不是讨价还价。减少对数据库的查询并不是所有数据库性能优化的结果。您需要确保为查询正确编制索引表。您需要确保为要存储的数据提供适当的数据类型和大小。您需要确保已正确分配内存以将索引保留在内存中。您需要确保配置正确的服务器以满足内存,磁盘容量和磁盘I / O要求。一旦你最大限度地优化了所有,并且系统最大化,并且你已经确定系统上的问题对不相关的表而不是一个组合查询有两个不同的查询,那么你应该担心你现在担心的是什么