statement oci_parse oci_num_rows oci_fetch_array oci_fetch_all oci_execute insertar desde datos conectar php sql oracle select

oci_parse - Contando el número de filas SELECCIONADAS en Oracle con PHP



oci_num_rows select statement (4)

¿Por qué el conteo inicial en absoluto? Solo emita su selección para el título de la película. Si no se encuentra, procesa el error. Si es así, ¡continúa! Si realmente necesita el conteo, use una analítica para agregar el conteo a su consulta:

''SELECT title, year, synopsis, poster_url , COUNT(*) OVER (PARTITION BY mid) mcount FROM movies WHERE mid = ''.$mid

Lo mismo aplica para tu selección de géneros.

EDITAR:

Documentación de Oracle en el enlace Funciones analíticas . Descubrí que los análisis son un poco difíciles de obtener de los documentos de Oracle. Las funciones analíticas por ejemplo de Shouvik Basu proporcionan una guía simple sobre cómo usarlas y me ayudaron bastante.

Estoy haciendo este proyecto para la universidad, que es básicamente una base de datos de películas y para un par de consultas necesito saber cuántas filas fueron seleccionadas. Por ahora, hay 2 situaciones en las que necesito esto:

  • Muestra una sola información de película . Quiero que el recuento de las filas seleccionadas sepa si la base de datos contiene la película seleccionada por el usuario. ¿O hay una mejor solución para esto?
  • Esa película seleccionada tiene géneros, necesito saber cuántos para poder construir una cadena con los géneros separados por | sin agregar uno al final de la cadena.

Con MySQL esto es fácil, solo mysql_num_rows() la base de datos y uso mysql_num_rows() pero oci_num_rows() no funciona exactamente igual para la instrucción SELECT.

La única solución que encontré con OCI / PHP es esta:

if(is_numeric($mid) && $mid > 0) { $stid = oci_parse($db, ''SELECT COUNT(*) AS NUM_ROWS FROM movies WHERE mid = ''.$mid ); oci_define_by_name($stid, ''NUM_ROWS'', $num_rows); oci_execute($stid); oci_fetch($stid); if($num_rows > 0) { $stid = oci_parse($db, ''SELECT title, year, synopsis, poster_url FROM movies WHERE mid = ''.$mid ); oci_execute($stid); $info = oci_fetch_assoc($stid); $stid = oci_parse($db, ''SELECT COUNT(*) AS NUM_ROWS FROM genres g, movies_genres mg WHERE mg.mid = ''.$mid.'' AND g.gid = mg.gid'' ); oci_define_by_name($stid, ''NUM_ROWS'', $num_rows); oci_execute($stid); oci_fetch($stid); $stid = oci_parse($db, ''SELECT g.name AS genre FROM genres g, movies_genres mg WHERE mg.mid = ''.$mid.'' AND g.gid = mg.gid''); oci_execute($stid); $genres_list = null; while($row = oci_fetch_assoc($stid)) { $genres_list .= $row[''GENRE'']; if($num_rows > 1) { $genres_list .= '' | ''; $num_rows--; } } $Template->assignReferences(array( ''Index:LinkURI'' => $link_uri, ''Movie:Title'' => $info[''TITLE''], ''Movie:Year'' => $info[''YEAR''], ''Movie:GenresList'' => $genres_list, ''Movie:Synopsis'' => $info[''SYNOPSIS''], ''Movie:PosterURL'' => $info[''POSTER_URL''] // FIX: Handle empty poster link )); $Template->renderTemplate(''movieinfo''); } else { // TODO: How to handle this error? } } else { // TODO: How to handle this error? }

Pero no me gusta Siempre necesito hacer 2 consultas para contar las filas y luego seleccionar los datos reales y hay demasiadas líneas de código solo para contar las filas.

Este código no lo muestra (aún no lo he hecho porque estoy buscando una mejor solución) pero también tendré que hacer lo mismo con los directores / escritores de la película.

¿Hay alguna solución mejor y más simple para lograr esto o esta es la única manera?

Podría agregar separadores en el ciclo de búsqueda hasta que termine y luego usar las funciones PHP para recortar el último separador de la cadena, pero para este proyecto estoy obligado a usar SECUENCIAS, VISTAS, FUNCIONES, PROCEDIMIENTOS y ACTIVADORES. ¿Alguno de estos ayuda a resolver mi problema?

Sé lo que son las SECUENCIAS, las estoy usando ya, pero no veo cómo pueden ayudar.

Para VIEWS, probablemente no simplifiquen tanto el código ( básicamente es una consulta almacenada ¿verdad? ). Para FUNCTIONS, PROCEDURES y TRIGGERS, por lo que yo los entiendo, no veo cómo pueden ser de ninguna ayuda.

Soluciones?


puedes usar el ocirowcount debe comportarse como mysql_num_rows al hacer una selección


Puedes intentar esto

$conn = oci_pconnect(''user'', ''password'', ''connectionstring''); $resource = oci_parse($conn, $sql); oci_execute($resource, OCI_DEFAULT); $results=array(); $numrows = oci_fetch_all($resource, $results, null, null, OCI_FETCHSTATEMENT_BY_ROW);

Aclamaciones


oci_num_rows () le dará el recuento total de filas si se ejecuta DESPUÉS de oci_fetch_array ()