Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > PHP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 29-12-2005
Avatar de D-MO
D-MO D-MO is offline
Miembro
 
Registrado: ago 2005
Ubicación: root@debian:/#
Posts: 1.042
Poder: 20
D-MO Va por buen camino
mysql_affected_rows me devuelve -1 como resultado de una consulta

Hola, en esta ocasion los molesto por lo siguiente:

Código PHP:
   $resultmysql_query("SELECT tabla, titulo, texto, vinculo FROM dmo_buscador");
    
$total_tablas mysql_affected_rows();
    
$tabla mysql_fetch_assoc($result);
    for (
$cont=1$cont<=$total_tablas$cont++){
          
$result2mysql_query ("SELECT id, ".$tabla['titulo'].", 
         "
.$tabla['texto']." FROM ".$tabla['tabla']."WHERE ".$tabla['titulo'].
         LIKE "
.$_POST['buscar']." OR ".$tabla['titulo']." LIKE ".$_POST['buscar']);
    
$encontradosmysql_affected_rows();
    } 
Como podran darse cuenta con este codigo, tomo los datos de un formulario de busqueda con un campo de texto llamado "buscar".

Tengo una tabla llamada "dmo_buscador" en la que almaceno los nombres de las tablas en las que se pueden realizar las busquedas, esta tabla tiene cuatro campos, los caules son:
Cita:
tabla = nombre de el tabla en la que se puede buscar.
titulo = campo en la que la tabla descrita en el campo "tabla" almacena el titulo.
texto = campo en el que la tabla almacena el contenido
vinculo = almacena el vinculo que se usaria para accesar al texto.
Tomo los datos anteriores con la primera consulta y estos los paso por la segunda.

El problema es que mysql_affected_rows() me regresa un valor -1 en la segunda consulta por lo que me indica que la consulta no se pudo realizar.

Llevo ya algun rato tratando con esto y la verdad ya no hayo que hacer. Se los dejo aca por si a lo mejor alguien me puede ayudar.

Saludos.
Responder Con Cita
  #2  
Antiguo 29-12-2005
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Es mysql_num_rows y no mysql_affected rows la función que debes usar.

// Saludos
Responder Con Cita
  #3  
Antiguo 29-12-2005
Avatar de D-MO
D-MO D-MO is offline
Miembro
 
Registrado: ago 2005
Ubicación: root@debian:/#
Posts: 1.042
Poder: 20
D-MO Va por buen camino
ok

ok roman gracias. Lo voy a intentar.
Saludos.

PD: Me impresiona tu velocidad
Responder Con Cita
  #4  
Antiguo 29-12-2005
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Lo que me extraña es que ya el primer uso que haces de la función no te devuelva -1, por lo que puede leerse en la descripción de la función a que haces referencia:


Cita:
Empezado por Ayuda de PHP
mysql_affected_rows() returns the number of rows affected by the last INSERT, UPDATE or DELETE query associated with link_identifier. If the link identifier isn't specified, the last link opened by mysql_connect() is assumed.
Claro, que, también se dice lo siguiente un poco más abajo:


Cita:
Empezado por Ayuda de PHP
To retrieve the number of rows returned by a SELECT, it is possible to use also mysql_num_rows().
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #5  
Antiguo 29-12-2005
Avatar de D-MO
D-MO D-MO is offline
Miembro
 
Registrado: ago 2005
Ubicación: root@debian:/#
Posts: 1.042
Poder: 20
D-MO Va por buen camino
me muestra esto
Cita:
Warning: Wrong parameter count for mysql_num_rows() in Z:\www\gl\componentes\buscador\index.php on line 36
Responder Con Cita
  #6  
Antiguo 29-12-2005
Avatar de D-MO
D-MO D-MO is offline
Miembro
 
Registrado: ago 2005
Ubicación: root@debian:/#
Posts: 1.042
Poder: 20
D-MO Va por buen camino
Cita:
Empezado por dec
Lo que me extraña es que ya el primer uso que haces de la función no te devuelva -1, por lo que puede leerse en la descripción de la función a que haces referencia:
Pues la verdad es que si me devuelve la cantidad de datos dentro de la tabla en la primera consulta pero no en la segunda.
y siempre habia usado mysql_affected_rows para estas operaciones.

Saludos.
Responder Con Cita
  #7  
Antiguo 29-12-2005
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Hay que saber cómo estás tratando de usar la función. Este es el ejemplo que acompaña a la descripción de la función "mysql_num_rows":


Código PHP:
<?php

$link 
mysql_connect("localhost""mysql_user""mysql_password");
mysql_select_db("database"$link);

$result mysql_query("SELECT * FROM table1"$link);
$num_rows mysql_num_rows($result);

echo 
"$num_rows Rows\n";

?>
La ayuda de la función puedes encontrarla en PHP.net, aquí mismo.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #8  
Antiguo 29-12-2005
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,


Cita:
Empezado por D-MO
Pues la verdad es que si me devuelve la cantidad de datos dentro de la tabla.
y siempre habia usado mysql_affected_rows para estas operaciones.
A mí también me extraña que la ayuda diga esto:


Cita:
Empezado por Ayuda de PHP
To retrieve the number of rows returned by a SELECT, it is possible to use also mysql_num_rows().
Porque yo podría traducirlo así, más o menos: "Para obtener el número de filas que retorna un consulta SELECT es posible también usar mysql_num_rows();" Ese también no me cuadra con lo que he copiado más arriba y que también se refiere en la ayuda:


Cita:
Empezado por Ayuda de PHP
mysql_affected_rows() returns the number of rows affected by the last INSERT, UPDATE or DELETE query associated with link_identifier. assumed.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #9  
Antiguo 29-12-2005
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

D-MO, te pido disculpas, pues creo que he metido la pata. Resulta que duplicaste tu mensaje anterior, y yo borré uno de los duplicados (el que tenía "peor formato", a mi entender) pero, mientras, tú borraste el otro... Así que yo he tratado de recuperar este otro, pero,... no he sabido hacerlo y he hecho con él otra cosa que no entiendo del todo bien: lo he mandado a la "cola de moderadores"... En fin, me disculpo contigo por este pequeño lío.

En todo caso, referías la ayuda de la función que nos ocupa en español, copiada del archivo de ayuda que tienes en tu disco duro. Bueno. Creo que aquí la cuestión puede devenir en algún problema, si haces uso de la función "mysql_affected_rows" para "contar" los resultados de una consulta "SELECT".

Según dice la ayuda esa función no se usa para consultas SELECT, y, el resultado que puedes obtener (creyendo que se trata del resultado de tu consulta SELECT) es el número de filas afectadas por anteriores consultas INSERT, UPDATE, DELETE.

Y, por otro lado, cierta lógica (siempre quise decir algo así) dice que una consulta SELECT no afectará a las filas, como sí lo haría una consulta DELETE, UPDATE, INSERT. Por ello lo que quieres obtener se encuentra en la función que refirió Román al principio y que también "recomienda" la ayuda de la función "mysql_affected_rows", y es que has de usar la función "mysql_num_rows", para obtener las filas conque cuentas luego de una consulta SELECT.

Siento lo del mensaje que he borrado sin querer. Me disculpo de nuevo D-MO. Eso para por jugar con fuego... ¿no se dice así?
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #10  
Antiguo 29-12-2005
Avatar de D-MO
D-MO D-MO is offline
Miembro
 
Registrado: ago 2005
Ubicación: root@debian:/#
Posts: 1.042
Poder: 20
D-MO Va por buen camino
Con respecto al mensaje no hay problema.

Te comento lo que acabo de hacer:

Quite de la consulta la sentencia WHERE creyendo qye talves era este el problema y use de nuevo mysql_affected_rows, y para sorpresa mia me muestra el numero exacto de registros en esta tabla.
Hice lo mismo con mysql_num_rows y el resultado fue el mismo error descrito anteriormente.

Creo que en lugar de avanzar voy para atras porque cada vez me enredo un poco mas.
Responder Con Cita
  #11  
Antiguo 29-12-2005
Avatar de D-MO
D-MO D-MO is offline
Miembro
 
Registrado: ago 2005
Ubicación: root@debian:/#
Posts: 1.042
Poder: 20
D-MO Va por buen camino
Perdon. Si me funciono con mysql_num_rows.

PD:No edito el anterior para evitar "problemas"
Responder Con Cita
  #12  
Antiguo 29-12-2005
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por D-MO
Hice lo mismo con mysql_num_rows y el resultado fue el mismo error descrito anteriormente.
¿Para qué tanto brinco estando el suelo tan parejo?

Si consultas la ayuda de PHP acerca de mysql_num_rows te darás cuenta inmediatamente de porqué marca ese error y cual es el argumento que debes pasar.

// Saludos
Responder Con Cita
  #13  
Antiguo 29-12-2005
Avatar de D-MO
D-MO D-MO is offline
Miembro
 
Registrado: ago 2005
Ubicación: root@debian:/#
Posts: 1.042
Poder: 20
D-MO Va por buen camino
Cita:
Empezado por roman
¿Para qué tanto brinco estando el suelo tan parejo?

Si consultas la ayuda de PHP acerca de mysql_num_rows te darás cuenta inmediatamente de porqué marca ese error y cual es el argumento que debes pasar.

// Saludos
Si Roman esque cuando cambie la ultima vez de mysql_affected_rows a mysql_num_rows unicamente cambie affecter por nums (para evitar la fatiga) y no pase la variable $result2.

Pero cuando tenia WHERE dentro de la consulta lo tenia como era pero siempre me mostraba este error.

La verdad es que necesito WHERE dentro de la consulta.
Responder Con Cita
  #14  
Antiguo 29-12-2005
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,
Cita:
Empezado por D-MO
La verdad es que necesito WHERE dentro de la consulta.
Pero, bueno, ¿al final lograste lo que querías no? Es que no me queda claro.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #15  
Antiguo 29-12-2005
Avatar de D-MO
D-MO D-MO is offline
Miembro
 
Registrado: ago 2005
Ubicación: root@debian:/#
Posts: 1.042
Poder: 20
D-MO Va por buen camino
Cita:
Empezado por dec
Hola, Pero, bueno, ¿al final lograste lo que querías no? Es que no me queda claro.
Hola, disculpen la tardanza pero este me surgio un asunto de mucha importancia que atender.

Pues fijate que no he podido hacer lo que necesito, porque me funciona el mysql_affected_rows y mysql_num_rows pero cuando WHERE no esta en la consulta, y como podras darte cuenta necesito usar el where para que me muestre los valores que coinciden con la busqueda.
Gracias por la ayuda de ambos. Seguire investigando y luego les aviso

PD: A los Moderadores: El editor de vB al menos en este mensaje no es wysiwyg
Le di mas o menos formato aeste mensaje pero con codigo html. No se si soy yo o el editor.

Saludos.

Última edición por D-MO fecha: 29-12-2005 a las 22:02:15.
Responder Con Cita
  #16  
Antiguo 29-12-2005
Avatar de D-MO
D-MO D-MO is offline
Miembro
 
Registrado: ago 2005
Ubicación: root@debian:/#
Posts: 1.042
Poder: 20
D-MO Va por buen camino
Lightbulb Un gran avance.

Gracias a la explicacion de Roman en este hilo, se me o currio hacerlo utilizando mysql_fetch_object en logar de mysql_fetch_assoc para hacerlo mas facil dentro de la consulta. con lo que me ha quedado esto:
Código PHP:
$resultmysql_query("SELECT tabla, titulo, texto, vinculo FROM dmo_buscador");
   
$total_tablas mysql_affected_rows();
   
$tabla mysql_fetch_object($result);
   for (
$cont=1$cont<=$total_tablas$cont++){
        
$result mysql_query("SELECT id, $tabla->titulo$tabla->texto FROM $tabla->tabla 
        WHERE 
$tabla->titulo LIKE '".$_POST['buscar']."'");
   
$encontradosmysql_affected_rows();
   echo 
$encontrados
El echo lo coloque para que me muestre los resultados.

Ahora me muestra 0 (ya subio de nivel de -1 a 0).
Ahora no se porque me muestra 0 si deberia haber encontrado al menos algun dato.
Nota: LIKE lo uso por primera vez y no se si es lo adecuado para esto.

Última edición por D-MO fecha: 29-12-2005 a las 23:53:33.
Responder Con Cita
  #17  
Antiguo 30-12-2005
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

A ver, yo creo que no tiene nada que ver el "WHERE" para lo que nos ocupa. No tiene lógica, y podría añadirse que en la ayuda no se dice nada al respecto. Yo he hecho una prueba tal que así:

Código PHP:
$conexion mysql_connect('localhost''''');
mysql_select_db('wp'$conexion);

$consulta "SELECT * FROM wp_posts WHERE post_author = 1";
$resultado mysql_query($consulta$conexion);

echo 
mysql_num_rows($resultado); 
La función "mysql_num_rows" hace lo que se espera que haga: devuelve el número de filas conque contamos luego de ejecutar la consulta SQL "SELECT", incluso, como en el caso anterior, si esta cuenta con una condición "WHERE". ¿Hay algo que se nos está escapando o qué?
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #18  
Antiguo 30-12-2005
Avatar de D-MO
D-MO D-MO is offline
Miembro
 
Registrado: ago 2005
Ubicación: root@debian:/#
Posts: 1.042
Poder: 20
D-MO Va por buen camino
Hola dec gracias de nuevo por contestar.

Claro que el usar WHERE dentro de la consulta no tendria que afectar, el problema era (segun mi logica) que no se podia hacer de la forma en que lo estaba haciendo:
Código PHP:
$tabla $mysql_fetch_assoc ($result);
"...WHERE ".$tabla['titulo']." LIKE '".$_POST['buscar']."'" 
no se la verdad porque pero cuando lo hice de esta manera:

Código PHP:
$tabla $mysql_fetch_object ($result);
 
"...WHERE $tabla->titulo LIKE '".$_POST['buscar']."'" 
[/php]

me funciona a la perfeccion.

El problema ahora, como explicaca en el post anterior, es que al utilizar el LIKE me muestra resultados unicamente si son introducidos tal cual esta en la tabla.

lo que me interesa es buscar si al menos una palabra de las buscadas aparece en la tabla.

Ya se me ocurrio el uso de PRCE como se hablaba anteriormente en el hilo de las etiquetas vB, pero para ello tendria que cargar todos los datos de la base de datos a un array dentro de la pagina, lo cual creo que consumiria un recurso muy preciado Llamado "TIEMPO".

Por el momento me tomo un descanso, cierro el editor y seguire buscando en internet algo que me ayude.

De nuevo gracias por tus comentarios.

Saludos.
Responder Con Cita
  #19  
Antiguo 30-12-2005
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Empiezo a perderme en estos temas, pero, algo como esto me funciona si en el campo buscado existe la palabra requerida:


Código SQL [-]
SELECT * FROM wp_posts WHERE post_title LIKE "%palabra%"

Es decir, se trata de usar el comodín "%" en este caso, aunque, tengo entendido que hay otros comodines y que incluso el mencionado dá no poco juego... convieme revisar esto a ver. Yo no sabría decir ahora mismo más.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #20  
Antiguo 30-12-2005
Avatar de D-MO
D-MO D-MO is offline
Miembro
 
Registrado: ago 2005
Ubicación: root@debian:/#
Posts: 1.042
Poder: 20
D-MO Va por buen camino
de hecho lo intente asi:

Código PHP:
'WHERE $tabla->titulo LIKE "%buscar%" OR $tabla->texto LIKE "%buscar%"'); 
pero el resultado es el mismo.

SAludos.

Última edición por D-MO fecha: 30-12-2005 a las 01:41:11.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Cómo colocar el resultado de una consulta en un ComboBox??? gusanita Varios 8 16-05-2008 00:58:50
Realizar una consulta sobre los registros que devuelve otra consulta Borjaserrano Firebird e Interbase 12 01-10-2007 23:19:44
Como asignar el resultado de una consulta a una variable Luis Cuenca Conexión con bases de datos 2 11-08-2006 16:27:32
Como capturar el resultado de una consulta SQL Jose Manuel SQL 9 15-10-2005 12:40:37
como visualizar el resultado de una consulta en un edit Damian666 Conexión con bases de datos 9 29-09-2005 18:33:17


La franja horaria es GMT +2. Ahora son las 14:28:28.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi