我正在填充数据库中的选择字段。但是,许多行在同一列中具有相同的值。如何防止选择字段中的重复值?
目前,我有这个
$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>
如何防止这种情况?
答案 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
?无需传输超出需要的数据。