如何从mysql select中分离结果

时间:2014-09-17 00:13:22

标签: php mysql

我为这个初学者问题道歉,但不幸的是这是我的水平。

我的工作网页相当简单,它是一个index.php页面,打开后会转到数据库并检索某个列的内容。然后将结果放在下拉选择列表中。

这是我的问题,此列是客户的材料清单。一些客户拥有超过1种不同类型的材料,而其他客户则有一种。

因此我的选择列表可能如下所示: Apple / n 橙子;苹果;香蕉/ N 香蕉;桃子 橙/ N

我正在努力想出一些东西,当我从mysql数据库中提取数据时,我的php会分离材料并且只提供唯一的项目。

以下是我创建选项列表的代码:

<p><select size="1" name="material" ID="material" onChange="showfield(value);">
<option value=''>&lt;None&gt;</option>;
<?php
while ($row = mysql_fetch_array($query))
{
     $rowmod = strtr($row['material']," ","_");
     echo "<option value='$rowmod'>$row[material]</option>";    
}
?>

这是我的mysql选择:      $ query =“从材料中选择TABLE-A订单中的不同材料”;

更新

我认为我的Mysql是对的,我想我玩的是php strtr,我能够删除;并添加行,但现在我不知道如何让它循环并创建我的

这是新代码:     $行[产品]“;
    }     ?&GT; 我的$ row的一些输出只有一个产品,有些会有2个或更多,我想我是否必须在$ rowmod之后再放一个while循环?

我感觉我很亲近,但希望得到一些指导。

2 个答案:

答案 0 :(得分:1)

首先,您应该创建一个material表,使用auto_increment ID编制索引,并在列TABLE-A中调用material_id的内容中使用该ID。就像那样,你将在一张专用的表中列出一个独特的材料列表,你甚至可以在这里添加一些列来获取材料的细节等。

然后我不确定您的需求/用例,但看起来您需要一个customer_material表来链接客户及其材料,以便您知道哪个客户使用哪种材料。它将自动递增id,因为它应始终用于任何表以获得更好的实践,customer_idmaterial_id,并在最后两列上都有唯一索引({ {1}} + customer_id)确保您只将一种材料与一位客户相关联一次,而不是将同一客户的每种材料连接多次。

然后,当您需要列出给定客户的材料时,只需使用此查询:

material_id

如果您需要唯一列出所有材料,那么您将需要此查询:

select m.id, m.name
  from customer_material cm
  join material m on cm.material_id = m.id
 where cm.customer_id = YOUR_CUSTOMER_ID

瞧。由于我不确定您的用例,数据库的模式可能会有所不同,但我认为无论如何,您的问题中的主要问题是数据库没有很好的架构。 Lemme知道我有什么不清楚的地方。

答案 1 :(得分:0)

您提到不同的客户有不同的材料,但这并没有反映在您的SQL查询中,因为没有WHERE子句,这意味着无论条件如何,您都要从材料表中选择所有唯一值。但除此之外,我认为如果你稍微改变你的代码,你会得到一些数据。

$query="select distinct `material` from `TABLE-A` order by material"

<p><select size="1" name="material" ID="material" onChange="showfield(value);">
<option value=''>&lt;None&gt;</option>;
<?php
while ($row = mysql_fetch_assoc($query))
{
     $rowmod = strtr($row['material']," ","_");
     echo "<option value='$rowmod'>$row['material']</option>";    
}
?>