Php 映射具有相似名称的产品
我正试图找到一个好的解决方案,以实现以下目标: 我有一个表,其中包括各种产品的名称,例如:Php 映射具有相似名称的产品,php,sql,Php,Sql,我正试图找到一个好的解决方案,以实现以下目标: 我有一个表,其中包括各种产品的名称,例如: “潮水原味”。 此外,我也有在那里的金额,例如50液盎司 我现在遇到的问题是,产品不仅装在50液盎司的容器中,而且还有不同尺寸的容器,如75液盎司和100液盎司。对于每种容器,我在产品表中都有新行: id| productName | amount | unit 1 |"Tide - Original Scent" | 50 | "fl oz" 2 |"Tide -
“潮水原味”。
此外,我也有在那里的金额,例如50液盎司 我现在遇到的问题是,产品不仅装在50液盎司的容器中,而且还有不同尺寸的容器,如75液盎司和100液盎司。对于每种容器,我在产品表中都有新行:
id| productName | amount | unit
1 |"Tide - Original Scent" | 50 | "fl oz"
2 |"Tide - Original Scent" | 75 | "fl oz"
3 |"Tide - Original Scent" | 100 | "fl oz"
现在我有了一个web界面,可以在这个表上执行搜索,每当我搜索“tide”时,我都会得到所有三行——当然,这应该是这样的。然而,我想要一种不同的行为,这就是我需要你帮助的地方:
我希望只返回一行,而不是全部返回三行。然后,我需要能够在php中处理它,这样,如果用户单击“Tide-Original Scene”,就会提示用户选择大小
要使任务更加复杂,请执行以下操作:
我在同一个表中也有名为:“潮水-山泉”。
在这种情况下,最好能建立一些关系,这样我就知道“潮-原味”和“潮-山泉”是联系在一起的。在php中,我不仅想让用户选择大小,还想让用户选择(在本例中)气味 您对我如何实现这一点有什么建议(不是php部分)?
您的数据库是什么样子的?
我是否需要创建一个映射这些产品的表?如果您要创建以下内容,这将是什么样子:)创建子标签的外键,并使用计数器对其排序。这看起来像 产品表:
- 产品ID(密钥)
- 品牌标识
- 价格
- 品牌识别码(钥匙)
- 烙印
- 身份证
- 产品ID
- 订单索引
- 价值观
- 尺寸ID
- 价值观
- 单位
- 尺寸ID
- 产品ID
10 | 6 | 1.99
11 | 6 | 2.99
12 | 6 | 3.99
13 | 6 | 1.99
14 | 6 | 2.99
15 | 6 | 3.99
烙印
子标签
30 | 10 | 1 | Original Scent
30 | 11 | 1 | Original Scent
30 | 12 | 1 | Original Scent
30 | 13 | 1 | Mountain Spring
30 | 14 | 1 | Mountain Spring
30 | 15 | 1 | Mountain Spring
尺寸表
1 | 50 | fl.oz.
2 | 75 | fl.oz.
3 | 100 | fl.oz.
1 | 10
1 | 13
2 | 11
2 | 14
3 | 12
3 | 15
产品尺寸表
1 | 50 | fl.oz.
2 | 75 | fl.oz.
3 | 100 | fl.oz.
1 | 10
1 | 13
2 | 11
2 | 14
3 | 12
3 | 15
创建子标签的外键,并使用计数器对其排序。这看起来像 产品表:
- 产品ID(密钥)
- 品牌标识
- 价格
- 品牌识别码(钥匙)
- 烙印
- 身份证
- 产品ID
- 订单索引
- 价值观
- 尺寸ID
- 价值观
- 单位
- 尺寸ID
- 产品ID
10 | 6 | 1.99
11 | 6 | 2.99
12 | 6 | 3.99
13 | 6 | 1.99
14 | 6 | 2.99
15 | 6 | 3.99
烙印
子标签
30 | 10 | 1 | Original Scent
30 | 11 | 1 | Original Scent
30 | 12 | 1 | Original Scent
30 | 13 | 1 | Mountain Spring
30 | 14 | 1 | Mountain Spring
30 | 15 | 1 | Mountain Spring
尺寸表
1 | 50 | fl.oz.
2 | 75 | fl.oz.
3 | 100 | fl.oz.
1 | 10
1 | 13
2 | 11
2 | 14
3 | 12
3 | 15
产品尺寸表
1 | 50 | fl.oz.
2 | 75 | fl.oz.
3 | 100 | fl.oz.
1 | 10
1 | 13
2 | 11
2 | 14
3 | 12
3 | 15
2种可能性:
不要将尺寸与其他特定信息一起存储在该表中。把它移到另一张桌子上。你的结构
或
只查询名称。对于“大小”列,执行计数(金额)。如果它不止一个,那么您可以用选项填充下拉列表。这是一个很好的临时解决方案
SELECT productName, count(amount) AS numOfChoices FROM YOUR_TABLE
WHERE LOWER(productName) LIKE 'tide%'
GROUP BY productName
然后在做出选择之后
SELECT id, amount FROM YOUR_TABLE
WHERE id = "$selectedId"
提供一种尺寸选择,以确定哪种尺寸。2种可能性:
不要将尺寸与其他特定信息一起存储在该表中。把它移到另一张桌子上。你的结构
或
只查询名称。对于“大小”列,执行计数(金额)。如果它不止一个,那么您可以用选项填充下拉列表。这是一个很好的临时解决方案
SELECT productName, count(amount) AS numOfChoices FROM YOUR_TABLE
WHERE LOWER(productName) LIKE 'tide%'
GROUP BY productName
然后在做出选择之后
SELECT id, amount FROM YOUR_TABLE
WHERE id = "$selectedId"
要提供一个尺寸选择,以确定哪一个。我个人会这样设置我的表格 产品表:
ID| Product ID | Product Name | Description
1 | 0404888282 | Tide - Original Scent | Smells Good
数量表:
ID| Product ID | Size| Price | Quantity
1 | 0404888282 | 50 | 4.99 | 23
2 | 0404888282 | 75 | 5.99 | 120
3 | 0404888282 | 100 | 7.99 | 10
在这个结构中,每个独特的项目都有一个表,每个尺寸的大小和数量都有另一个表。保持结构整洁,易于理解。我个人会这样设置我的表格 产品表:
ID| Product ID | Product Name | Description
1 | 0404888282 | Tide - Original Scent | Smells Good
数量表:
ID| Product ID | Size| Price | Quantity
1 | 0404888282 | 50 | 4.99 | 23
2 | 0404888282 | 75 | 5.99 | 120
3 | 0404888282 | 100 | 7.99 | 10
在这个结构中,每个独特的项目都有一个表,每个尺寸的大小和数量都有另一个表。保持结构清晰易懂。“我不想全部返回三行,只想返回一行。”
您需要在LOWER(productName)
上建立一个功能索引才能获得良好的性能。或者,可以在支持该排序的DBMS(例如MS SQL Server)上使用不区分大小写的排序规则序列
“然后,我需要能够在php中处理它,这样,如果用户单击“Tide-Original Scene”,就会提示用户选择大小。”
“为了增加任务的复杂性:我在同一个表中还有产品,名为:
“潮水-山泉”
上面的查询也将返回该行。“我不想返回所有三行,只想返回一行。”
您需要在LOWER(productName)
上建立一个功能索引才能获得良好的性能。或者,可以在支持该排序的DBMS(例如MS SQL Server)上使用不区分大小写的排序规则序列
“然后,我需要能够在php中处理它,这样,如果用户单击“Tide-Original Scene”,就会提示用户选择大小。”
“为了增加任务的复杂性:我在同一个表中还有产品,名为:
“潮水-山泉”
上面的查询也将返回该值。您可以做的是:
$Query = 'SELECT productName, amount, unit FROM products';
$Data = array();
while($Assoc = mysql_fetch_assoc($Query)){
if(!isset($Data[$Assoc['productName']])){
$Data[$Assoc['productName']] = array();
}
$Size = $Assoc['amount'].' '$Assoc['unit'];
$Data[$Assoc['productName']][] = $Size;
}
// Now what you can do is :
foreach($Data as $ProductName => $Amount){
echo $ProductName.' has :<br />';
if(count($Amount) > 0){
foreach($Amount as $Key => $Value){
echo $Value.'<br />';
}
} else {
echo 'Nothing<br />';
}
}
$Query='从产品中选择产品名称、金额、单位';
$Data=array();
while($Assoc=mysql\u fetch\u Assoc($Query)){
如果(!isset($Data[$Assoc['productName']])){
$Data[$Assoc['productName']]=array();
}
$Size=$Assoc['amount'.'''.$Assoc['unit'];
$Data[$Assoc['produc]