【发布时间】:2023-03-16 18:21:01
【问题描述】:
这是我的数据
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 顺序将它们拆分到一个列表中,但没有它们重复 - 这可能与我的客户设置有关吗?只是需要一些方向?想explode 和replace 然后我们使用ORDER BY ASC 命令?
【问题讨论】:
-
是否允许数据库规范化?如果是这样,我建议创建两个新表:
colors(colorId, colorName)和products_colors(productId, colorId)来关联产品和可用颜色。 -
最好是使用正确的实体关系,没有字符串:(
标签: php mysql str-replace explode