Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

no me sale la consulta!!!!

Estas en el tema de no me sale la consulta!!!! en el foro de Mysql en Foros del Web. @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código query:: Ver original SELECT salidas. * , unid_med.*, almacenistas.*         FROM salidas, unid_med, almacenistas         WHERE ...
  #1 (permalink)  
Antiguo 29/10/2009, 11:02
 
Fecha de Ingreso: agosto-2009
Mensajes: 53
Antigüedad: 14 años, 8 meses
Puntos: 0
no me sale la consulta!!!!

Código query::
Ver original
  1. SELECT salidas. * , unid_med.*, almacenistas.*
  2.         FROM salidas, unid_med, almacenistas
  3.         WHERE salidas.clave_salida = 'SX/09-0001'
  4.         AND salidas.fk_unidad = unid_med.id_unidad
  5.         AND salidas.fk_almacenista_s = almacenistas.id
  6.         AND salidas.fk_almacenista_e = almacenistas.id

y mis tablas son:

Código tablas:
Ver original
  1. CREATE TABLE `almacenistas` (
  2.   `id` int(3) unsigned NOT NULL auto_increment,
  3.   `nombre` varchar(25) NOT NULL,
  4.   `apellidos` varchar(35) NOT NULL,
  5.   `lada` int(3) unsigned NOT NULL,
  6.   `tel` int(7) default NULL,
  7.   PRIMARY KEY  (`id`)
  8. ) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=4 ;
  9.  
  10. INSERT INTO `almacenistas` VALUES (1, 'santiago', 'perez', 993, 1232111);
  11. INSERT INTO `almacenistas` VALUES (2, 'JESUS MANUEL (TRINO)', 'LOPEZ', 993, 1232123);
  12. INSERT INTO `almacenistas` VALUES (3, 'RENE', 'CARRILLO', 999, 9999999);
  13.  
  14. CREATE TABLE `salidas` (
  15.   `id_salida` int(4) NOT NULL auto_increment,
  16.   `clave_salida` varchar(10) NOT NULL,
  17.   `fecha` date NOT NULL,
  18.   `fk_unidad` int(3) unsigned NOT NULL,
  19.   `fk_almacenista_s` int(3) unsigned NOT NULL,
  20.   `fk_almacenista_e` int(3) unsigned NOT NULL,
  21.   PRIMARY KEY  (`id_salida`,`clave_salida`),
  22.   KEY `fk_unidad` (`fk_unidad`),
  23.   KEY `fk_almacenista_e` (`fk_almacenista_e`),
  24.   KEY `fk_almacenista_s` (`fk_almacenista_s`)
  25. ) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=3 ;
  26.  
  27. --
  28. -- Volcar la base de datos para la tabla `salidas`
  29. --
  30.  
  31. ALTER TABLE `salidas`
  32.   ADD CONSTRAINT `salidas_ibfk_2` FOREIGN KEY (`fk_unidad`) REFERENCES `unid_med` (`id_unidad`) ON DELETE CASCADE ON UPDATE CASCADE,
  33.   ADD CONSTRAINT `salidas_ibfk_3` FOREIGN KEY (`fk_almacenista_e`) REFERENCES `almacenistas` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  34.   ADD CONSTRAINT `salidas_ibfk_4` FOREIGN KEY (`fk_almacenista_s`) REFERENCES `almacenistas` (`id`) ON DELETE CASCADE ON UPDATE CASCADE;
  35.  
  36. INSERT INTO `salidas` VALUES (1, 'SF/09-0270', '2009-10-27', 16, 3, 1);
  37. INSERT INTO `salidas` VALUES (2, 'SX/09-0001', '2009-10-29', 69, 3, 2);
  38.  
  39.  
  40. CREATE TABLE `unid_med` (
  41.   `id_unidad` int(3) unsigned NOT NULL auto_increment,
  42.   `unidad` int(5) unsigned zerofill NOT NULL,
  43.   `nom_unidad` varchar(55) NOT NULL,
  44.   `responsable` varchar(35) NOT NULL,
  45.   `administrador` varchar(35) NOT NULL,
  46.   PRIMARY KEY  (`id_unidad`,`unidad`)
  47. ) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=96 ;
  48.  
  49. --
  50. -- Volcar la base de datos para la tabla `unid_med`
  51. --
  52.  
  53. INSERT INTO `unid_med` VALUES (1, 00001, 'SECRETARIO DE SALUD', 'LIC. MARCO ANTONIO MARTINEZ RODAS', 'MARCO ANOTONIO MARTINEZ');
  54. INSERT INTO `unid_med` VALUES (2, 00001, 'SECRETARIO DE SALUD', 'NELLY HERRERA CONCHA', 'NELLY HERRERA CONCHA');
  55. INSERT INTO `unid_med` VALUES (3, 00002, 'SECRETARIA PARTICULAR', 'LIC. MARCO ANTONIO MARTINEZ RODAS', 'ALDA OFELIA SANCHEZ DE');
  56. INSERT INTO `unid_med` VALUES (4, 00003, 'SUBSECRETARIA DE SERVICIOS DE SALUD', 'DR. CARLOS M. DE LA CRUZ ALCUDIA', 'LAE JULIANA MENDEZ HIDALGO');
  57. INSERT INTO `unid_med` VALUES (5, 00004, 'SUBSECRETARIO DE SALUD PUBLICA', 'DR. ALFONSO RODRIGUEZ LEON', 'LAE. ROGER PEREZ SANCHEZ');
  58. INSERT INTO `unid_med` VALUES (6, 00005, 'DIRECCION DE PROGRAMAS PREVENTIVOS', 'DR. RAMON DE JESUS VELARDE AYALA', 'LA. CARLOS ENRIQUE ACOSTA');
  59. INSERT INTO `unid_med` VALUES (7, 00006, 'DIRECCION DE PROTECCION CONTRA RIESGOS S', 'DR. RAUL GONZALEZ LOAIZA', 'ING. GEORGE G. CUXIN OCH');

NOTA: La consulta si se genera si hago esto:

SELECT salidas. * , unid_med.*, almacenistas.*
FROM salidas, unid_med, almacenistas
WHERE salidas.clave_salida = 'SX/09-0001'
AND salidas.fk_unidad = unid_med.id_unidad
AND salidas.fk_almacenista_e = almacenistas.id


pero si le pongo esta linea:
AND salidas.fk_almacenista_s = almacenistas.id ya no se genera!!!!

Por qué????
  #2 (permalink)  
Antiguo 29/10/2009, 11:56
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: no me sale la consulta!!!!

Claro que no, puesto que los datos que tienes en salidas.fk_almacenista_s son 1 y 2, y salidas.fk_almacenista_e son 3 y 3. Si haces el cruce de tablas uniendo y poniendo la condición de que almacenistas.id = salidas.fk_almacenista_e, verás que aparece el almacenista 3 Rene Carrillo, pero si añades en el cruce que también se dé la igualdad almacensitas.id = salidas.fk_almacesista_s, tendría que haber algún registro cuyo almacenista.id sea igual a la vez a 3 y a 1 ó a 3 y a 2 a la vez, y, claro, eso no es posible. Podrías encontrar alguno si el fk.almacenista_s y el fk.almacenista_e fueran el mismo número. Realmente, no sé por qué tienes esos dos campos (fk.almacenista_s y fk.almacenista_e), qué significan, cuál es la diferencia y qué es lo que quieres hacer con cada uno de ellos.
  #3 (permalink)  
Antiguo 29/10/2009, 12:05
 
Fecha de Ingreso: agosto-2009
Mensajes: 53
Antigüedad: 14 años, 8 meses
Puntos: 0
Respuesta: no me sale la consulta!!!!

jurena, mas o menos me suponia eso..... gracias

Ok la diferencia es que en la tabla salidas que puse al principio se debe registrar quien surte (fk_almacenista_s) y quien entrega (fk_almacenista_e); eso en la insercion si lo hace perfecto; El problema es en la consulta a la hora que quieo visualizar la salida quien surtio, entrego, fecha, etc
  #4 (permalink)  
Antiguo 29/10/2009, 12:09
 
Fecha de Ingreso: octubre-2009
Mensajes: 1
Antigüedad: 14 años, 5 meses
Puntos: 0
Respuesta: no me sale la consulta!!!!

Lo que veo es que estas llamando dos veces un id de referencia de una misma tabla a dos campos de otra... por lo que se eso no se puede hacer...

Las llaves referenciadas solamente se pueden utilizar una sola ves por tabla...
ejemplo:

si quiero relacionar mi tabla "almacenistas" a otras tablas... tendria que crear otras para hacerme referencia al id de la tabla almacenistas... "salidas", "entradas", entradas... etc... pero por cada tabla llamar una vez al id de almacenistas... no se si me doy a entender...

tu lo que estas haciendo... es llamar a la misma FOREIGN KEY en la misma tabla dos veces... Se que eso no es permitidoo...

  #5 (permalink)  
Antiguo 30/10/2009, 02:38
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: no me sale la consulta!!!!

Creo que sí se puede. Prueba esta consulta en la que vuelves dos veces a la tabla almacenista, usando alias para ello.
SELECT u.unidad, u.nom_unidad, u.responsable, u.administrador, s.fecha, concat( a1.nombre, ' ', a2.apellidos ) AS emisor, a1.lada ladaemisor, a1.tel telefonoemisor, CONCAT( a2.nombre, ' ', a2.apellidos ) sirve, a2.lada ladasirve, a2.tel telefonosirve
FROM salidas s, unid_med u, almacenistas a1, almacenistas a2
WHERE s.fk_unidad = u.id_unidad
AND (
s.fk_almacenista_s = a2.id
AND s.fk_almacenista_e = a1.id
)
  #6 (permalink)  
Antiguo 17/11/2009, 13:34
 
Fecha de Ingreso: agosto-2009
Mensajes: 53
Antigüedad: 14 años, 8 meses
Puntos: 0
Respuesta: no me sale la consulta!!!!

Por favor alguien puede ayudarme con esto????????

No encuentro como hacerle para solucionarlo

Chequen esto:

Código query:
Ver original
  1. SELECT * FROM salidas
  2. WHERE clave_salida LIKE '%SF%' ORDER BY clave_salida ASC

Esto si se ejecuta y fijense en los campos fk_almacenista_s y fk_almacenista_e aparece los datos correctos.

Cómo hago para mostrar el nombre de los almacenistas??????
  #7 (permalink)  
Antiguo 17/11/2009, 20:40
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: no me sale la consulta!!!!

SI tienes dos FK que apuntan a sendos registros de ALMACENISTAS, y necesitas el nombre de cada uno, evidentemente hay que hacer una lectura por cada uno de ellos...
Eso se hace simplemente invocando dos veces la tabla pero asignándole a cada una un alias distinto:
Código sql:
Ver original
  1. SELECT *
  2. FROM salidas S
  3.          INNER JOIN almacenistas E1 ON S.fk_almacenista_s = E1.id
  4.          INNER JOIN almacenistas E2 ON S.fk_almacenista_s = E2.id
  5. WHERE clave_salida LIKE '%SF%' ORDER BY clave_salida ASC;

No pongo los campos detalladamente porque eso lo tienes que definir tu. Lo que si te sugiero es no hacer un SELECT *..., porque es exageradamente ineficiente. Invoca los campos que realmente vas a usar, el resto no. Invocalos todos si y sólo si los vas a usar todos realmente.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #8 (permalink)  
Antiguo 18/11/2009, 11:50
 
Fecha de Ingreso: agosto-2009
Mensajes: 53
Antigüedad: 14 años, 8 meses
Puntos: 0
Respuesta: no me sale la consulta!!!!

gnzsoloyo.... lo pruebo y te digo; gracias de veras muchas gracias por tu colaboracion!!!!!!!!
  #9 (permalink)  
Antiguo 19/11/2009, 13:05
 
Fecha de Ingreso: agosto-2009
Mensajes: 53
Antigüedad: 14 años, 8 meses
Puntos: 0
Sonrisa Respuesta: no me sale la consulta!!!!

Wow!!!! quiero agradecer a todos los que me dieron sus consejos e ideas, en especial a gnzsoloyo y a jurena que analizando bien lo que me decian pude por fin realizar la consulta.

gnzsoloyo fue el que mas me expandio el panorama de la solucion y por eso gracias brother "super maestrazo" segui tu consejo de solo utilizar los datos necesarios

A continuacion le pongo la solucion:

Código Solucion consulta:
Ver original
  1. SELECT salidas. * , unid_med.nom_unidad,unid_med.unidad, S.nombre 'surtio',E.nombre 'entrego'
  2.     FROM salidas, unid_med, almacenistas S,almacenistas E
  3.     WHERE salidas.clave_salida LIKE '%S%'
  4.     ANDsalidas.fk_unidad = unid_med.id_unidad
  5.     AND salidas.fk_almacenista_s=S.id
  6.     AND salidas.fk_almacenista_e = E.id
  7.     ORDER BY salidas.clave_salida ASC

Y pues bueno eso es magnifico... pruebenlo y me comentan si existe una forma mas eficiente de hacerlo.

gnzsoloyo Dios te bendiga y de mas sabiduria
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 08:43.