Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: определить последняя запись в выборке
Форумы портала PHP.SU » PHP » SQL и Архитектура БД » определить последняя запись в выборке

Страниц (1): [1]
 

1. shiva4 - 15 Ноября, 2018 - 15:58:46 - перейти к сообщению
привет.

Как в php при работе с выборкой (oracle) определить что запись последняя? Объясню.

Я ранее работал на делфи и там в компоненте query было свойство "eof" которое и определяло что запись последняя в выборке. Т.е. идешь по выборке и что то делаешь, а когда в процессе движения по выборке нужно на последнем шаге что то сделать, проверял что то в духе:

if query.eof
begin
..тут выполняешь какие то действия
end


Да, и еще вопрос вдогонку. Если делаешь некую выборку с каким то количеством полей, но выводить надо не все поля, как это сделать?
в php через oci_fetch_array получаешь значение, но проанализировать что запись последняя не пойму как(если это возможно)..

Когда цикл вычитки из БД Oracle через oci_fetch_array организовал, то по завершении его понятно что имеешь последнюю запись? но когда действие которое надо выполнить в цикле уже выполнено действия после цикла - уже не актуальны.

Нашел советы:
1. выполнить ту же выборку только вместо списка интересующих полей вводишь что то вроде count(*) cnt.
2.После, сохранить это значение в переменную например $cnt.
3. Снова формируешь выборку со всем списком интересующих полей и в цикле
4. Делаешь счетчик например $i = 1 который будет увеличиваться на каждом шаге в цикле п.5
5. В цикле где используем oci_fetch_array сравниваеть if ($i == $cnt) {найдена последняя запись..}

Но это как то громоздко.

Нет ли чего то подобного в делфийских query.eof? или выше описаный способ единственное решение?
2. andrewkard - 15 Ноября, 2018 - 16:42:58 - перейти к сообщению
Если попробовать в бесконечном цикле:

PHP:
скопировать код в буфер обмена
  1.  
  2. while (1) {
  3.     $row = oci_fetch_array($stid, OCI_BOTH);
  4.     $next = oci_fetch_array($stid, OCI_BOTH);
  5.    
  6.     if(!$next){
  7.         //$row - последняя строка
  8.         break;
  9.        
  10.     }
  11. }
  12.  
3. shiva4 - 16 Ноября, 2018 - 07:42:34 - перейти к сообщению
Спасибо. Вполне вариант Улыбка

а назад вернуться как? или только переоткрытие запроса нужно делать? Или только с массивом работать после oci_fetch_all?
4. andrewkard - 16 Ноября, 2018 - 12:28:41 - перейти к сообщению
В массив брать всю выборку, если она позволяет.
Либо в цикле нужные строки вписывать в массив. Сортировка может еще помочь.
5. shiva4 - 19 Ноября, 2018 - 12:06:40 - перейти к сообщению
Спасибо

 

Powered by ExBB FM 1.0 RC1