我有一个查询如下:
$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;
");
再次选择朋友。。这似乎有点浪费资源。特别是如果表非常大,则可能需要很长时间才能加载,甚至根本不加载。
我的问题是,我可以一开始就做一个朋友查询,然后到处使用结果吗?这有什么好处吗?
我在想,也许把简历保存在一个数组里什么的,这不好吗?管理事物的最佳方式是什么?
谨致问候,Alexander
您可以将第一个查询的结果保存在一个数组中,然后只使用该数组来满足第二个需要。
示例:
$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。