Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/275.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php MySQL返回所有结果而不复制数据_Php_Mysql_Str Replace_Explode - Fatal编程技术网

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