PHP - Consulta mysql con varias condiciones

 
Vista:
Imágen de perfil de Alvaro

Consulta mysql con varias condiciones

Publicado por Alvaro (1 intervención) el 27/05/2015 01:16:47
Hola, necesito realizar una consulta a mi BDD desde php, comparando un texto ingresado por el usuario, con varios campos de dos tablas distintas; la consulta quedó así:

1
2
3
4
5
6
7
8
9
10
11
12
$sql = "SELECT * FROM `productos`, `clientes` where
	(codigo_producto like  '%".$texto."%') or
	(medidas_producto like  '%".$texto."%') or
	(marca_producto like  '%".$texto."%') or
	(descripcion1_producto like  '%".$texto."%') or
	(descripcion2_producto like  '%".$texto."%') or
	(codigo2_producto like  '%".$texto."%') or
	(codigo3_producto like  '%".$texto."%') or
	(ciudad_cliente like  '%".$texto."%') or
	(nombre_cliente like  '%".$texto."%')
	and 
	clientes.rut_cliente = productos.clientes_rut_cliente";

Ahora, tengo 2 productos creados y 3 clientes registrados, y la consulta me trae 6 resultados... no se como realizar la consulta para que me devuelva solo dos valores, pues tengo que considerar que el usuario puede consultar por datos del producto (codigo, medidas, marca, clasificacion) como tambien por datos del cliente (nombre_cliente, ciudad_cliente) Ayuda, es para un examen de mi carrera :S
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
sin imagen de perfil
Val: 100
Ha disminuido 1 puesto en PHP (en relación al último mes)
Gráfica de PHP

Consulta mysql con varias condiciones

Publicado por Juan (43 intervenciones) el 27/05/2015 17:13:04
Buenas Alvaro

Se me ha ocurridos dos ideas, que no tiene porque funcionar, pero que puedes probar después de haber leído lo que has puesto.

1º/ Después del AND cambia el orden de los factores, en vez de poner:

clientes.rut_cliente = productos.clientes_rut_cliente

yo probaría con:

productos.clientes_rut_cliente = clientes.rut_cliente

Esto lo hago porque la tabla que tienes como primera en el SELECT es productos.

Mi Segunda Idea sería hacer el SELECT de la siguiente forma:

Cambiaría el SELECT por algo así, es mucho más laborioso, pero quizás te pueda ayudar a que salgan menos registros:

SELECT * FROM productos
where ((codigo_producto like '%".$texto."%') or
(medidas_producto like '%".$texto."%') or
(marca_producto like '%".$texto."%') or
(descripcion1_producto like '%".$texto."%') or
(descripcion2_producto like '%".$texto."%') or
(codigo2_producto like '%".$texto."%') or
(codigo3_producto like '%".$texto."%'))
AND
productos.clientes_rut_cliente = (SELECT clientes.clientes_rut cliente FROM clientes
where (ciudad_cliente like '%".$texto."%') or (nombre_cliente like '%".$texto."%'))

En este caso lo que haríamos sería filtrar primero la tabla de productos de manera que nos queden los productos que nos interesen y después sacar los resultados sólo si se cumple que haya algún cliente filtrado.

Espero que te haya ayudado mi idea, si falla, espero que al menos te haya servido de orientación

Un saludo
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