查询内部查询

时间:2011-08-08 02:14:13

标签: php mysql sql

我正在使用PHP与Mysql。 我想知道在查询中查询真正的问题,如果我对使用INNER JOIN不太满意,而更喜欢编写多个查询。 我做了一件非常糟糕的事情,还是只是让它在视觉上听起来不错?

我的意思是......

$query="SELECT * FROM TABLE WHERE USER_ID=1";
$data=mysqli_query($dbc,$query);
$row=mysqli_fetch_array($data);
$query2="select * from TAble2 where some_id='{$row['user_id']}'";
$data1=mysqli_query($dbc,$query);
$row1=mysqli_fetch_array($data1);
// and then use $row1['column_name']

2 个答案:

答案 0 :(得分:4)

在我们帮助解决您的具体问题之前,您应该发布一些代码。

然而,我会说,做某事不舒服通常不是不这样做的借口。相反,您应该尽可能阅读有关JOIN的所有内容,以便 舒适,然后就不会出现问题。

JOIN非常强大,如果没有它们,你可以在MySQL中做很多事情。当你在查询中说查询时,我认为你的意思是做像

这样的事情
SELECT
   postid
FROM
   Post
WHERE
   userid IN (
      SELECT
         userid
      FROM
         User
      WHERE
         username = ?
   )

这不比

复杂得多
SELECT
   postid
FROM
   Post
   NATURAL JOIN User
WHERE
   username = ?

答案 1 :(得分:0)

将尽可能多地组合到单个查询中而不是迭代嵌套游标的主要好处是,到DB的往返是相对昂贵的。

在问题中使用嵌套游标方法,您正在准备并执行 n + 1 SQL语句,其中 n 是初始结果集中的记录数。

如果要将这些查询与连接组合在一起,那么无论结果集有多大,您都只能准备并执行一个语句。

SELECT T1.foo, T1.bar, T2.baz
FROM `TABLE` T1
INNER JOIN `Table2` T2 ON T1.user_id = T2.some_id
WHERE T1.user_id = 1

您也减少了对数据库本身的负担,特别是在启用了语句缓存的情况下。