我有一个购物车类,我存储产品ID。用户可以通过一个按钮打开购物车,该按钮可以在弹出窗口中打开购物车,因此必须在每个页面中加载购物车内容。
由于尺寸限制,我只能存储产品的ID,但我想向最终用户显示产品名称,因此对于每个元素,我需要进行查询并从数据库中获取产品数据。
这样做有什么重大缺点吗?或者有更好的解决方案吗?
PS:我可以获得购物车中所有产品的ID,然后执行一个获取任何所需产品数据的查询。我宁愿避免这种情况,因为我需要重写部分类,所以与以前的解决方案有什么实际区别吗?
PPS:在任何情况下,sql查询的总数不应该太高。当然我不介意,但我强烈怀疑任何用户会同时购买数百种不同的产品。
答案 0 :(得分:2)
我只想强调你问题中的一句话:
因此,对于每个元素,我需要进行查询并从数据库中获取产品数据。
这是你的问题。你不需要这样做。您可以使用单个查询查询数据库,并询问ID列表中的所有产品。
SQL语言的一个有用部分是IN(....)
子句。
$ids = [123, 884, 7848, 2882, 3232]; // let's say that is your input
$idList = implode(',', array_map('intval', $ids));
$sql = sprintf(
"SELECT field1, field2, field3 FROM products WHERE products.ID IN(%s)",
$idList
);
这是产品ID列表的单个查询。当您从数据库中获取数据时,您可以动态创建内存数据库(也称为 Hashtable ),以便您可以根据ID“获取”数据:
foreach($ids as $id)
{
$concreteProduct = $rows[$id];
...
}
您也知道它为array
,只是从数据库返回的ID值键入。由于ID是唯一的,这只适用于 tm 。
希望这有帮助。有些可能会称之为过早优化,但是,您应该了解这个概念,因为这可以在很多情况下使用。