php - MySQL 返回所有结果而不重复数据

标签 php mysql str-replace explode

这是我的数据

id          cost    cat         foreign     colours
--------------------------------------------------------   
385_white   99      swarovski   12          black;blue
386_white   99      swarovski   12          black;blue;green
387_white   99      swarovski   12          yellow;green
389_white   99      swarovski   12          white;silver
385_white   99      swarovski   12          silver

这是我的查询

$checkSQL=mysql_query("SELECT * FROM `products`");
while($r = mysql_fetch_assoc($checkSQL)) {

    echo '<ul class="ColourList">';
    $cols = explode( ';', $r['colours'] );
    foreach ( $cols as $col ){
        echo '<li class="' . $col . '">' . $col . '</li>';
    }
    echo '</ul>';
}

这基本上返回每条记录的颜色列表

<ul>
 <li>black</li>
 <li>blue</li>
</ul>

但是我想为整个数据库中的每种颜色返回一个列表并将其按字母顺序排列。所以基本上获取所有行中的所有颜色,将它们按 ABC 顺序分成一个列表,但不要重复 - 这可能与我的客户设置有关吗?只需要一些指导?考虑用 replace explode 然后我们使用 ORDER BY ASC 命令?

最佳答案

这是一个很好的例子,说明如果您不规范化您的数据库会发生什么。起初这似乎很容易,但后来就会遇到麻烦。

像这样改变你的表格:

产品:

id          cost    cat         foreign     
--------------------------------------------   
385_white   99      swarovski   12     

产品颜色:

id          color_id     
----------------------
385_white   1                
385_white   2

颜色:

id          name     
----------------------
1           Black     
2           Blue

如果你有这样的结构,就可以很容易地从数据库中查询你想要的东西。

例子:

查询所有可用颜色:

select * from colors

查询 385_white 的所有可用颜色:

select * from productcolors where id = '385_white'

关于php - MySQL 返回所有结果而不重复数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12686743/

相关文章:

php - 如何从字符串中查找特定值

mysql - 如何仅在包含特定值时显示 SQL 数据

php - mysql_query 连接 NULL 结果,但我已经连接成功

MYSQL - 查询获取不同的发送者ID和接收者ID以及richesta_id

php - 如何使用 str_replace 在 PHP 字符串中添加双引号字符

javascript - 将 JSON Key 设置为在循环内递增

php 将图像与其在不同位置的翻转和旋转 View 合并

PHP报错: some errors to screen,全部记录

php - 替换 PHP 中标记之间的许多代码行

Python搜索字符模式,如果存在则缩进