0

我正在从数据库中填充一个选择字段。但是,许多行在同一列中具有相同的值。如何防止选择字段中的重复值?

目前,我有这个

$q = "SELECT * FROM table WHERE UserID = ?";
$smt = $db->prepare($q);
$smt->execute(array($userid));
while($row = $smt->fetchObject()){
     echo '<option value="'. $row->Column. '">'.$row->Column.'</option>';
}

它将为数据库中与查询匹配的每一行回显一个新选项。在这种情况下,它可能是这样的。

<option value="Value1">Value1</option>
<option value="Value1">Value1</option>
<option value="Value2">Value2</option>
<option value="Value1">Value1</option>

我该如何防止这种情况?

4

2 回答 2

7

你只想要DISTINCT列值吗?

SELECT DISTINCT column FROM table WHERE UserID = ?

假设您的代码是准确的,您不需要*从表中选择所有 ( ),因为您只使用Columnm 因此 usingSELECT DISTINCT Column足以从 Column 带回去重结果和值

于 2013-10-21T12:03:41.450 回答
1

多种方式。

在查询中使用GROUP BYSQL 语句:

$q = "SELECT * FROM table WHERE UserID = ? GROUP BY Column";

或使用数组在 PHP 中执行此操作:

$columns = array();
while($row = $smt->fetchObject()){
     if (!isset($columns[$row->Column])) {
          echo '<option value="'. $row->Column. '">'.$row->Column.'</option>';
          $columns[$row->Column] = true;
     }
}

注意:也就是说,您真的需要所有列吗?你就不能SELECT Column吗?无需传输比需要更多的数据。

于 2013-10-21T12:04:40.610 回答