如何保存用户的过滤条件?

时间:2016-10-13 12:59:51

标签: php mysql sql database laravel

我有一个使用MySQL数据库的Laravel应用程序,在多个表中有数百万条记录,简化后如下所示:

Table: products  
Columns: product_id name price stockist colour brand stock date_added

Table: stockists  
Columns: stockist_id name phone email post_code stock

Table: categories  
Columns: category_id name slug level

Table: category_product  
Columns: category_id product_id

用户可以根据大量标准(大约15个)搜索产品,包含几乎所有与产品相关的数据。示例搜索可能如下所示:

退回前50个产品:
- 费用超过5英镑 - 成本低于30英镑 - 由'Apple','Samsung'或'LG'标记 - 属于“usb充电器”或“电池”类别,但不属于“案例”或“封面”或“车载充电器” - 不到两周前添加

我希望能够针对制作搜索参数的用户存储搜索参数,以便他们能够多次重新运行搜索。根据我的研究,我遇到的解决方案包括我认为不会起作用的观点,因为他们不接受参数和准备好的陈述,因为它们无法保存而无法使用。这会留下存储过程或保存到专用表,每个参数都有一列。我倾向于两者中的后者,虽然我可以看到很快变得非常混乱。有人能指出我对问题的最佳解决方案吗?感谢。

2 个答案:

答案 0 :(得分:0)

如果您不想维护过滤列列表,可以使用键值存储模式。

table: user_search_criteria
columns: user_id, key, value

$criterium = new UserSearchCriteria();
$criterium->user_id = $user->id;
$criterium->key     = 'price';
$criterium->value   = '<= 100';
$criterium->save();

但我想你不必长时间记住标准,所以我会使用Redis。

Redis::set('criteria.' . $username, $criteria);

$criteria = Redis::get('criteria.' . $username);

答案 1 :(得分:0)

您可以使用 $_SESSION

$_SESSION['seach_critera'] = json_encode($criterea_array);

https://www.php.net/manual/en/reserved.variables.session.php

相关问题