我为这个初学者问题道歉,但不幸的是这是我的水平。
我的工作网页相当简单,它是一个index.php页面,打开后会转到数据库并检索某个列的内容。然后将结果放在下拉选择列表中。
这是我的问题,此列是客户的材料清单。一些客户拥有超过1种不同类型的材料,而其他客户则有一种。
因此我的选择列表可能如下所示: Apple / n 橙子;苹果;香蕉/ N 香蕉;桃子 橙/ N
我正在努力想出一些东西,当我从mysql数据库中提取数据时,我的php会分离材料并且只提供唯一的项目。
以下是我创建选项列表的代码:
<p><select size="1" name="material" ID="material" onChange="showfield(value);">
<option value=''><None></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循环?
我感觉我很亲近,但希望得到一些指导。
答案 0 :(得分:1)
首先,您应该创建一个material
表,使用auto_increment ID编制索引,并在列TABLE-A
中调用material_id
的内容中使用该ID。就像那样,你将在一张专用的表中列出一个独特的材料列表,你甚至可以在这里添加一些列来获取材料的细节等。
然后我不确定您的需求/用例,但看起来您需要一个customer_material
表来链接客户及其材料,以便您知道哪个客户使用哪种材料。它将自动递增id
,因为它应始终用于任何表以获得更好的实践,customer_id
和material_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=''><None></option>;
<?php
while ($row = mysql_fetch_assoc($query))
{
$rowmod = strtr($row['material']," ","_");
echo "<option value='$rowmod'>$row['material']</option>";
}
?>