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
  • 价值观
  • 单位
ProductSize表:

  • 尺寸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
  • 价值观
  • 单位
ProductSize表:

  • 尺寸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]