gpt4 book ai didi

php - 进行预先搜索

转载 作者:行者123 更新时间:2023-11-29 14:37:25 24 4
gpt4 key购买 nike

我的数据库中有一个字段:xfield
对于我在网站上的帖子(产品),此字段具有以下格式:

weight|3kg|year|2009|brand|samsung|monitorsize|13"|modem|yes

现在我想执行预先搜索。例如我想搜索 13"~ 15"之间的显示器尺寸
重量在1.5kg ~ 3.5kg之间

如何使用 php 制作该搜索页面?

最佳答案

您正在数据库中使用 CSV 数据,这是一个非常非常糟糕的主意,这会让您变得大胆(在此处插入拔头发的人的随机图片)。
切勿在数据库中使用 CSV,这是一种反模式。

相反,您需要做的是重构数据库设计,只在一个字段中放入一个值。
我猜您希望尽可能灵活。
在这种情况下,请使用实体属性值模型 (EAV)。

您的表格应如下所示:

table properties (

id unsigned integer auto_increment primary key,
product_id unsigned integer,
attribute varchar(20) not null,
astring varchar(100),
anumber decimal(10,2),
atype enum('string','integer','boolean','float'),
unit varchar(10) not null,
foreign key (product_id) references product(id) on update cascade on delete cascade,
foreign key (attribute) references attribute(name) on update cascade on delete cascade,
foreign key (unit) references unit(name) on update cascade on delete cascade
) ENGINE = InnoDB;

table unit (
name varchar(10) primary key -- "kg","inch",.......
) ENGINE = InnoDB;

table attribute (
name varchar(20) primary key -- allowed name for the attribute
) ENGINE = InnoDB;

外部表的链接可确保您的单位和属性是从有限的一致标识符池中选择的。

现在您可以使用如下方式查询数据库:

SELECT p.id, p.name 
FROM product p
INNER JOIN properties ps1 ON (ps1.product_id = p.id)
INNER JOIN properties ps2 ON (ps2.product_id = p.id)
WHERE ps1.attribute = 'monitorsize' AND ps1.anumber BETWEEN 13 AND 15
WHERE ps2.attribute = 'weight' AND ps2.anumber BETWEEN 1.5 AND 3.5

关于php - 进行预先搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8740193/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com