2010-08-19 90 views
-1

我想查询数据库中的2个表,每个查询与彼此没有任何关系,除了在同一页上。PHP MySql查询2个同时没有公共属性的表?

查询1 - 页面上的第一个查询将检索的文本和图像在整个页面发现从表A.

查询2 - 第二个查询将检索几款产品有图像,说明和标题表B中的每个产品。

我知道将第二个查询放在第一个查询的while循环内可以工作,但当然效率很低。

我如何以及通过1查询检索所需的所有数据的最佳方法是什么?

感谢,

  • 戴恩
+2

为什么将它们结合在一起,如果它们不相关?如果它们不相关,为什么要在查询1的循环内部执行查询2? – ircmaxell 2010-08-19 17:03:09

+0

ircmaxell - 没有2个查询在同一页上效率低下? – teamdane 2010-08-19 17:05:32

+0

我宁愿有2个简单的查询,而不是1个过于复杂的查询。从可维护性角度和性能角度来看都是如此。减少并不总是更好... – ircmaxell 2010-08-19 17:13:22

回答

3

因此,所有你想知道的是如果确定对同一网页2个查询?它的A-确定。继续前进。它完全正常。没有人期望桌面新闻和桌面产品之间的联系。它通常使用两个查询从两个不相关的表中获取数据。

+0

它们不相关,因此可以在同一页上有2个查询吗? – teamdane 2010-08-19 17:21:14

0

使用LEFT或INNER JOIN(取决于您是否希望显示表A有没有相应的记录在表B记录)

SELECT a.*, b.* 
FROM TableA a 
[LEFT or INNER] JOIN TableB b ON (b.a_id = a.id) 
+0

我需要表A中的所有记录和表B中的所有记录。没有要加入它们的ID,没有列相关。 – teamdane 2010-08-19 17:22:06

+0

在这种情况下,我会有2个独立的查询。 – a1ex07 2010-08-19 17:39:01

0

如果没有办法在两个表之间的相互关系,那么你不能使用JOIN从两者中抓取记录。您可以使用UNION查询,但假设您可以匹配每个表中的字段,因为UNION要求您从每个表中选择相同数量/类型的字段。

SELECT 'pageinfo' AS sourcetable, page.id, page.images, page.this, page.that 
WHERE page.id = $id 

UNION 

SELECT 'product' AS sourcetable, products.id, products.image, product.other, product.stuff 

但这是非常丑陋的。您仍然强迫数据库服务器在后台执行两个查询以及将它们组合到单个结果集中的额外工作,然后您必须执行额外的工作来解散代码以引导。

更简单,概念和维护方面,做两个单独的查询,而不是更容易。