我正在制作一个需要根据位置整理产品的应用程序。提供主要产品表,可用于从每个位置引用。每个位置可以对主产品表具有不同的参考集。
例如:area_1可以有product_1但不能有product_5。
我正在考虑两种方法:
How to write a mysql function with dynamic table name? ,此链接有助于动态表名的使用,但也表示不使用它,但我无法找到任何进一步的解释。
产品数据可以是10万个条目,区域数据最多可以是300个条目。两者都很可能会随着时间的推移而增加。
最好的方法是什么?还有其他选择吗?
答案 0 :(得分:0)
出于多种原因,你的想法都很糟糕。
您应该有一个产品表,其中根本没有区域信息。
然后,您创建一个包含area
和product_id
假设您有北/南/东/西
区域表名= area_product
area | product_id
North | 1
North | 2
North | 5
South | 1
South | 2
South | 6
等等。然后,您只需学习如何在查询语法中使用JOIN。
SELECT p.*
FROM product p
JOIN area_product ap ON p.id = ap.product_id
WHERE ap.area = 'North'
此结构的另一个好处是,您可以向此交叉参考表添加有用的信息仅供参考,假设您希望仅在某个区域中的特定日期之后才能使产品可用。
area | product_id | start_selling
North | 1 | 2016-01-01
North | 2 | 2016-01-01
North | 5 | 2016-07-01
South | 1 | 2016-01-01
South | 2 | 2016-07-01
South | 6 | 2016-01-01
现在,要查找北区的所有可用产品,只需在条件中添加日期
即可SELECT p.*
FROM product p
JOIN area_product ap ON p.id = ap.product_id
WHERE ap.area = 'North'
AND ap.start_selling < NOW()