Problemas con consulta Base de datos Mysql

Hola experto, tengo un problema con una consulta. Te explico...
Tengo una base de datos con campos: id, nombre1, descripcion1, imagen1, video1 tiempo
desde una pagina donde tengo un foumulario con un buscador de palabras paso una variable (texto) desde el campo de texto; esta variable la paso a la pagina resultado de busqueda.php, en esta pagina tomo el valor de la variable   $valido=$_POST['texto'];
Con este valor busco en el campo nombre1 que contenga lo pasado por la variable, el código que tengo hecho es:
<?php
 $valido=$_POST['texto'];   
$cuatro = mysql_query("SELECT * FROM alertasalud WHERE nombre1 like '%$valido%'") or die(mysql_error()); while($row = mysql_fetch_assoc($cuatro)) {
?>
              <br />
            <a href="javascript:createplayer('<?php echo "http://localhost/cuatro/videos/indice-videos/alerta-salud/".$row['video1']; ?>', true)"><?php echo $row['nombre1'];?></a>
              <?                 
}?>
Cuando realizo la búsqueda con el nombre exacto, o con un nombre que no se repita en el campo nombre1; funciona perfectamente, el problema eta cuando realizo una búsqueda con nombres que se repiten; los resultados que me dan son ejem:
Alerta
Alerta2
Alerta3
alerta4
alerta5
  descripción1
02:55
Alerta
Alerta2
Alerta3
alerta4
alerta5
  descripción2  
10:00
Y así con todos los campos.
Lo que debe de hacer es mostrarme en orden los registros y no que se repitan.
Con dreamweaver he hecho un comportamientom de servidor de repetir región por página de 5 en 5; osea tiene que mostrarme el contenido de 5 registros según el criterio de busqueda; me los muestra pero siempre repitiéndome la palabra a buscar.
Lo que en resumen quiero hacer es una búsqueda de videos.
Y luego un listado más en general.
Espero entiendas este lio, que yo casi ya no lo entiendo.
Respuesta
1
Te paso la siguiente duda.
¿Quieres qué solo te muestre los datos de un solo registro?
Te remarco lo siguiente dentro de tu código:
$cuatro = mysql_query("SELECT * FROM alertasalud WHERE nombre1 like '%$valido%'")
Ese "like '%$valido%' lo que hace es buscarte, dependiendo del valor que tengas en $valido, todos los registros que tengan en el campo "nombre1" un valor que incluya la cadena que tiene $valido. Se entiende?
Te doy un ejemplo: Si tienes en tu Base de Datos 2 registros con los valores "archivo1" y "archivo2" en el campo nombre1. Cuando busques con ese criterio "like '%$valido%', si tu variable $valido tiene el valor "archivo1", solo te mostrará el registro que contiene ese valor. Lo mismo pasará si en tu variable $valido le asignas el valor "archivo2".
Ahora, supongamos que a tu variable "$valido" le asignas el valor "arch", entonces buscará todos los registros que contengan en algún lado, la cadena "arch" dentro del registro, mostrándote los valores "archivo1" y "archivo2".
Básicamente eso es lo que entiendo referido a tu problema. No se si se me estará escapando algo.
Entonces, si no quieres que te repita los registros, deberías sacarle los símbolos "%" en tu consulta de la base de datos.
Quedaría como sigue:
$cuatro = mysql_query("SELECT * FROM alertasalud WHERE nombre1 like '$valido'")

2 respuestas más de otros expertos

Respuesta
1
Pues la verdad es que casi no lo entiendo yo tampoco!... utiliza "ORDER BY" al final de la consulta para ordenar resultados, o muestra solo aquellos que cumplan una condición mediante un IF...
A ver si eso te puede resolver algo
Muchas gracias por tu respuesta; la verdad que he pensado en un if, lo que sucede es que no conozco el php estoy comenzando con el y no sabría como plantear la condición.
¿Podrías modificar lo que te he mandado para ver como lo tendría que hacer?
Gracias.
Algo así:
$cuatro = mysql_query("SELECT * FROM alertasalud WHERE nombre1 like '%$valido%' ORDER BY CAMPOQUESELECCIONESELORDEN") or die(mysql_error()); while($row = mysql_fetch_assoc($cuatro)) {
El if, puedes mirar millones de ejemplos en google. Deberás aprender un pelín más de php para esto, el manejo del is-else es muy sencillo. Te recomiendo eches un vistazo, porque la solución que te pueda dar yo no será exactamente lo que buscas, si te puedo ayudar a algo más...
Muchas gracias por su ayuda, hace mujchos años fui programador, vamos cuando se comenzó con basic, qbasic, pascal, etc... pero desde entonces no programo y veo que la programación a cambiado.
A mi parecer no es problema de orden, es problema de repetición de registros.
Si en el primer registro me muestra el nombre que corresponde al primer registro; porque me muestra también el nombre que corresponde al segundo registro, al tercer registro, al cuarto registro... etc imagina si tengo 10000 registros... vaya locura.
Lo que debe hacer es mostrar solo el nombre del primer registro como hace con la descripción, imagen tiempo, el seguyndo registro también mostrar solo datos del segundo registro como lo hace con su propia descripción, imagen y tiempo, pero no mostrarme nuevamente el campo nombre de un registro que ya ha mostrado y de regiustros que mostrara... tal vez así entiendas mi problema y no supe explicártelo.
De todas maneras muchas gracias.
P.D. Es una pena que no se puedan adjuntar archivos para que veas como se ve en el navegador el resultado de mi búsqueda.
Respuesta
1
Aunque veo que usas javascript y yo en java script no estoy muy fuerte, creo que
alert 2 etc... es tipico mensaje de java script.
Si me envías el código completo me aclaro más y voy a poder ayudarte.
Yo creo que esto se puede solucionar con condiciones if.
O cambiar (mejorar la consulta sql)
Pero para saber que condición usar tengo que ver el código.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas