-1

所以我有db table>“schools”和这个表中名为“metro”的列。在“地铁”中,我有类似“站名 1,站名 2,站名 5”的字符串

我现在正在做一个带有选择地铁站的搜索表单,所以我的代码如下所示:

<select name="categoryID">
<? 

$metro_sql=mysql_query("SELECT metro FROM schools");
while($metro=mysql_fetch_array($metro_sql)){
    $metro_pieces = explode(", ", $metro['metro']);
        foreach (array_unique($metro_pieces, SORT_REGULAR) as $metro_all) {
             echo "<option value=\"".$metro_all."\">".$metro_all."</option>\n  ";
    }
}

结果:地铁站 1 地铁站 2 地铁站 3 地铁站 1 地铁站 4 地铁站 5 等等。我做错了什么?ps对不起我的英语。

4

2 回答 2

2

有一个逻辑问题。
严格来说,您不能说“array_unique 不起作用”。
仅仅因为涉及到十几个其他功能。
而且你不知道这个函数是否提供了正确的数据。

你必须学会​​调试你的代码。
将调试输出添加到您的代码并验证每个变量的状态以查看它是否包含所需的数据。

var_dump($metro);循环内部开始

于 2011-11-20T10:48:01.347 回答
1

我会建议一个更好的数据库设计。

CREATE TABLE school (
  school_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
  name VARCHAR(255)
);

CREATE TABLE station (
  station_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
  name VARCHAR(255)
);

CREATE TABLE metro (
  school_id INT NOT NULL,
  station_id INT NOT NULL,
  UNIQUE INDEX (school_id, station_id)
);

您在 中创建学校school和站点station。当您需要将学校链接到电台时,您可以将记录添加到metro. 这使数据库标准化

当您需要获取这些站点时,您只需执行以下操作:

SELECT station.* 
FROM metro
INNER JOIN station
ON metro.station_id = station.station_id
WHERE metro.school_id = $school_id
于 2011-11-20T11:00:26.630 回答