MySQL - Buscar los valores de un arrray en una columna de la bbdd

 
Vista:
sin imagen de perfil

Buscar los valores de un arrray en una columna de la bbdd

Publicado por Isabel (4 intervenciones) el 22/11/2016 17:21:20
Hola a todos/as,
Llevo varios días bsuscando en internet soluciones y no encuentro nada, a ver si alguien me puede echar una mano...
Tengo un formulario con varias casillas checkbox:
1
2
3
4
<label for="terapia">Terapia aplicada:</label>
<input name="terapia[]" type="checkbox" value="medicamento1" />Medicamento1</br>
<input name="terapia[]" type="checkbox" value="medicamento2" />Medicamento2</br>
<input name="terapia[]" type="checkbox" value="medicamento3" />Medicamento3</br>

En mi BBDD MySQL, la tabla clientes tiene una columna que se llama "terapia", y ahí se guardan todos los medicamentos separados por comas que ha recibido el cliente: "medicamento1, medicamento3"

Cuando le doy a "Enviar" en el formulario de checkbox, necesito que haga un "SELECT * FROM clientes..." y vuelque todos los clientes que han recibido el medicamento1 y/o medicamento 2 y/o medicamento 3. He probado con LIKE '%valor%' pero no lo hace bien...

¿Alguna idea? Gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de xve
Val: 796
Oro
Ha mantenido su posición en MySQL (en relación al último mes)
Gráfica de MySQL

Buscar los valores de un arrray en una columna de la bbdd

Publicado por xve (1151 intervenciones) el 22/11/2016 21:04:26
Hola Isabel, nos puedes mostrar la consulta como la haces? y como obtienes los valores del formulario para ponerlos en la consulta?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Buscar los valores de un arrray en una columna de la bbdd

Publicado por Isabel (4 intervenciones) el 23/11/2016 10:16:24
Hola! Gracias por contestar!
Cuando le doy a "Enviar", paso los valores del checkbox así:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
if(isset($_POST["enviar"]))
		{
			if (is_array($_POST['terapia'])) {
			$selected = '';
			$num = count($_POST['terapia']);
			$current = 0;
			foreach ($_POST['terapia'] as $key => $value) {
            if ($current != $num-1)
                $selected .= $value.', ';
            else
                $selected .= $value;
            $current++;
			}
			}
 
			$terapia=explode(",", $selected);
 
//Y la consulta, aunque he probado varias, la tengo así:
$sql="SELECT * FROM consultaspruebas WHERE terapia LIKE '%$terapia[0]%' OR terapia LIKE '%$terapia[1]%' OR terapia LIKE '%$terapia[2]%' GROUP BY id";
$res=mysql_query($sql, $conexion) or die(mysql_error()."<br>".$sql."<hr>");
while($registro=mysql_fetch_assoc($res))
					{
						echo '<p>Cliente: '.$registro["nombre"].'. </br>Terapia: '.$registro["terapia"].'</p>';
					}
		}
Tiene que haber otra forma... Alguna función de array o algo así... ¿Alguna sugerencia? Gracias de antemano.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de xve
Val: 796
Oro
Ha mantenido su posición en MySQL (en relación al último mes)
Gráfica de MySQL

Buscar los valores de un arrray en una columna de la bbdd

Publicado por xve (1151 intervenciones) el 23/11/2016 15:19:38
Hola Isabel, creo que te has liado un monton... porque no haces esto simplemente:

1
2
3
4
5
6
7
8
9
10
if(isset($_POST["enviar"]))
{
	$where=""
	foreach ($_POST['terapia'] as $key => $value) {
		$where="terapia LIKE '%".$value."% OR ';
	}
	$where=substr($where,0,-3);
 
	//Y la consulta, aunque he probado varias, la tengo así:
	$sql="SELECT * FROM consultaspruebas WHERE $where GROUP BY id";

haz un
1
echo $sql
para ver la consulta es correcta...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Buscar los valores de un arrray en una columna de la bbdd

Publicado por Isabel (4 intervenciones) el 23/11/2016 16:05:59
Haciéndolo así, no me devuelve ningún registro, de hecho, al impirmir la sql, no me coge el "OR", esto es el código:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
if(isset($_POST["enviar"]))
 
{
 
	$where="";
 
	foreach ($_POST["terapia"] as $key => $value) {
 
		$where="terapia LIKE '%".$value."% OR '";
 
	}
 
	$where=substr($where,0,-3);
 
 
	//Y la consulta, aunque he probado varias, la tengo así:
 
	$sql="SELECT * FROM consultaspruebas WHERE $where GROUP BY id";
 
	echo $sql;
 
}

Y esta es la sql en pantalla:
1
SELECT * FROM consultaspruebas WHERE terapia LIKE '%medicamento3% O GROUP BY id

Solo recoge el último medicamento seleccionado en el checkbox, los anteriores no...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de xve
Val: 796
Oro
Ha mantenido su posición en MySQL (en relación al último mes)
Gráfica de MySQL

Buscar los valores de un arrray en una columna de la bbdd

Publicado por xve (1151 intervenciones) el 23/11/2016 18:26:51
Perdona isable, te he puesto una comilla mal...

en vez de:
1
$where="terapia LIKE '%".$value."% OR ';
tiene que ser:
1
$where="terapia LIKE '%".$value."% OR ";
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Buscar los valores de un arrray en una columna de la bbdd

Publicado por Isabel (4 intervenciones) el 28/11/2016 17:27:51
Hola! No he podido contestar antes... Perdona. Lo he probado, pero solo me devuelve el último valor seleccionado...

Si selecciono 3 medicamentos, me devuelve la siguiente consulta:
1
SELECT * FROM consultaspruebas WHERE terapia LIKE '%medicamento3% GROUP BY id

He probado a imprimir la variable $where, y me vuelca:
1
terapia LIKE '%medicamento3%

¿Alguna sugerencia? Ya no sé qué probar... :-(
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar