php - 使用 PHP 爆炸来自 mysql 的数据

标签 php mysql

我有一个数据库表,其中存储外部 xml 文件中的所有值。由于我的项目要求要求我处理这些非标准化数据。我需要帮助以适当的方式提取数据。

我有两个网页(一个用于类别),一个用于产品。我的数据库表如下所示:

**product_id       Code        Name                   ProductRange         ProductSubRange         WebCategory**

   1               1002        Lid 30l                  Crystal;Uni         LIDs                    Household products

   2               10433       Casa Basket Silver       Casa                Casa Hipster BASKET      Kitchenware

   3               17443       Casa Basket Ice White    Casa;Laundry         LAUNDRY BASKET         Laundry products

   4               13443       Garden tub               Eden                Eden Garden Pots        Household products

   5               199990       Black Lid 201          Crystal             Crystal Lids            Household products

属于多个productRange的产品用分号(;)表示。例如,上面的产品 ID 1 名称为“Lid 301”,属于两个产品范围“Crystal”和“Uni”。 Product_id 3 也是如此。但是,产品 2 属于单个 ProductRange。

我的问题:

1) 如何构建查询,以便它可以根据“Webcategory”的 query_string 值返回“ProductRange”?例如: 如果我从查询字符串中获取“Household Products”作为我的 WebCategory,它可能会给我这样的区别:

      Household Products
                       |-Crystal
                       |-Uni 
                       |-Eden

      Laundry Products
                       |-Casa
                       |-Laundry 

            Kitchenware
                       |-Casa

2) 基于提取的ProductRanges,我想根据产品范围和网络类别在我的网页中单独显示产品。例如,如果我从上面选择“Crystal”,它可以给我分别带有product_id“1”和“5”的产品,如下所示:

  Household Products|
                    |-Crystal
                             |-Lid 301 (product_id=1)
                             |-Balck Lid 201 (product_id=5)

                    |-Uni
                             |-Lid 301 (product_id=1)

                    |-Eden
                             |-Garden Tub


         Kitchenware|
                    |-Casa
                          |-Casa Basket silver


    Laundry Products|
                    |-Casa
                            |-Casa Basket Ice White
                    |  
                    |-Laundry
                            |-Casa Basket Ice White

任何人都可以指导我如何从数据库中检索记录以及作为编程新手我需要做什么?如果有人能在这方面帮助我,我将不胜感激。

最佳答案

为了根据给定的 WebCategory 输入 = 'XYZ' 获得不同的产品范围,您可以使用以下内容 - 不要被数字表吓倒,它只是一个有用的表,其中包含每行的整数值从1 ... 最多 N,其中 N 是 ProductRange 列中的最大字符数。这些可以手工制作,也可以使用特殊的插入/选择查询,如下所示: http://www.experts-exchange.com/Database/MySQL/A_3573-A-MySQL-Tidbit-Quick-Numbers-Table-Generation.html

SELECT DISTINCT  
SUBSTRING(ProductRange FROM number FOR LOCATE(';', ProductRange, number) - number) AS ProductRange  
FROM (  
    SELECT ProductRange, CASE number WHEN 1 THEN 1 ELSE number + 1 END number  
    FROM (  
        SELECT mydatabasetable.ProductRange, numberstable.number  
        FROM mydatabasetable  
        INNER JOIN numberstable  
        ON numberstable.number >= 1  
        AND numberstable.number <= CHAR_LENGTH(mydatabasetable.ProductRange)  
        WHERE WebCategory = 'XYZ'  
    ) TT  
    WHERE number = 1 OR (number + 1) <= CHAR_LENGTH(ProductRange)  
) TT  
WHERE SUBSTRING(ProductRange FROM number FOR 1) = ';'  
OR numberstable.number = 1;  

为了检索包含您网站的所有值 WebCategory、ProductRange 和 Product 的结果集,您可以使用从上述查询派生的以下稍微修改的版本。为了使结果一开始显得更有意义,我添加了一个 ORDER BY 子句,以将所有相同类别、相同产品范围的产品按顺序排列。这可能是需要的,也可能不是,因为您可能更喜欢在应用程序/服务器脚本代码中执行此操作。在这种情况下,您可以删除 ORDER BY 子句而不会造成任何损害。

SELECT WebCategory,  
SUBSTRING(  
    ProductRange  
    FROM number  
    FOR LOCATE(';', ProductRange, number) - number  
) AS ProductRange,  
Product  
FROM (  
    SELECT WebCategory, ProductRange, Product,  
    CASE number  
    WHEN 1 THEN 1  
    ELSE number + 1  
    END number  
    FROM (  
        SELECT WebCategory, ProductRange, Product, numberstable.number  
        FROM mydatabasetable  
        INNER JOIN numberstable  
        ON numberstable.number >= 1  
        AND numberstable.number <= CHAR_LENGTH(ProductRange)  
    ) TT  
    WHERE number = 1 OR (number + 1) <= CHAR_LENGTH(ProductRange)  
) TT  
WHERE SUBSTRING(ProductRange FROM number FOR 1) = ';'  
OR numberstable.number = 1  
ORDER BY WebCategory, ProductRange, Product  

关于php - 使用 PHP 爆炸来自 mysql 的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13551131/

相关文章:

php - 将数组数据插入 mysql 表的高效 php 代码?

mysql - Docker-compose:数据库未初始化

javascript - 客户端和服务器端编程有什么区别?

php - 水平显示Mysql表结果

php - 在PHP中获取任意协议(protocol)的标准端口

php - 我的 PHP CURL SSL 调用中真的忽略了我的 key 吗?

c++ - 找不到 mysql.h 文件

mysql - 如何查询 sql 以获取每个用户的最新记录日期和时间

php - 我可以将值添加到名称也是变量的数组中的变量键吗?

php - 如何将结果从 MySQL 存储到 PHP 数组?