猿问

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 这样的数据库,并且发布数据也像这样.


慕神8447489
浏览 76回答 3
3回答

陪伴而非守候

直接从 MySQL 处理您当前的数据模型可能需要一些 SQL olympics。相反,我将提供一个更好的规范化数据结构:id&nbsp;|&nbsp;size ------------ &nbsp;1&nbsp;|&nbsp;S &nbsp;1&nbsp;|&nbsp;M &nbsp;2&nbsp;|&nbsp;S &nbsp;2&nbsp;|&nbsp;M &nbsp;2&nbsp;|&nbsp;L &nbsp;3&nbsp;|&nbsp;S &nbsp;4&nbsp;|&nbsp;M &nbsp;4&nbsp;|&nbsp;L现在,如果您想获得不同的尺寸,您只需要:SELECT&nbsp;DISTINCT(size)&nbsp;FROM&nbsp;shirtsize;如果您想获得每个尺寸的计数id,只需使用:SELECT&nbsp;id,&nbsp;COUNT(*)&nbsp;AS&nbsp;cnt&nbsp;FROM&nbsp;shirtsize&nbsp;GROUP&nbsp;BY&nbsp;id;通常,切勿将 CSV 数据存储在 SQL 表中。

千万里不及你

首先,我加倍@Tim Biegeleisen 建议您规范化您的数据。但是,您可以通过使用 FIND_IN_SET() 函数而不是 LIKE 来实现结果。SELECT&nbsp;* &nbsp;FROM&nbsp;`shirtsize`&nbsp; WHERE&nbsp;FIND_IN_SET('S',&nbsp;`size`)该函数返回字符串在字符串列表中从 1 开始的位置。如果未找到字符串,则为 NULL。https://dev.mysql.com/doc/refman/8.0/en/string-functions.html#function_find-in-set

慕莱坞森

谢谢各位 我有答案了SELECT&nbsp;*&nbsp;FROM&nbsp;products&nbsp;WHERE&nbsp;status&nbsp;=&nbsp;'1'&nbsp;AND&nbsp;size&nbsp;like('%L%')&nbsp;OR&nbsp;size&nbsp;like('%M%')或者SELECT&nbsp;size&nbsp;from&nbsp;`products`&nbsp;WHERE&nbsp;size&nbsp;rlike&nbsp;"L|M"
随时随地看视频慕课网APP
我要回答