我的查询是这样的:
$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保存起来,那是不是很糟糕?什么是最好的办法?
此致 亚历山大
答案 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。