Nueva pregunta

Pregunta:

Fecha: 21-01-2017 00:18:53 (En Español)

Ayuda con script de búsqueda[No resuelta]

Tengo una base de datos de la biblia con las siguientes columnas libro, capitulo, verso y texto.

Usando el formulario de búsqueda en HTML, el usuario ingresa una busqueda compleja como:

Genesis 3:2, 8-7; Mateo 3:15-8; jueces 1

Donde el resultado sería

1) Texto del versiculo Genesis 3:2
2) Texto de los versiculos Genesis 3:8-7
3) Texto de los versiculos Mateo 3:15-8
4) El capitulo entero Jueces 1

¿Cómo puedo desarrollar una busqueda MySql para obtener esos resultados?

Quiero lograr lo que hacen el sitio de BibleGateway.

Gracias
Etiquetas: Buscador - HTML - MySQL - PHP - Pregunta Votos: 1 - Respuestas: 6 - Vistas: 18 Compartir en: Google Facebook Twitter LinkedIn Link
 

Respuestas:

  • Fecha: 22-01-2017 12:30:48 lo que hace BibleGateway si lo notas es hacer una multiple busqueda separada por ; de acuerdo a tu ejemplo son 3 consultas. y despues unifica los resultados y los muestra.
    deberías realizar primero una busqueda simple en tu sistema: Genesis 3:2, 8-7, una vez que logres eso, lo que tienes que hacer es un exploit del input de busqueda, y hacer esa busqueda simple que hiciste en un foreach, y cada resultado lo guardas en un array nuevo de resultados, y luego al usuario le mostras el array nuevo.

    eso seria idea/resumen. código te lo debo, si te haces el simple, te ayudo para hacer el resto. También se puede anidar la query en el mysql para no realizar un foreach.

    abrazo
      Votos: 1 - Link respuesta
     
  • Fecha: 22-01-2017 16:43:37 Hola Diego, seguí tu consejo y dividí la búsqueda en un array multiple, separandola por cada libro. Este es el resultado...

    //obtenemos la variable
    $quest=filter_var(($_POST['search']), FILTER_SANITIZE_STRING);
    
    //hacemos el explode
    $quest = explode(";",$quest);
    
    //dividimos y salvamos en un array
    $i = 0; 
    $size = count($quest);
    
    while ($i < $size) {
      $claves[] = preg_split("/\W/", $quest[$i]);
      $i++;
    }


    El resultado es:

    Array
    (
        [0] => Array
            (
                [0] => Genesis
                [1] => 3
                [2] => 2
                [3] => 
                [4] => 5
                [5] => 7
            )
    
        [1] => Array
            (
                [0] => 
                [1] => Mateo
                [2] => 3
                [3] => 5
                [4] => 8
            )
    
        [2] => Array
            (
                [0] => 
                [1] => jueces
                [2] => 1
            )
    
    )


    ¿Ahora que sigue? ¿qué me aconsejas hacer?
      Votos: 0 - Link respuesta
     
  • Fecha: 23-01-2017 02:22:59 no sé como estará estructurada tu tabla, pero en base a eso, deberías aplicar la busqueda con el where o like, segun corresponda.   Votos: 0 - Link respuesta
     
  • Fecha: 25-01-2017 14:17:52 Lo que hice fue esto, como prueba para ver si podía obtener todos los valores en su lugar y en cierta manera funciona, pero que pasa cuando la búsqueda es mayor de 6? Me puedes ayudar a simplificar?

    Lo que hago en este ejemplo es ver si puedo obtener todas las variables en su lugar, para poder así posteriormente hacer la búsqueda en SQL.

    $i = 0;
    $size = count($claves);
    
    while ($i < $size) {
    	
    	$count = count($claves[$i]);
    	
    	if ($count == 2) {
    		$lib = $claves[$i][0];
    		$cap = $claves[$i][1];
    	}
    	
    	if ($count == 3) {
    		if (empty($claves[$i][0])) {
    			$lib = $claves[$i][1];
    			$cap = $claves[$i][2];
    			$ver = $claves[$i][3];
    		} else {
    			$lib = $claves[$i][0];
    			$cap = $claves[$i][1];
    			$ver = $claves[$i][2];
    		}
    	}
    	
    	if ($count == 4) {
    		if (empty($claves[$i][0])) {
    			$lib = $claves[$i][1];
    			$cap = $claves[$i][2];
    			$ver = $claves[$i][3];
    		} else {
    			$lib = $claves[$i][0];
    			$cap = $claves[$i][1];
    			$ver = $claves[$i][2];
    		}
    	}
    	
    	if ($count == 5) {
    		if (is_numeric ($claves[$i][0])) {
    			$lib = $claves[$i][0]." ".$claves[$i][1];
    			$cap = $claves[$i][2];
    			$ver = $claves[$i][3];
    		} else {
    			if (empty($claves[$i][0])) {
    				$lib = $claves[$i][1];
    				$cap = $claves[$i][2];
    				$ver = $claves[$i][3];
    				$ver1 = $claves[$i][4];
    			} else {
    				$lib = $claves[$i][0];
    				$cap = $claves[$i][1];
    				$ver = $claves[$i][2];
    				$ver1 = $claves[$i][3];
    			}
    		}
    	}
    	
    	if ($count == 6) {
    		if (is_numeric ($claves[$i][0])) {
    			$lib = $claves[$i][0]." ".$claves[$i][1];
    			$cap = $claves[$i][2];
    			$ver = $claves[$i][3];
    			$ver1 = $claves[$i][5];
    		} else {
    			$lib = $claves[$i][0];
    			$cap = $claves[$i][1];
    			$ver = $claves[$i][2];
    			$ver1 = $claves[$i][4];
    			$ver2 = $claves[$i][5];
    		}
    	}
      Votos: 0 - Link respuesta
     
  • Fecha: 25-01-2017 14:22:52 La tabla está estructurada de la siguiente manera:

    Columnas Tipo
    ID AutoInc
    Libro TEXT
    Versículo INT
    Texto TEXT
      Votos: 0 - Link respuesta
     
  • Fecha: 12-05-2017 07:33:47 Sugiero que en el where de tu busqueda pongas lo siguiente y ver si te funciona:

    SELECT
     Libro
     ,Versiculo
     ,Texto
    FROM tabla
    WHERE 
     Libro LIKE '%campoBuscar%'
     OR Versiculo LIKE '%campoBuscar%'
     OR Texto LIKE '%campoBuscar%'
    


    Aunque todo dependerá de la cantidad de información que tengas en tus campos y tabla ya que un LIKE generalmente es tardado, pero ésta forma buscara en tus 3 campos y arrojara todo lo que tenga campoBuscar
      Votos: 1 - Link respuesta
     
Para participar activamente de la comunidad primero debes autenticarte, ingresa al sistema.Iniciar Sesión
 
frjcbbae garagebible.com