PHP防止while循环中的重复

时间:2013-10-21 12:02:30

标签: php mysql sql pdo

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

目前,我有这个

$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>

如何防止这种情况?

2 个答案:

答案 0 :(得分:7)

您只想要DISTINCT列值吗?

SELECT DISTINCT column FROM table WHERE UserID = ?

假设您的代码准确无误,您不需要从表中选择所有代码(*),因为您只使用Column m,因此使用SELECT DISTINCT Column就足够了从Column

中恢复重复数据删除的结果和值

答案 1 :(得分:1)

多种方式。

在查询中使用GROUP BY SQL语句:

$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?无需传输超出需要的数据。