首页 > 解决方案 > Mysql 使用 php 按大小获取产品

问题描述

过滤器的输入

使用过滤器选项按尺寸获取产品。

这是产品数据库结构:

id | size
------------
 1 | S,M
 2 | S,M,L
 3 | S
 4 | M,L

这是 Shirtsize 数据库结构:

id | size
------------
 1 | S
 2 | M
 3 | L

这是过滤器的输入值获取代码

<div class="list-group">
  <h3>Size</h3>
    <?php
       $query = "SELECT DISTINCT(shirtsize) FROM shirtsize ORDER BY id DESC";
       $statement = $connect->prepare($query);
       $statement->execute();
       $result = $statement->fetchAll();
       foreach($result as $row)
       {
        ?>
       <div class="list-group-item checkbox">
        <label>
          <input type="checkbox" class="common_selector size" value="<?php echo $row['shirtsize']; ?>"> 
           <?php echo $row['shirtsize']; ?>
        </label>
       </div>
    <?php
      }
     ?>  
</div>

此代码从数据库中获取值:

if(isset($_POST["size"]))
{
    $size_filter = implode("','", $_POST["size"]);

    if (is_array($size_filter))
    {
        foreach ($size_filter as $value)
        {
           $query .= "AND size like('%".$value."%')";
        }
    }
    else{
    $query .= "AND size like('%".$size_filter."%')";
    }
}

在这里我有像 s,m,l 这样的数据库,并且发布数据也像这样.

标签: phpmysqlmysqli

解决方案


直接从 MySQL 处理您当前的数据模型可能需要一些 SQL olympics。相反,我将提供一个更好的规范化数据结构:

id | size
------------
 1 | S
 1 | M
 2 | S
 2 | M
 2 | L
 3 | S
 4 | M
 4 | L

现在,如果您想获得不同的尺寸,您只需要:

SELECT DISTINCT(size) FROM shirtsize;

如果您想获得每个尺寸的计数id,只需使用:

SELECT id, COUNT(*) AS cnt FROM shirtsize GROUP BY id;

通常,切勿将 CSV 数据存储在 SQL 表中。


推荐阅读