2014-02-23 26 views
0

我网页上的形式是用户输入要使用通过数据库根据过滤:存储SQL结果使用上的其他网页

enter image description here

一个AJAX调用数据库返回一个由查询满足实时性的计数:

$query = " 
SELECT 
* 
FROM 
first_page_data 
WHERE 
((((acos(sin((".$lat."*pi()/180)) * sin((`geo_lat1`*pi()/180))+cos((".$lat."*pi()/180)) * cos((`geo_lat1`*pi()/180)) * cos(((".$lon."- `geo_lon1`)* pi()/180))))*180/pi())*60*1.1515) * 1.609344) < ".$range." 
AND 
value_min >= " . $valmin . " 
AND 
value_max <= " . $valmax . " 
AND 
bed_min >= " . $bedmin . " 
AND 
bed_max <= " . $bedmax; 

$result = mysql_query($query, $first_data); 
$number = mysql_num_rows($result); 
echo $number; 

这工作得很好,所有的作品,因为我想要的。不过,我现在想要对结果做“事情”(例如,当点击一个按钮,在谷歌地图上显示它们等时,将它们全部显示在表格中)。如何存储此查询的结果以供在其他网页上使用?我不能在另一页上重新查询数据库,因为结果取决于用户在此表单上的输入。

+0

'fetch_assoc()'并发回一个JSON并使用它? – Shahar

回答

1

您可以将它们存储在临时会话中。我其实并不主张这种方法,但不知道你的整个环境应该提供一个解决方案。

$result = mysql_query($query, $first_data); 
while($row = mysql_fetch_assoc($result)) { 
    $_SESSION['store'][] = $row; 
} 

我也强烈建议迁移到如果可以的话,一旦你有这个完成后,您可以通过使用

unset($_SESSION['store']); 

如果您的结果集是巨大的,我不建议消灭它使用的mysqli将其存储在临时会话中。将其作为json数组存储到文件中。

while($row = mysql_fetch_assoc($result)) { 
    $rows[] = $row; 
} 

file_put_contents($unique_var . '.txt', json_encode($rows)); 

您将需要设置一个唯一值,以便日后检索正确的文件。一旦完成使用后擦除文件:

unlink($unique_var . '.txt'); 

那么未来打样呢?会话存储是更容易,但设置一个巨大的结果和大量的用户,这可能是非常耗资源,所以试试这个:

$result = mysql_query($query, $first_data); 
while($row = mysql_fetch_assoc($result)) { 
    $rows = $row; 
} 

if(count($rows) < 51) { 
    $_SESSION['store'] = $rows; 
} else { 
    file_put_contents($unique_var . '.txt', $rows); 
} 

你以后可以访问它像这样:

if(!isset($_SESSION['store'])) { 
    $contents = file_get_contents($unique_var . 'txt'); 
    unlink($unique_var . '.txt'); 
} else { 
    $contents = $_SESSION['store']; 
    unset($_SESSION['store']); 
} 

这方法是尽可能快地清除会话和临时文件。

+0

我有一个会话设置(用户登录,然后过滤他们的结果)。那么您建议的这种方法会将所有结果存储在会话变量中?如果查询返回数以千计的结果,这会很重要 - 这将会是会话变量中相当大的一个数组! – Giovanni

+0

如果您的结果集是huuuuuge,请使用第二种方法更新我的文章。 –

+0

非常有用的建议,谢谢。在你看来,从会话方法转移到单独文件的切入点是什么?我询问的理由是很乐意将结果限制在<50,如果这意味着它可以存储在会话变量中。无论如何,我不认为用户会想要找到超过50个,如果他们这样做,它不会真正有效地过滤! – Giovanni

1

为什么不使用会话来存储用户的输入,然后重新查询数据库。无需将所有结果存储在会话中。

相关问题