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

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: определить последняя запись в выборке

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Без описания
shiva4
Отправлено: 15 Ноября, 2018 - 15:58:46
Post Id


Новичок


Покинул форум
Сообщений всего: 9
Дата рег-ции: Сент. 2018  


Помог: 0 раз(а)




привет.

Как в 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? или выше описаный способ единственное решение?

(Отредактировано автором: 15 Ноября, 2018 - 16:17:43)

 
 Top
andrewkard
Отправлено: 15 Ноября, 2018 - 16:42:58
Post Id


Участник


Покинул форум
Сообщений всего: 1372
Дата рег-ции: Нояб. 2014  


Помог: 30 раз(а)




Если попробовать в бесконечном цикле:

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.  
 
 Top
shiva4
Отправлено: 16 Ноября, 2018 - 07:42:34
Post Id


Новичок


Покинул форум
Сообщений всего: 9
Дата рег-ции: Сент. 2018  


Помог: 0 раз(а)




Спасибо. Вполне вариант Улыбка

а назад вернуться как? или только переоткрытие запроса нужно делать? Или только с массивом работать после oci_fetch_all?

(Отредактировано автором: 16 Ноября, 2018 - 08:06:07)

 
 Top
andrewkard
Отправлено: 16 Ноября, 2018 - 12:28:41
Post Id


Участник


Покинул форум
Сообщений всего: 1372
Дата рег-ции: Нояб. 2014  


Помог: 30 раз(а)




В массив брать всю выборку, если она позволяет.
Либо в цикле нужные строки вписывать в массив. Сортировка может еще помочь.
 
 Top
shiva4
Отправлено: 19 Ноября, 2018 - 12:06:40
Post Id


Новичок


Покинул форум
Сообщений всего: 9
Дата рег-ции: Сент. 2018  


Помог: 0 раз(а)




Спасибо
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« SQL и Архитектура БД »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB