Php MySQL返回所有结果而不复制数据
这是我的数据Php MySQL返回所有结果而不复制数据,php,mysql,str-replace,explode,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
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
id name
----------------------
1 Black
2 Blue
这是我的问题
$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>';
}
id name
----------------------
1 Black
2 Blue
$checkSQL=mysql\u查询(“从“产品”中选择*”;
而($r=mysql\u fetch\u assoc($checkSQL)){
echo';
$cols=爆炸(“;”,$r['colors']);
foreach($cols作为$col){
回显“- ”.$col.
”;
}
回声“
”;
}
这基本上返回每个记录的颜色列表
<ul>
<li>black</li>
<li>blue</li>
</ul>
id name
----------------------
1 Black
2 Blue
- 黑色的
- 蓝色的
然而,我想返回一个单一的列表,对于每种颜色,我都会检查整个数据库并按字母顺序排列。因此,基本上得到所有的颜色,在所有的行中,按ABC顺序将它们分割成一个列表,但不重复它们-这在我的客户设置中是可能的吗?只是需要一些指导?使用
replace
分解,然后使用ORDER BY ASC
命令?这是一个很好的例子,说明了如果不规范化数据库会发生什么。一开始似乎很容易,但后来遇到了麻烦
id name
----------------------
1 Black
2 Blue
按以下方式更改您的表:
id name
----------------------
1 Black
2 Blue
产品:
id cost cat foreign
--------------------------------------------
385_white 99 swarovski 12
id name
----------------------
1 Black
2 Blue
产品颜色:
id color_id
----------------------
385_white 1
385_white 2
id name
----------------------
1 Black
2 Blue
颜色:
id name
----------------------
1 Black
2 Blue
如果您有这样的结构,那么很容易在数据库中查询您想要的内容
id name
----------------------
1 Black
2 Blue
例如:
id name
----------------------
1 Black
2 Blue
要查询所有可用颜色,请执行以下操作:
id name
----------------------
1 Black
2 Blue
select * from colors
要查询385_白色的所有可用颜色
:
id name
----------------------
1 Black
2 Blue
select * from productcolors where id = '385_white'
这是一个很好的例子,说明了如果不规范化数据库会发生什么。一开始似乎很容易,但后来遇到了麻烦
id name
----------------------
1 Black
2 Blue
按以下方式更改您的表:
id name
----------------------
1 Black
2 Blue
产品:
id cost cat foreign
--------------------------------------------
385_white 99 swarovski 12
id name
----------------------
1 Black
2 Blue
产品颜色:
id color_id
----------------------
385_white 1
385_white 2
id name
----------------------
1 Black
2 Blue
颜色:
id name
----------------------
1 Black
2 Blue
如果您有这样的结构,那么很容易在数据库中查询您想要的内容
id name
----------------------
1 Black
2 Blue
例如:
id name
----------------------
1 Black
2 Blue
要查询所有可用颜色,请执行以下操作:
id name
----------------------
1 Black
2 Blue
select * from colors
要查询385_白色的所有可用颜色
:
id name
----------------------
1 Black
2 Blue
select * from productcolors where id = '385_white'
SQL只运行一次,因此
id name
----------------------
1 Black
2 Blue
思维爆炸与替换,然后我们的命令由ASC命令
id name
----------------------
1 Black
2 Blue
做不到
id name
----------------------
1 Black
2 Blue
试试这个SQL
id name
----------------------
1 Black
2 Blue
SELECT * FROM `products` ORDER BY colours GROUP BY colours
这将按字母顺序排列颜色,然后按颜色分组将删除您正在谈论的重复项
id name
----------------------
1 Black
2 Blue
您还应该使用,将数据重组为颜色的一对多关系代码>作为分隔符是不好的,以后你会遇到真正的麻烦。SQL只运行一次,因此
id name
----------------------
1 Black
2 Blue
思维爆炸与替换,然后我们的命令由ASC命令
id name
----------------------
1 Black
2 Blue
做不到
id name
----------------------
1 Black
2 Blue
试试这个SQL
id name
----------------------
1 Black
2 Blue
SELECT * FROM `products` ORDER BY colours GROUP BY colours
这将按字母顺序排列颜色,然后按颜色分组将删除您正在谈论的重复项
id name
----------------------
1 Black
2 Blue
您还应该使用,将数据重组为颜色的一对多关系代码>作为分隔符是不好的,以后你会遇到真正的麻烦。如果你经常需要对你的“颜色”字段进行查询(而不是简单地选择*进行原始显示),这意味着你的字段应该设计成易于查询
id name
----------------------
1 Black
2 Blue
这意味着:不要在一个字段中存储多个条目,每当你需要查询和提取内容时,这会让你的生活变得艰难
id name
----------------------
1 Black
2 Blue
相反,创建一个“colors”表(color\u id,color\u name)
id name
----------------------
1 Black
2 Blue
以及一个“ArticleColor”表(article\u id,Color\u id)
id name
----------------------
1 Black
2 Blue
这样,每篇文章仍然可以有多种颜色,而且添加新颜色变得更容易。
您还可以使用标准SQL运行任何有关文章颜色的查询:如果您经常需要对“颜色”字段(而不是简单的原始显示选择*字段)进行查询,则检索不重复的颜色列表将与“从颜色中选择不同(颜色名称)”一样简单。,这意味着您的字段应该设计为易于查询
id name
----------------------
1 Black
2 Blue
这意味着:不要在一个字段中存储多个条目,每当你需要查询和提取内容时,这会让你的生活变得艰难
id name
----------------------
1 Black
2 Blue
相反,创建一个“colors”表(color\u id,color\u name)
id name
----------------------
1 Black
2 Blue
以及一个“ArticleColor”表(article\u id,Color\u id)
id name
----------------------
1 Black
2 Blue
这样,每篇文章仍然可以有多种颜色,而且添加新颜色变得更容易。
您将能够使用标准SQL运行关于文章颜色的任何查询:检索没有重复的颜色列表将与“从颜色中选择不同的(颜色名称)”一样简单。是否允许DB规范化?如果是这样,我建议创建两个新表:colors(colorId,colorName)
和products\u colors(productId,colorId)
来关联产品和可用的颜色。最好是使用适当的实体关系,不使用字符串:(是否允许DB规范化?如果是这样,我建议创建两个新表:colors(colorId,colorName)
和产品\u颜色(productId,colorId)
关联产品和可用颜色。最好使用正确的实体关系,无字符串:(按颜色分组的子句不会删除重复项。例如,以下值不同,并创建颜色重复项:黑色;蓝色和黑色;蓝色;绿色鉴于表的低能性质,这是OP将获得的最佳结果。@ADC我们最终做的基本上是对数据进行规范化。I无论如何,我都不想看到这样的解决方案。按颜色分组
子句不会删除重复项。例如,以下值不同,会创建颜色重复项:黑色;蓝色
和黑色;蓝色;绿色
鉴于表的低能性质,这是OP将获得的最佳结果。@ADC我们最终所做的基本上是对数据进行规范化。不管怎样,看到解决方案会很有趣。这就是我们最终所做的。基本上是对数据进行规范化。不管怎样,看到解决方案能做到这一点会很有趣。你最终会爬行到无穷无尽的数据量。这就是我们所拥有的最后做了,基本上正常化了
id name
----------------------
1 Black
2 Blue