php foreach () w / MySQL WHERE w / while {} возвращает только последний элемент array () - PullRequest
0 голосов
/ 07 июля 2011

Мой результат - выплевывание дубликата каждой записи в отличие от уникального матча foreach. Как вы можете видеть, я пытаюсь выполнить цикл и получить каждое уникальное значение ГДЕ $ s = id .. Я знаю, что запрос должен быть в пределах while () ,

Массив $ передается с флажков в моей форме.

if ($seminar) {
    foreach ($seminar as $s)
        $interest .= "$s ";
}

ПРИМЕЧАНИЕ. $ интереса - это то, что я использую для вставки в таблицу (это не является частью этой проблемы)

Для данных массива это то, что возвращается $ semin *

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 />";

}

Ответы [ 2 ]

5 голосов
/ 07 июля 2011

Вам не нужен foreach в цикле while:

$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 голос
/ 07 июля 2011

Проблема не в том, что 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
//...
}

Вы видите «дубликаты», потому что вы используете foreach внутри цикла while для итерации по каждому полю возвращаемой записи. Поскольку ваш запрос возвращает записи с тремя полями в каждом ( id , name и moment ), каждая запись обрабатывается три раза.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...