20 messages in com.mysql.lists.mysql-esRe: problema con consulta| From | Sent On | Attachments |
|---|---|---|
| Ray Garcia | 14 Mar 2006 00:50 | |
| Jesús Gómez | 14 Mar 2006 00:59 | |
| Ray Garcia | 14 Mar 2006 01:13 | |
| Ray Garcia | 14 Mar 2006 03:40 | |
| juan juan | 15 Mar 2006 00:49 | |
| Ray Garcia | 15 Mar 2006 03:07 | |
| juan juan | 15 Mar 2006 07:06 | |
| Ray Garcia | 15 Mar 2006 08:04 | |
| jgo...@net2u.es | 15 Mar 2006 08:28 | |
| Ray Garcia | 15 Mar 2006 08:48 | |
| Daniel Egea | 15 Mar 2006 09:03 | |
| Daniel Egea | 15 Mar 2006 09:04 | |
| Ray Garcia | 15 Mar 2006 09:30 | |
| Alvaro Cobo | 15 Mar 2006 11:27 | |
| Alvaro Cobo | 15 Mar 2006 11:42 | |
| Ray Garcia | 16 Mar 2006 02:53 | |
| Daniel Egea | 16 Mar 2006 03:54 | |
| Ray Garcia | 16 Mar 2006 04:15 | |
| Ing. Edwin Cruz | 16 Mar 2006 08:20 | |
| Ray Garcia | 17 Mar 2006 00:56 |
| Subject: | Re: problema con consulta![]() |
|---|---|
| From: | Daniel Egea (deg...@plq.es) |
| Date: | 03/16/2006 03:54:02 AM |
| List: | com.mysql.lists.mysql-es |
Sastamente, me devuelve
1, 'entidad2', 'aaaa', 'cccc'
Un saludo
Ray Garcia escribió:
Te funciona mi consulta nueva en con mi script de todas las tablas???
prueba esta consulta, te devuelve un resultado???
select c.ID, ENTIDADES.NOMBRE, c.PERSONA_CONTACTO, c.CARGO
from DATOS_COMPLETOS, CONTACTO c, DATOSCOMPLETOS_CONTACTO, ENTIDADES, ENTIDADES_CONTACTO, SECTORES_INTERVENCION, INTERVENCION_CONTACTO, AMBITOS, AMBITOS_CONTACTO
INNER JOIN ( INTERVENCION_CONTACTO c1, INTERVENCION_CONTACTO c2, INTERVENCION_CONTACTO c3, INTERVENCION_CONTACTO c4)
ON c.ID = c1.CONTACTO_ID AND c.ID = c2.CONTACTO_ID AND c.ID = c3.CONTACTO_ID AND c.ID = c4.CONTACTO_ID
WHERE c1.SECTORES_INTERVENCION_ID = 1 AND c2.SECTORES_INTERVENCION_ID = 3 AND c3.SECTORES_INTERVENCION_ID = 5 AND c4.SECTORES_INTERVENCION_ID = 7 AND DATOSCOMPLETOS_CONTACTO.DATOS_COMPLETOS_ID = DATOS_COMPLETOS.ID AND DATOSCOMPLETOS_CONTACTO.CONTACTO_ID = c.ID AND ENTIDADES.ID = ENTIDADES_CONTACTO.ENTIDADES_ID AND ENTIDADES_CONTACTO.CONTACTO_ID = c.ID AND SECTORES_INTERVENCION.ID = INTERVENCION_CONTACTO.SECTORES_INTERVENCION_ID AND INTERVENCION_CONTACTO.CONTACTO_ID = c.ID AND AMBITOS.ID = AMBITOS_CONTACTO.AMBITOS_ID AND AMBITOS_CONTACTO.CONTACTO_ID = c.ID AND c.ID IN (1,2,3,4,5,6,7,8,9,10) AND c.ID IN (1,2,4,5,6,7,8,9,10)group by c.ID
debe devolverte aaaa.
Con respecto a mi version del servidor, en local tengo --> *MySQL 5.0.15 *aunque en produccion tengo un 4.algo (no te lo puedo decir, no tengo permisos de admin). Investigaré lo de los bugs. Pero mirame eso si puedes por favor.
Tambien le echaré un vistazo a la teoria de los joins, ya que, aunque se que hacen mas o menos, si que tienes razon en q no tengo demasiada idea.
Gracias, Ray.
Daniel Egea escribió:
Mira tu versión del server... en la 4.1.11 me funciona perfectamente... aunque no me devuelve ninguna fila (tampoco he comprobado la lógica de la select para saber lo que tiene que devolver)
Eso me pasó a mi hace tiempo y creo que era un bug del servidor... háztelo mirar y paséate por los bugs que se publican en la página de MySQL.
En cualquier caso, mirate la sintaxis de las joins pq creo que estás mezcalndo conceptos
Un saludo
Ray Garcia escribió:
Bueno, la consulta es valida, siempre que en el from solo ponga una tabla y sea una consulta "mas o menos simple". En el momento en el que agrego otras tablas en el from y otras relaciones en el where me dice: |Unknown column 'c.id' in 'on clause'
|Y he intentado cambiar c.id por CONTACTO.ID, c.ID, y demas posibles variaciones para ver si es que estaba mal escrito o que...
pero sigo sin saber hacerlo
De nuevo os pido ayuda. os subo otro script sql con todas las tablas de la base de datos agenda junto con la sql que intento ejecutar.
SQL:
select c.ID, ENTIDADES.NOMBRE, c.PERSONA_CONTACTO, c.CARGO
from DATOS_COMPLETOS, CONTACTO c, DATOSCOMPLETOS_CONTACTO, ENTIDADES, ENTIDADES_CONTACTO, SECTORES_INTERVENCION, INTERVENCION_CONTACTO, AMBITOS, AMBITOS_CONTACTO
INNER JOIN ( INTERVENCION_CONTACTO c1, INTERVENCION_CONTACTO c2, INTERVENCION_CONTACTO c3, INTERVENCION_CONTACTO c4)
ON c.ID = c1.CONTACTO_ID AND c.ID = c2.CONTACTO_ID AND c.ID = c3.CONTACTO_ID AND c.ID = c4.CONTACTO_ID
WHERE c1.SECTORES_INTERVENCION_ID = 1 AND c2.SECTORES_INTERVENCION_ID = 3 AND c3.SECTORES_INTERVENCION_ID = 5 AND c4.SECTORES_INTERVENCION_ID = 7 AND DATOSCOMPLETOS_CONTACTO.DATOS_COMPLETOS_ID = DATOS_COMPLETOS.ID AND DATOSCOMPLETOS_CONTACTO.CONTACTO_ID = c.ID AND ENTIDADES.ID = ENTIDADES_CONTACTO.ENTIDADES_ID AND ENTIDADES_CONTACTO.CONTACTO_ID = c.ID AND SECTORES_INTERVENCION.ID = INTERVENCION_CONTACTO.SECTORES_INTERVENCION_ID AND INTERVENCION_CONTACTO.CONTACTO_ID = c.ID AND AMBITOS.ID = AMBITOS_CONTACTO.AMBITOS_ID AND AMBITOS_CONTACTO.CONTACTO_ID = c.ID AND c.ID IN (2,3,4,5,6,7,8,9,10) AND c.ID IN (2,4,5,6,7,8,9,10)group by c.ID
Aunque parezca que hay tablas que en principio no haria falta nombrarlas se pueden seleccionar campos de esas tablas en el formulario. Se que no es lo correcto y que lo correcto es que cuando seleccione esos campos que se agreguen las clausulas where, pero bueno, tiempo al tiempo.
El nuevo script sql esta aqui:
http://www.leonworks.com/agenda.sql.zip
Siento ser tan brasas pero no soy ningun sibarita en esto de mysql y necesito algo de ayuda.
Saludos y gracias de nuevo (que no se cuantas veces lo habré dicho ya):P
Alvaro Cobo escribió:
Chévere. Ya entendí el resultados que esperabas y ya le hice la prueba y funcionó perfectamente. Siempre se aprende algo nuevo, eh?.
Saludos,
Alvaro.
Ray garcia escribió:
deberia salir solo aaaa, pq es el unico que tiene esas 4 opciones añadidas.
A falta de un par de pruebas la consulta de daniel egea es correcta. lo que pasa es que la he visto justo cuando me iba del trabajo y no me ha dado tiempo a hacer nada mas que una prueba.
la consulta de daniel, por si es que no ha llegado a todos su mensaje, es la siguiente
SELECT persona_contacto FROM contacto c INNER JOIN( intervencion_contacto c1, intervencion_contacto c2, intervencion_contacto c3, intervencion_contacto c4 ) ON c.id <http://c.id/> = c1.contacto_id AND c.id <http://c.id/> = c2.contacto_id AND c.id <http://c.id/> = c3.contacto_id AND c.id <http://c.id/> = c4.contacto_id WHERE c1.sectores_intervencion_id = 1 AND c2.sectores_intervencion_id = 3 AND c3.sectores_intervencion_id = 5 AND c4.sectores_intervencion_id = 7
Saludos a todos
On 3/15/06, *Alvaro Cobo* < cobo...@gmail.com <mailto:cobo...@gmail.com>> wrote:
Hola Ray:
Acabo de probar la siguiente consulta (que alguien más la envio previamente) en la base de datos de prueba, y funciona perfectamente. Como lo dije en un mensaje anterior, he cambiado el AND por el OR.
SELECT DISTINCT PERSONA_CONTACTO FROM CONTACTO c INNER JOIN INTERVENCION_CONTACTO s ON c.ID <http://c.ID> = s.CONTACTO_ID WHERE s.SECTORES_INTERVENCION_ID =1 OR s.SECTORES_INTERVENCION_ID =3 OR s.SECTORES_INTERVENCION_ID =5 OR s.SECTORES_INTERVENCION_ID =7 LIMIT 0 , 30
El resultado es el siguiente:
+------------------+ | PERSONA_CONTACTO | +------------------+ | aaaa | | crisolman | | calatrava | | crisolero1 | | crisolero2 | | crisolero3 | | crisolero4 | | crisolero5 | | crisolero6 | | crisolero7 | +------------------+
Es este el resultados que esperabas?. Podrías enviar a la lista el resultado de la consulta que te funcionó (enviada por Daniel Egea), porque a mi no me funcionó en la base de datos de prueba
Saludos,
Alvaro
Ray Garcia escribió: > SIIIIIIIIIIIIIIIII!!!! Justo eso!! Fenomenal! Muchas gracias!!!. > Uso PHP, asi que no tendré problemas con el script sql no te preocupes. > En cuanto a la forma elegante, siempre es mas bonito verlo bien hecho > pero ese script hace justo lo que quiero que haga!!! > > Enormemente agradecido! > Daniel Egea escribió: > >> A ver.... si es un número fijo de sectores los que quieres controlar te >> valdrá incluir la tabla intervencion_contacto tantas veces como sectores >> compuebes... para tu ejemplo: >> >> SELECT >> persona_contacto >> FROM >> contacto c >> INNER JOIN( >> intervencion_contacto c1, >> intervencion_contacto c2, >> intervencion_contacto c3, >> intervencion_contacto c4 >> ) >> ON >> c.id <http://c.id> = c1.contacto_id AND >> c.id <http://c.id> = c2.contacto_id AND >> c.id <http://c.id> = c3.contacto_id AND >> c.id <http://c.id> = c4.contacto_id >> WHERE >> c1.sectores_intervencion_id = 1 AND >> c2.sectores_intervencion_id = 3 AND >> c3.sectores_intervencion_id = 5 AND >> c4.sectores_intervencion_id = 7 >> >> Si el número de sectores es variable, siendo un script de php podrás >> componer la select como te interese >> >> Si encuentro alguna forma más elegante de hacerlo ya lo postearé >> >> Un saludo >> >> Ray Garcia escribió: >> >>> Hola, respecto a tu pregunta, hay registros que cumplen esos requisitos. >>> Mira, he hecho un script sql con las tablas y los datos que contienen >>> (todos los datos son de prueba) y lo he colocado aqui: >>> >>> www.zebradev.net/ray/script.sql <http://www.zebradev.net/ray/script.sql> >>> a ver si algun alma caricativa puede echarle un vistazo... >>> >>> La orden exacta que utilizo para esas tablas es esta : >>> >>> SELECT DISTINCT PERSONA_CONTACTO FROM CONTACTO c INNER JOIN >>> INTERVENCION_CONTACTO s >>> ON c.ID <http://c.ID> = s.CONTACTO_ID >>> WHERE s.SECTORES_INTERVENCION_ID = 1 AND s.SECTORES_INTERVENCION_ID >>> = 3 AND s.SECTORES_INTERVENCION_ID = 5 AND s.SECTORES_INTERVENCION_ID >>> = 7 >>> >>> y el resultado sale vacio. Alguna idea??? >>> >>> juan juan escribió: >>> >>>> Puede ser que no haya ningún registro que cumpla todas las >>>> condiciones. Si puedes compruébalo. >>>> >>>> Ray Garcia < ray....@gmail.com <mailto:ray....@gmail.com>> escribió: Nada, si pongo solo >>>> where s.id_sectores=1 me salen todos los de 1, pero si añado algun >>>> campo mas (and s.id_sectores = 3 ) por ejemplo, la consulta me la >>>> devuelve vacia. >>>> >>>> No se si el problema será mio que no lo estoy haciendo bien... pero >>>> muchas gracias, sigo intentandolo. >>>> >>>> Saludos! >>>> >>>> juan juan escribió: >>>> >>>> >>>> >>>>> Prueba con ésto y cuéntanos: >>>>> >>>>> SELECT DISTINCT nombre FROM contacto c INNER JOIN sectores-contacto s >>>>> ON c.id <http://c.id> = s.id_contacto >>>>> WHERE s.id_sectores = 1 AND s.id_sectores = 3 AND s.id_sectores = 5 >>>>> AND s.id_sectores = 7 >>>>> >>>>> Si no usas la tabla sectores en la consulta, es mejor no ponerla. >>>>> Tarda menos. >>>>> >>>>> El DISTINCT lo que hace es devolver las filas distintas, es decir, >>>>> las que se repiten las devuelve una sola vez y no varias. >>>>> >>>>> Saludos. >>>>> >>>>> >>>>> Ray Garcia escribió: >>>>> Hola de nuevo. >>>>> >>>>> Antes tuve un problema con una consulta sql, y Jesús me echó una >>>>> mano recomendandome el uso de IN. >>>>> >>>>> Ahora se pq descarté en su momento el uso de IN. >>>>> >>>>> Yo tengo una serie de secciones, digamos (1,3,5,7), pues esa sql me >>>>> devuelve como resultado todos los que al menos tengan una de esas >>>>> secciones. Es decir, si tengo un contacto que pertenece a la >>>>> seccion 1,3 y 5, otro que tiene la 1,3,5,7 y otro que tiene la >>>>> 3,5,7,8,9, todos estos contactos me saldrian, cuando a mi solo me >>>>> interesa que salgan aquellos que solamente tienen exactamente esas >>>>> secciones agregadas, o más, pero como minimo, todas las secciones >>>>> que se incluyen en la orden IN. >>>>> >>>>> Alguna idea sobre como hacerlo? >>>>> >>>>> Gracias. >>>>> >>>>> Ray Garcia escribió: >>>>> >>>>> >>>>> >>>>> >>>>> >>>>>> Vaya, ya habia probado asi, no salia como queria pero en un acto >>>>>> de inspiracion he agrupado por el id de usuario, y mas o menos >>>>>> sale lo que yo queria. De todas maneras ha de haber otra solucion >>>>>> para que salga sin tener que agrupar por ningun campo. >>>>>> >>>>>> Muchas gracias Jesús. >>>>>> >>>>>> Jesús Gómez escribió: >>>>>> >>>>>> >>>>>> >>>>>> >>>>>>> Prueba asi >>>>>>> >>>>>>> select nombre from contacto,sectores_contacto where >>>>>>> sectores_contacto.id_sectores in (1,3,5,7) and >>>>>>> contactos.id=sectores_contactos.id_contacto >>>>>>> >>>>>>> >>>>>>> ----- Original Message ----- From: "Ray Garcia" To: Sent: >>>>>>> Tuesday, March 14, 2006 9:50 AM >>>>>>> Subject: problema con consulta >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>>> Hola a todos. Ante todo saludaros pues este es el primer mensaje >>>>>>>> que escribo en esta lista. >>>>>>>> >>>>>>>> Estoy desarrollando una aplicacion en php atacando a una bbdd >>>>>>>> mysql. El problema es que tengo una consulta que no consigo que >>>>>>>> salga tal cual yo quiero. >>>>>>>> >>>>>>>> Tengo una tabla contacto, una tabla sectores y una tabla >>>>>>>> sectores -contacto que relaciona ambas tablas. >>>>>>>> >>>>>>>> La tabla contacto tiene los campos: ID, NOMBRE, CARGO. >>>>>>>> La tabla Sectores tiene los campos: ID, NOMBRE >>>>>>>> La tabla sectores-contacto tiene los campos: ID_CONTACTO, >>>>>>>> ID_SECTORES >>>>>>>> >>>>>>>> Cada contacto puede pertenecer a uno o varios sectores. Por lo >>>>>>>> que en la tabla sectores-contacto puede haber varias entradas >>>>>>>> con el mismo id_contacto. >>>>>>>> >>>>>>>> El problema está al consultar. >>>>>>>> Quiero hacer una consulta tipo: "Seleccioname todos los usuarios >>>>>>>> que pertenezcan al sector 1, al 3, al 5 y al 7". >>>>>>>> Yo la intentaba asi: >>>>>>>> >>>>>>>> Select NOMBRE from contacto, sectores-contacto, sectores where >>>>>>>> sectores-contacto.ID_CONTACTO = contacto.ID and >>>>>>>> sectores-contacto.ID_SECTORES = 1 AND >>>>>>>> sectores-contacto.ID_SECTORES = 3 AND >>>>>>>> sectores-contacto.ID_SECTORES = 5 AND >>>>>>>> sectores-contacto.ID_SECTORES = 7. >>>>>>>> >>>>>>>> Como ya sabreis, esa consulta no es valida. >>>>>>>> Alguien daria con la tecla y me explicaria como podria hacerlo. >>>>>>>> >>>>>>>> Saludos a todos los listeros. >>>>>>>> >>>>>>>> Perdon, he enviado el mensaje con otra direccion de correo y no >>>>>>>> se si habrá llegado. Reenvio. >>>>>>>> >>>>>>>> -- >>>>>>>> Lista de Correos de MySQL >>>>>>>> Para el historial de la lista: http://lists.mysql.com/mysql-es >>>>>>>> Para cancelar inscripción: >>>>>>>> http://lists.mysql.com/mysql-es?unsub=jgo...@net2u.es <http://lists.mysql.com/mysql-es?unsub=jgo...@net2u.es> >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>> >>>>>> >>>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>> >>>> >>>> >>>> >>>> >>>> >>> >>> >> >> >> >>
------------------------------------------------------------------------
>> >> >> >> > >




