Foros del Web » Programando para Internet » PHP »

busqueda - serialize - array

Estas en el tema de busqueda - serialize - array en el foro de PHP en Foros del Web. Hola a todos que tal! quiero hacer una busqueda sobre una tabla de mysql pero los datos estan serializados dentro de los campos, que puedo ...
  #1 (permalink)  
Antiguo 06/11/2013, 17:04
 
Fecha de Ingreso: enero-2012
Mensajes: 224
Antigüedad: 12 años, 3 meses
Puntos: 1
busqueda - serialize - array

Hola a todos que tal!

quiero hacer una busqueda sobre una tabla de mysql pero los datos estan serializados dentro de los campos, que puedo hacer.

se pude aplicar una busqueda directa o deberia pasarlos a un array y de ahi aplicar la busqueda?

nose como hacer , gracias
  #2 (permalink)  
Antiguo 06/11/2013, 17:15
Avatar de NSD
NSD
Colaborador
 
Fecha de Ingreso: mayo-2012
Ubicación: Somewhere
Mensajes: 1.332
Antigüedad: 11 años, 11 meses
Puntos: 320
Respuesta: busqueda - serialize - array

podes usar LIKE pero tus consultas seran mas lerdas
__________________
Maratón de desafíos PHP Junio - Agosto 2015 en FDW | Reglamento - Desafios
  #3 (permalink)  
Antiguo 06/11/2013, 17:43
 
Fecha de Ingreso: enero-2012
Mensajes: 224
Antigüedad: 12 años, 3 meses
Puntos: 1
Respuesta: busqueda - serialize - array

y lo puedo aplicar a los campos que tienen el serialize directamente?
  #4 (permalink)  
Antiguo 06/11/2013, 20:38
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: busqueda - serialize - array

Cita:
Iniciado por mktalternativa Ver Mensaje
y lo puedo aplicar a los campos que tienen el serialize directamente?
Definitivamente, tonto sería sacar una conclusión sin siquiera intentarlo.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #5 (permalink)  
Antiguo 14/11/2013, 10:27
 
Fecha de Ingreso: enero-2012
Mensajes: 224
Antigüedad: 12 años, 3 meses
Puntos: 1
Respuesta: busqueda - serialize - array

hola muchachos , lo probe pero no me sirve del todo , les copio un ejemplo derializado

a:3:{i:0;s:1:"4";i:1;s:2:"24";i:2;s:2:"26";}

aqui por ejemplo tengo un array de 3 datos con los datos : 4 , 24 y 26

como son numeros cuando hago una busqueda entra en conflicto
por ejemplo = .... campo LIKE '2' me devuelve todos los campos que contienen 2

por ejemplo este serial tiene varias veces el numero dos pero no lo busca donde yo lo necesito , me explico?
  #6 (permalink)  
Antiguo 14/11/2013, 11:52
Avatar de ArturoGallegos
Moderador
 
Fecha de Ingreso: febrero-2008
Ubicación: Morelia, México
Mensajes: 6.774
Antigüedad: 16 años, 2 meses
Puntos: 1146
Respuesta: busqueda - serialize - array

haber da un ejemplo de como están los datos arrojados en tu consulta original y como los necesitas.

quizás se pueda con sql o tal vez sea mas fácil en php.
  #7 (permalink)  
Antiguo 14/11/2013, 12:07
 
Fecha de Ingreso: enero-2012
Mensajes: 224
Antigüedad: 12 años, 3 meses
Puntos: 1
Respuesta: busqueda - serialize - array

Código PHP:



$result
=array();


if (!empty(
$area))
{
$result[] = "(area LIKE '%$area%')";
}


 
if (!empty(
$tipodep))
{
$result[] = "(tipo LIKE '%$tipodep%')";
}


if (!empty(
$areatrab))
{
$result[] = "(areaempleo LIKE '%$areatrab%')";
}





$sql 'SELECT * FROM curriculums WHERE '.implode(' AND ',$result);



$resultado mysql_query("$sql "$link) or die($resultado"<br/><br/>".mysql_error());

$num_rows mysql_num_rows($resultado);



$resultadodos mysql_query("SELECT * FROM curriculums  WHERE  id='$id'  "$link) or die($resultado"<br/><br/>".mysql_error());
$num_rowsdos mysql_num_rows($resultadodos);




$row_cvs mysql_fetch_assoc($resultado); 

y los datos son numericos que vienen de POST
  #8 (permalink)  
Antiguo 15/11/2013, 06:58
Avatar de NSD
NSD
Colaborador
 
Fecha de Ingreso: mayo-2012
Ubicación: Somewhere
Mensajes: 1.332
Antigüedad: 11 años, 11 meses
Puntos: 320
Respuesta: busqueda - serialize - array

Me parece que no entendiste lo que te pidio ArturoGallegos, lo que te pidio, es que pongas un par de filas de tu tabla SQL con los datos en bruto que estan guardados, y luego, que pongas la salida que quieres obtener en base a esos datos. no es codigo de programacion,sino un par de lineas con los datos que tienes, nada mas.

no obstante te anticipo que si tus datos son por ejemplo:
Cita:
a:3:{i:0;s:1:"4";i:1;s:2:"24";i:2;s:2:"26";}
y quieres saber lo que tengan s[2] = 24

tu consulta debe ser:
Código MySQL:
Ver original
  1. SELECT campo FROM tabla WHERE campo LIKE "%s:2:{NROABUSCAR}%"
donde {NROABUSCAR} == 24
__________________
Maratón de desafíos PHP Junio - Agosto 2015 en FDW | Reglamento - Desafios
  #9 (permalink)  
Antiguo 18/11/2013, 10:13
 
Fecha de Ingreso: enero-2012
Mensajes: 224
Antigüedad: 12 años, 3 meses
Puntos: 1
Respuesta: busqueda - serialize - array

exactamente eso es lo que quiero lograr, como pongo una variable en "NROABUSCAR" ?
  #10 (permalink)  
Antiguo 18/11/2013, 10:20
Avatar de ArturoGallegos
Moderador
 
Fecha de Ingreso: febrero-2008
Ubicación: Morelia, México
Mensajes: 6.774
Antigüedad: 16 años, 2 meses
Puntos: 1146
Respuesta: busqueda - serialize - array

con riesgo de errar, creo recordar que así como se puede usar LIKE para buscar X valor dentro de un campo también puedes usar NOT LIKE para buscar que no contengan X valor.
  #11 (permalink)  
Antiguo 18/11/2013, 10:26
 
Fecha de Ingreso: enero-2012
Mensajes: 224
Antigüedad: 12 años, 3 meses
Puntos: 1
Respuesta: busqueda - serialize - array

haciendo lo que dice NCD "a:3" y "i:0" por ejemplo entran en la busqueda? de ser asi puedo excluirlo con NON LIKE?
  #12 (permalink)  
Antiguo 18/11/2013, 10:27
 
Fecha de Ingreso: enero-2012
Mensajes: 224
Antigüedad: 12 años, 3 meses
Puntos: 1
Respuesta: busqueda - serialize - array

aparte el numero que le sigue al "S:" es igual a la cantidad de cifran con lo cual no me sirve por que puede ser S:1 o S:2 aunque puedo usar OR para esto
  #13 (permalink)  
Antiguo 18/11/2013, 10:28
Avatar de ArturoGallegos
Moderador
 
Fecha de Ingreso: febrero-2008
Ubicación: Morelia, México
Mensajes: 6.774
Antigüedad: 16 años, 2 meses
Puntos: 1146
Respuesta: busqueda - serialize - array

en teoría así es pero hasta que no hagas tu la prueba no lo sabremos... así que a intentarlo.


y es NOT LIKE al menos según san google.
  #14 (permalink)  
Antiguo 18/11/2013, 10:55
 
Fecha de Ingreso: enero-2012
Mensajes: 224
Antigüedad: 12 años, 3 meses
Puntos: 1
Respuesta: busqueda - serialize - array

ok perdon la ignorancia pero esto esta bien? por que me devuelve todo sin resultados, algo estoy haciendo mal

SELECT campo FROM tabla WHERE campo LIKE "%s:2:{$numero}%"
  #15 (permalink)  
Antiguo 18/11/2013, 12:41
 
Fecha de Ingreso: enero-2012
Mensajes: 224
Antigüedad: 12 años, 3 meses
Puntos: 1
Respuesta: busqueda - serialize - array

me acabo de dar cuenta que el numero esta entre comillas quizas sea eso el por que no da resultado
  #16 (permalink)  
Antiguo 19/11/2013, 07:01
 
Fecha de Ingreso: enero-2012
Mensajes: 224
Antigüedad: 12 años, 3 meses
Puntos: 1
Respuesta: busqueda - serialize - array

hola he probado con esto tambien pero no tuve suerte


Código:
$onee= 's:2:{"' ;
$cierre= '"}';
$ff= $onee.$tipodep.$cierre;


Código:
 if (!empty($tipodep))
{
$result[] = "(area LIKE '%"  .$ff. "%')";
}
  #17 (permalink)  
Antiguo 20/11/2013, 17:48
Avatar de NSD
NSD
Colaborador
 
Fecha de Ingreso: mayo-2012
Ubicación: Somewhere
Mensajes: 1.332
Antigüedad: 11 años, 11 meses
Puntos: 320
Respuesta: busqueda - serialize - array

Mira, vamos por partes porque creo que te estas haciendo lio.

LIKE Y NOT LIKE lo que hacen es buscar un patron en un campo (algunos motores, soportan hasta una Exprecion Regular compleja) MySql no da gran soporte a las expresiones regulares, pero si permite hacer muchas cosas con el que tiene.

vamos a un ejemplo:

tu campo, contiene un array serializado, es decir que tiene esta forma:
Cita:
a:3:{i:0;s:1:{-NRO-1-};i:1;s:2:{-NRO-2-};i:2;s:2:{-NRO-3-};}
y, sabes, que uno de los caracteres de exprecion regular soportados por Mysql es el comodin "%".
cuando pones este simbolo, cualquier caracter que este en esa posición sera valido ¿Quieres buscar el signo %? jamaica no problem, lo escapas con la barra invertida "\%".

Ahora bien, ¿como aplicar esto? siguiendo la idea tu campo serializado ahora tendria esta forma:
Cita:
a:3:{i:0;s:1:"%";i:1;s:2:"%";i:2;s:2:"%";}
¡Yo quiero buscar un valor, no traer todos los registros! -genial, me gusta tu estilo.

Código MySQL:
Ver original
  1. SELECT campo FROM tabla WHERE campo LIKE "a:3:{i:0;s:1:\"%\";i:1;s:2:\"%\";i:2;s:2:\"%\";}"

¡Eso no hace nada! ¡Estoy igual que al principio! -no. ahora ya tienes la consulta armada.

Tu array descerializado tiene esta apariencia:
Cita:
Array ( [0] => 4 [1] => 24 [2] => 26 )
sabiendo que forma tienen los datos, ahora solo hay que meterlos en el sql:
Código PHP:
Ver original
  1. $buscarDatos = array(null,24,null);
  2.  
  3. $sql = 'SELECT campo FROM tabla WHERE campo LIKE "a:3:{i:0;s:1:\"'.(is_null($buscarDatos[0]) ? '%' : $buscarDatos[0]).'\";i:1;s:2:\"'.(is_null($buscarDatos[1]) ? '%' : $buscarDatos[1]).'\";i:2;s:2:\"'.(is_null($buscarDatos[2]) ? '%' : $buscarDatos[2]).'\";}"';
  4.  
  5. echo($sql);

La idea es simple, si el indice del array es null, se asume cualquier valor, si esta definido, se busca ese valor.

¡Quiero todos los que tengan indice 1 = 24, pero que el indice 0 sea diferente de 5! -ya puedes hacerlo solo ¿Lo intentaste?

aca esta la solucion, pero no la mires hasta que no allas probado al menos 20 veces solo.

Código PHP:
Ver original
  1. $buscarDatos = array(null,24,null);
  2. $excluirDatos = array(5,null,null);
  3.  
  4. $sql = 'SELECT campo FROM tabla WHERE campo LIKE "a:3:{i:0;s:1:\"'.(is_null($buscarDatos[0]) ? '%' : $buscarDatos[0]).'\";i:1;s:2:\"'.(is_null($buscarDatos[1]) ? '%' : $buscarDatos[1]).'\";i:2;s:2:\"'.(is_null($buscarDatos[2]) ? '%' : $buscarDatos[2]).'\";}" AND campo NOT LIKE "a:3:{i:0;s:1:\"'.(is_null($excluirDatos[0]) ? '%' : $excluirDatos[0]).'\";i:1;s:2:\"'.(is_null($excluirDatos[1]) ? '%' : $excluirDatos[1]).'\";i:2;s:2:\"'.(is_null($excluirDatos[2]) ? '%' : $excluirDatos[2]).'\";}" ';
  5.  
  6. echo($sql);

¡eso esta horrible! ¡son 4 lineas de codigo y tienen 2 bug! -jaja ya se, ¿no pensaras que te lo voy a dar servido?
como dice la frase, "si tu aplicaciones tiene bug, di que son features especiales"

la segunda alternativa no debe usarse si los tres indices a excluir son null, al revez de lo esperado, excluira a todos los resultados y devolvera vacio.

en un mismo indice no puede haber el mismo valor en buscar y en excluir, idem anterior.

creo con eso tu consulta tiene que estar resuelta.
__________________
Maratón de desafíos PHP Junio - Agosto 2015 en FDW | Reglamento - Desafios
  #18 (permalink)  
Antiguo 20/11/2013, 18:22
Avatar de Cuervoo  
Fecha de Ingreso: octubre-2013
Mensajes: 165
Antigüedad: 10 años, 6 meses
Puntos: 43
Respuesta: busqueda - serialize - array

Yo que vos, armo de nuevo la tabla con los datos en distintas columnas como tienen que ir. Hace 15 dias que estás con esto, y hacer eso te tomaría solo un rato armando un script que vaya leyendo y pasandolos a otra tabla. Te ahorrarias tiempo, el sistema sería más eficiente, y las consultas más rápidas.

Etiquetas: busqueda, mysql, serialize, tabla
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 05:44.