Заимел я несчастье иметь необходимость программировать на PHP совместно с СУБД MS SQL. И заметил, что результат функции sqlsrv_num_rows в некоторых случаях получается слегка неожиданный. А именно больше, чем я получаю в результирующем наборе, когда выполняю запрос в базу.Чтобы это могло быть?
Мучиться пришлось долго, гугление (по крайней мере русскоязычное) не помогло ничем, но ответ нашёлся и был проверен экспериментальным путём. Всё дело было в использовании условия DISTINCT (выбор только уникальных строк) или группировки результата. В обоих случаях функция sqlsrv_num_rows возвращала количество, получаемое БЕЗ отбрасывания ненужных записей по условию GROUP BY или DISTINCT!!!
В общем мелкомягкие, писавшие библиотеки поддержки MS SQL для PHP, удивили в очередной раз.
Если кому не понятно, что происходит, поясню на пальцах: предположим меня интересует количество последних заходов пользователя, при которых он оставлял комментарий. Причём не важно, сколько комментариев за один заход оставил пользователь. Я делаю выборку типа «выбрать записи о пользователе, у которого ID равен такому-то и у которого comment не пустое, выполнив группировку по дате захода». Т.е. в результирующий набор попадёт только одна запись за каждый день, даже если в этот день юзер оставил несколько комментариев. Ну и вот, если, предположим, некий юзер был у меня сегодня, вчера и позавчера, при этом оставляя каждый раз по два комментария, то результат запроса покажет три записи, а долбаная sqlsrv_num_rows даст значение ШЕСТЬ!!!
Похожие записи
Нет комментариев
Оставить комментарий или два