|
Página 1 de 3
|
Consulta Mysql Donde Una Tabla Tiene Varios Campos Que Llaman A Una Misma Tablas
Autor |
Mensaje |
aratar79
Aprendiz
Registrado: Agosto 2012
Mensajes: 66
Edad: 45 Ubicación:
|
Consulta Mysql Donde Una Tabla Tiene Varios Campos Que Llaman A Una Misma Tablas
Hola chicos, la verdad es que no se si llego a expresarme bien por lo compejo que me llega a parecer mi consulta, despues de mucho investigar todavia me encuentro mas perdido, expongo mi problema: Yo tengo un BBDD con una tabla que se llama RECETAS, en las cuales hay varios campos entre ellos ingrediente1, ingrediente2, ingrediente3 asi hasta el 12 porque creo que como cocinero 12 ingredientes es suficiente y tengo otra tabla que se llama INGREDIENTES donde guardo mis ingredientes, la cosa es que en mi tabla RECETAS en los campos ingrediente1, ingrediente2, ingrediente3 yo guardo una valor integer que es la id de dicho ingrediente, el problema es que no soy capaz de hacer una consulta donde enlazar la tablas RECETAS con la tabla INGREDIENTES cuando hay mas de un ingrediente.
No se si he sido capaz de exponer bien mi duda pero me estoy volviendo loco con el Join, Inner Join, Join On, etc. Otra vez vuelvo agradecerles vuestra ayuda sabiendo que esta consulta no es bien bien un tema sobre gambas sino mas un temas sobre consultas SQL.
Muchas gracias, Un Saludo.
|
#1 Sabado, 15 Septiembre 2012, 04:20 |
|
|
jsbsan
Analista Programador
Registrado: Septiembre 2009
Mensajes: 4175
Edad: 51 Ubicación: dos hermanas, sevilla
|
Re: Consulta Mysql Donde Una Tabla Tiene Varios Campos Que Llaman A Una Misma Tablas
aratar79
Por lo que me dices, mas o menos tu tendrias un esquema de base de datos asi....
En mi programa recolector, puede ver mi esquema,
Echale un vistaso al codigo fuente, que veras como se puede hacer...
Enlace
Por otro lado...
Citar: hasta el 12 porque creo que como cocinero 12 ingredientes es suficiente
Creo que eso es un "grave" error... ¿y si mañana tienes 13 ingrediente? ¿tiras el programa?.... lo suyo es que acepte cualquier numero de ingredientes... tiene que pensar mejor como diseñar tu base de datos....
A lo mejor te puede ayudar este esquema que se me ocurre....
Tendrias 3 tablas:
Una con las Recetas: campos IdRecetas y NombreDeReceta
Otra con los ingrediente: campo IdIngrediente y NombreDeIngrediente
Y otra donde se relaciona, el IdRecetas y el IdIngrediente...
Asi puedes poner muchos ingredientes en la misma receta sin ningun tipo de limite....
Fijate que yo tengo hecho lo mismo en mis tablas: Articulos / Tags / ListaTags
última edición por jsbsan el Sabado, 15 Septiembre 2012, 09:54; editado 1 vez
|
#2 Sabado, 15 Septiembre 2012, 09:51 |
|
|
aratar79
Aprendiz
Registrado: Agosto 2012
Mensajes: 66
Edad: 45 Ubicación:
|
Re: Consulta Mysql Donde Una Tabla Tiene Varios Campos Que Llaman A Una Misma Tablas
Hola Chicos, muchas gracias Julio, la verdad no lo habia pensado así, ahora mismo le he hecho un ojo a las consultas de tu programa. Yo para superar ese error sobre las 12 o 13 le habia dado al programa la posibilidiad de crear una receta como ingrediente, es decir: Si yo tengo una salsa de tomate la cual voy a usar en un arroz a la cazuela, primero escandallo la salsa de tomate la creo como receta pero antes de grabar la receta pregunto ¿ Es ingrediente ? si es que si guarda un registro en la tabla ingredientes asi al crear la receta arroz a la cazuela tengo la posibilidad de usar la salsa de tomate como ingrediente sabiendo ya el precio de coste, dicho esto, tu idea es mucho mas buena ya que asi puedo crear infinifad de ingredientes en una receta. Muchas gracias me pongo a ello volando, pensar bien antes como vas a diseñar tu base de datos ahora veo que si que es muy importante.
Un saludo.
|
#3 Sabado, 15 Septiembre 2012, 13:04 |
|
|
aratar79
Aprendiz
Registrado: Agosto 2012
Mensajes: 66
Edad: 45 Ubicación:
|
Re: Consulta Mysql Donde Una Tabla Tiene Varios Campos Que Llaman A Una Misma Tablas
Julio, sabiendo que tu opción es mejor y estoy peleando con eso dejo colgado las solución a mi pregunta por si alguien se encuentra en el mismo caso:
SELECT r.NombreReceta, i1.descripcion AS indrediente1,
i2.descripcion AS ingrediente2,
i3.descripcion AS ingrediente3
FROM recetas AS r
INNER JOIN ingredientes i1 ON r.ingre1 = i1.ID_ingrediente
INNER JOIN ingredientes i2 ON r.ingre2 = i2.ID_ingrediente
INNER JOIN ingredientes i3 ON r.ingre3 = i3.ID_ingrediente;
Un saludo y muchas gracias.
última edición por aratar79 el Domingo, 16 Septiembre 2012, 05:06; editado 2 veces
|
#4 Domingo, 16 Septiembre 2012, 04:41 |
|
|
aratar79
Aprendiz
Registrado: Agosto 2012
Mensajes: 66
Edad: 45 Ubicación:
|
Re: Consulta Mysql Donde Una Tabla Tiene Varios Campos Que Llaman A Una Misma Tablas
MMMM :(, Esta consulta solo funciona si hay datos en los campos ingradientes, asi que si es mejor de todas todas crear 3 tablas.
|
#5 Lunes, 17 Septiembre 2012, 13:10 |
|
|
aratar79
Aprendiz
Registrado: Agosto 2012
Mensajes: 66
Edad: 45 Ubicación:
|
Re: Consulta Mysql Donde Una Tabla Tiene Varios Campos Que Llaman A Una Misma Tablas
Perdón Julio, llevos 5 dias dandole vueltas a los de las tres tablas y mirando el codigo de tu programa y no he sido capaz, no se como guardar los datos y menos como recuperarlos, sigo con ello creo que necesito un empujoncito o un descanso a ver si después lo veo un poco mas claro.
Gracias y un saludo.
|
#6 Miercoles, 19 Septiembre 2012, 02:00 |
|
|
jsbsan
Analista Programador
Registrado: Septiembre 2009
Mensajes: 4175
Edad: 51 Ubicación: dos hermanas, sevilla
|
Re: Consulta Mysql Donde Una Tabla Tiene Varios Campos Que Llaman A Una Misma Tablas
Aqui viene el empujoncito....
Citar: no se como guardar los datos y menos como recuperarlo
Supongo que te refieres a trabajar con la tabla de Relacion Receta Ingrediente ¿no? Si no es eso dimelo, porque si es asi, tengo que partir la explicacion desde mas atras.
Resolviendo la forma de trabajar con la Tabla Relacion Recetas-Ingredientes:
Te explico el proceso, con un poco de codigo y comentarios, tendras que hacer varias funciones....
El codigo fuente de donde me baso es el del programa Recolector ( Enlace )
1. Añadir ingrediente a una receta: un Añadir relación en Tabla Receta_Ingrediente
Parto de tener un idReceta y los ingredientes separados por comas: "arroz,judías,tomate"-> cadenaDeIngrediente
Función InsertarArticulo
1.1 Creo un array de cadenas con los ingrediente….
Dim ingrediente as new string[]
ingrediente=Split(upper$(cadenaDeIngrediente),",") ‘los pongos todos en mayúsculas (para no tener problemas con las minúsculas/mayúsculas)
1.2 Compruebo si existe ingrediente en la tabla de ingredientes…
For a=0 to ingrediente.count-1
' lo repito por cada ingrediente obtenido
Sentenciasql="Select * from TablaIngredientes where NombreIngrediente='"& ingrediente[a] & "'"
varResult=conexion.exec(SentenciasSql)
'si no existe un ingredient, lo añado
if varResult.count=0 then
'creo una nueva clave IdIngrediente…
hidIngrediente=str$(now)) & str$(a)
'Nota: Creando un Id único: cojo la fecha de actual y le añado un numero, asi siempre sera distinto Id. Este es el método que yo uso, (no es el mejor). Hay otra forma que es llevar un campo numerico y se le añada al valor maximo una unidad. En el foro encontraras un post que lo comenta
'inserto ingrediente, con su tag
Else
'En caso contrario….(si existe ingrediente en la tabla)
'me quedo con el hid que tenga..
HidIngrediente=varResult!idIngrediente
EndIf
'añado relación a la tabla de relaciones….creo la sentencia…
'Como Tendo el idReceta y el hidIngrediente
sentenciaSql=”insert into tablaRelacion (idReceta,IdIngrediente) Values ('"
sentenciaSql &=idReceta
sentenciaSql &="'," & hidIngrediente & "') "
'inserto relación…
varResult=conexión.exec(SentenciaSql)
next
2. Mostrar una receta y sus ingrediente….
Tenemos un IdReceta…
sentenciaSql="Selet * from TablaIngrediente where idIngrediente in (select idIngrediente from TablaRelacion where id='" & idReceta & "')"
varResult=conexion.exec(sentenciaSql)
'por cada resultado, añadir texto de ingrediente…
for each varResult
if textoIngrediente="" then
' primer ingrediente.
textoIngrediente= varResult!DescripcionIngrediente
else
textoIngrediente&= ", " & varResult!DescripcionIngrediente
endif
next
3. Borrado de un ingrediente de una receta: Borrar una relación de la TablaReceta_Ingrediente
Tenemos un IdReceta el cual tiene un NombreIngrediente que queremos borrar…
3.1) Obtener el idIngrediente de la tabla Ingrediente
3.2) Nos vamos a la tabla de relación… buscamos todos los resultados que:
TengoIdreceta y además IdIngrediente,
Y los borramos…
sentenciaSql="Delete from Relacion where idReceta='" & idrecetaeditada & "' And idIngrediente='" & Idingredienteoptenido & "'")
Te pongo el código (pero no esta completo) para que te hagas una idea, mirate el codigo del programa del Recolector que este si funciona completamente.
Nota:
En un post anterior, comentas que una receta puede contener otras recetas... Para darle solución a este dato, puede añadir otra Tabla donde relaciones IdRecetas con otra IdRecetas, y se trabajaria como en el caso anterior... Primero resuelve la parte de Recetas-Ingrediente, y cuando la soluciones, añade esta tabla y su codigo.
última edición por jsbsan el Jueves, 20 Septiembre 2012, 08:45; editado 1 vez
|
#7 Miercoles, 19 Septiembre 2012, 18:32 |
|
|
jguardon
Administrador
Registrado: Septiembre 2009
Mensajes: 2708
Edad: 57 Ubicación: Granada
|
Re: Consulta Mysql Donde Una Tabla Tiene Varios Campos Que Llaman A Una Misma Tablas
Julio, el coloreado del código que has puesto está mal porque las comillas simples y dobles que has usado no corresponden a las normales. Quizás hayas pegado el código desde Writer u otro programa.
Si puedes lo cambias, si no ya lo hago yo cuando tenga un rato, tampoco es muy importante.
Saludos
=================== Jesús Guardón
Por favor, usemos el corrector ortográfico antes de pulsar el botón "Enviar".
"uo ǝs ʇɐu pıɟıɔıן ɐdɹǝupǝɹ ɐ dɹoƃɹɐɯɐɹ, soןo ɥɐʎ bnǝ dɹodouǝɹsǝןo"
|
#8 Miercoles, 19 Septiembre 2012, 20:14 |
|
|
jsbsan
Analista Programador
Registrado: Septiembre 2009
Mensajes: 4175
Edad: 51 Ubicación: dos hermanas, sevilla
|
Re: Consulta Mysql Donde Una Tabla Tiene Varios Campos Que Llaman A Una Misma Tablas
ok, corregido, asi queda mas claro.
|
#9 Jueves, 20 Septiembre 2012, 08:46 |
|
|
aratar79
Aprendiz
Registrado: Agosto 2012
Mensajes: 66
Edad: 45 Ubicación:
|
Re: Consulta Mysql Donde Una Tabla Tiene Varios Campos Que Llaman A Una Misma Tablas
Gracias Julio, me he tomado unos dias de descanso me pongo a ello volando, me acabo de dar cuenta que mi aplicación esta muy mal planteada, no se puede empezar la casa por el tejado.
Un Saludo.
|
#10 Sabado, 22 Septiembre 2012, 14:45 |
|
|
|
Temas parecidos
Temas parecidos
|
Página 1 de 3
|
Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado Usuarios registrados conectados: Ninguno
|
No puede crear mensajes No puede responder temas No puede editar sus mensajes No puede borrar sus mensajes No puede votar en encuestas No puede adjuntar archivos Puede descargar archivos No puede publicar eventos en el calendario
|
|
|
|
|