Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/241.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用PHP和MySQL组合具有相同标题的多行或结果以形成下拉菜单_Php_Mysql - Fatal编程技术网

使用PHP和MySQL组合具有相同标题的多行或结果以形成下拉菜单

使用PHP和MySQL组合具有相同标题的多行或结果以形成下拉菜单,php,mysql,Php,Mysql,因此,我选择了一个项目,上一个家伙中途退出了这个项目,以便我可以更多地练习PHP和数据库。我遇到了一个问题,我确信有一个标准的解决方案是很常见的,但我找不到 我工作的db有4600个,所以重组是不可能的。这是一个批发商的酒类数据库。以下是当前结果页面的外观: 我正在尝试设置它,以便以列表形式返回结果,对于不同尺寸/价格的产品,只有一个标题和下拉菜单,如下所示: -- this would get you your products select distinct id, property1,

因此,我选择了一个项目,上一个家伙中途退出了这个项目,以便我可以更多地练习PHP和数据库。我遇到了一个问题,我确信有一个标准的解决方案是很常见的,但我找不到

我工作的db有4600个,所以重组是不可能的。这是一个批发商的酒类数据库。以下是当前结果页面的外观:

我正在尝试设置它,以便以列表形式返回结果,对于不同尺寸/价格的产品,只有一个标题和下拉菜单,如下所示:

-- this would get you your products
select distinct id, property1, property2 from product

-- this would get you your drop downs by product
select id, size from product order by id

问题是每个产品的数据库中都有多个条目。在这个例子中有3个,而有些有1个,有些有2个


我真的不知道该怎么做,任何帮助都将不胜感激。多谢各位

我不确定这是否是最好的方法,但我总是通过修改查询以按产品名称排序来实现这一点。然后,当您遍历这些行时,检查产品名称是否与您刚刚处理的产品名称匹配。如果是相同的,那么这一行是同一项目的不同大小。

我不确定PHP语法,但伪代码您可以做以下几点:

allProductsReturnedFromMySQL = QueryYourDatabaseForAllProducts()
Hashtable[productId, List[productSizes]] dropDownsByProduct;
Hashtable[productId, commonProductInformation] uniqueProducts;

foreach (product in allProductsReturnedFromMySQL) {
    if product.productId not in uniqueProducts
        then add it with the product information that does not vary

    if product.productId not in dropDownsByProduct
        then add it with an empty list

    append the size of this product to the corresponding list in dropDownsByProduct
}
在这一点逻辑之后,您将拥有所有独特的产品,每个产品都具有相同的属性,并且有一种方法可以从下拉列表中获取相应的大小。如果只想在SQL中执行此操作以最小化传输的数据,可以执行以下操作:

-- this would get you your products
select distinct id, property1, property2 from product

-- this would get you your drop downs by product
select id, size from product order by id

然后,您可以通过迭代第二个结果集来构建相同的下拉哈希表。

其中一个潜在问题是可维护性。如果有人出现,并决定按上次更新的产品排序,而他们不知道您获取下拉列表的逻辑,他们将有点不知所措。这没什么大不了的,但可能符合技术债务的条件。@Milimetric:没错,但一个仔细放置的注释会有所帮助:-)我认为这是一个问题,在这些问题中,总会有某种形式的缺陷。这种方法的一个缺陷是,由于您将整个数据库表加载到内存中,它也不会扩展。但是如果你有一个小的数据库或一个大的服务器,那么它肯定能完成任务。你可以在SQL中做同样的事情,我会编辑来解释。哈哈哈,是的,这真的是最简单的方法-我对此感到不安:)如果产品有那么大的尺寸,你可以调整尺寸并选择1或0,但这有点太复杂了。我也不确定数据透视在MySQL中的表现如何。但这是一种“正确”的方法。问题实际上是数据模型没有规范化,但问题排除了重构该模型的选项。