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.
¡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$buscarDatos = array(null,24,null);
$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]).'\";}"';
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$buscarDatos = array(null,24,null); $excluirDatos = array(5,null,null);
$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]).'\";}" ';
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.