Я вижу много «связанных» вопросов, но ни один, на который я смотрел, не отвечает этому конкретному сценарию.
Во время цикла while / for, который анализирует результирующий набор, сгенерированный из оператора выбора SQL, каков наилучший способ предотвратить вывод следующей строки, если строка перед ней содержит те же данные поля (будь то 1-й поле или х-ное поле)?
Например, если две строки:
('EML-E','jsmith@mail.com','John','Smith')
('EML-E','jsmith2@mail.com','John','Smith')
Каков наилучший способ печати только первой строки, основываясь на том факте, что EML-E одинаков в обеих строках?
Прямо сейчас я делаю это:
- Сохранение первого поля (характерного для моего сценария) в массив из 2 элементов (dupecatch [1])
- Проверка, если dupecatch [0] = dupcatch [1] (duplicate - escape-цикл с использованием 's')
После обработки строки установите dupecatch [0] = dupecatch [1]
while ($DBS->SQLFetch() == *PLibdata::RET_OK)
{
$s=0; #s = 1 to escape out of inside loop
while ($i != $array_len and $s==0)
{
$rowfetch = $DBS->{Row}->GetCharValue($array_col[$i]);
if($i==0){$dupecatch[1] = $rowfetch;} #dupecatch prevents duplicate primary key field entries
if($dupecatch[0] ne $dupecatch[1])
{
dosomething($rowfetch);
}
else{$s++;}
$i++;
}
$i=0;
$dupecatch[0]=$dupecatch[1];
}