这是我的数据
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/