我的结果是吐出每条记录的副本而不是唯一的foreach匹配。正如您所看到的,我正在尝试循环并获取每个唯一值 WHERE $ s = id ..我知道查询需要位于 while(),< / p>
数组$研讨会从我表单上的复选框传递。
if ($seminar) {
foreach ($seminar as $s)
$interest .= "$s ";
}
注意: $ interest 是我用来插入表格的(这不是这个问题的一部分)
对于数组数据,这是 $ seminar
返回的内容Array
(
[0] => 1
[1] => 8
[2] => 9
[3] => 10
[4] => 13
)
这是我的代码:
$query_seminars = mysql_query("SELECT id, name, UNIX_TIMESTAMP(moment) FROM seminars WHERE id={$s}");
while ($sem_row = mysql_fetch_assoc($query_seminars))
{
$names .= "-- " . $sem_row['id'] . " " . $sem_row['name'] . date('D, F j, Y, g:i a', $sem_row['moment']) . "<br />";
}
答案 0 :(得分:5)
你不需要while循环中的foreach,这里:
$query_seminars = mysql_query("SELECT id, name, UNIX_TIMESTAMP(moment) FROM seminars WHERE id={$s}");
while ($sem_row = mysql_fetch_assoc($query_seminars))
{
$names .= "-- " . $sem_row['id'] . " " . $sem_row['name'] . date('D, F j, Y, g:i a', $sem_row['moment']) . "<br />";
}
另外,要使用命名索引,请使用mysql_fetch_assoc
,而不是mysql_fetch_array
。 (已在上面的代码中)
答案 1 :(得分:1)
问题不在于MySql返回重复(实际上是三重)项目。问题在于,正如其他人指出的那样,您正在使用foreach
迭代每条记录。
与MySql一起使用的一个常用习惯是:
$sql = "SELECT id, name, UNIX_TIMESTAMP(moment) FROM seminars WHERE $s=id";
if ($q = mysql_query($sql)) {
while ($f = mysql_fetch_assoc($q)) {
//($f is an associative array of the record value,
//with keys for each field)
//... do something with $f
echo "--" . htmlspecialchars($f['name'])
. date('D, F j, Y, g:i a', $f['moment'])
. "<br /><br />";
}
} elseif ($e = mysql_error()) {
//do something with the error message
//...
}
您看到“重复”,因为您在while循环中使用foreach
来迭代返回记录的每个字段。由于您的查询返回的记录包含三个字段( id , name 和 moment ),因此您将处理每个记录三次。