php mysql保存查询结果

时间:2011-06-07 11:35:31

标签: php mysql

我的查询是这样的:

            $get_feed_amount = mysql_query("

                SELECT COUNT(*) as num
                FROM `migo_feeds`
                WHERE
                (
                    (
                        feed_type='10' ||
                        feed_type='11' ||
                        feed_type='28' ||
                        feed_type='27' ||
                        feed_type='30' ||
                        feed_type='31'

                    )
                    AND
                    (
                        from_id IN (

                            SELECT DISTINCT from_id
                            FROM `migo_relations`
                            WHERE (
                                (to_id='".$_SESSION['user_id']."')

                                AND

                                (rel_processed='1' AND rel_accepted='1')
                            )                       

                        )

                        OR

                        to_id IN (

                            SELECT DISTINCT from_id
                            FROM `migo_relations`
                            WHERE (
                                (to_id='".$_SESSION['user_id']."')

                                AND

                                (rel_processed='1' AND rel_accepted='1')
                            )                               

                        )

                        OR

                        from_id=".$_SESSION['user_id']."

                        OR

                        to_id=".$_SESSION['user_id']."

                    )
                    AND
                    feed_deleted='0'
                );

            "); 

你可以看到我已经在这个查询中两次选择了朋友

以后我也会这样做:

            $migo_groups = mysql_query("

                SELECT 
                    group_id,
                    group_title,
                    group_desc,
                    group_cat_name,
                    group_area,
                    group_city,
                    group_quarter,
                    group_pic,
                    group_tmb,
                    group_members_amount
                FROM
                    `migo_groups`
                WHERE (

                    group_type=1

                    AND

                    group_id IN (

                        SELECT group_id
                        FROM `migo_group_membership`
                        WHERE (

                            membership_type IN (1,2,3)

                            AND

                            to_id IN (

                                SELECT DISTINCT from_id
                                FROM `migo_relations`
                                WHERE (
                                    (to_id='".$_SESSION['user_id']."')

                                    AND

                                    (rel_processed='1' AND rel_accepted='1')
                                )                                   
                            )
                        )
                    )
                )
                ORDER BY RAND() LIMIT 4;
            ");

再次选择朋友.. 这似乎有点浪费资源。特别是如果表非常大,可能需要永远加载,甚至根本不加载。

我的问题是,我可以在开头做一个朋友查询并在任何地方使用结果吗?那有什么好处吗?

我在想也许将数据库中的resutls保存起来,那是不是很糟糕?什么是最好的办法?

此致 亚历山大

1 个答案:

答案 0 :(得分:1)

您可以将第一个查询的结果保存在一个数组中,然后仅将该数组用于第二个需要。

示例:

$result=array();
$query=mysql_query("SELECT complex sql [...]");
while($r = mysql_fetch_assoc($query)) {
    $result[] = $r;
    /*your first operation here*/
}

现在,在您的结果中,您拥有第一个查询的所有结果,并且您可以使用该数组执行第二个操作,而无需其他查询。

foreach($result as $row) {
      // code
}

另请注意,您应该使用PDO。