Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 07-09-2022
Avatar de duilioisola
[duilioisola] duilioisola is offline
Miembro Premium
 
Registrado: ago 2007
Ubicación: Barcelona, España
Posts: 1.806
Poder: 23
duilioisola Es un diamante en brutoduilioisola Es un diamante en brutoduilioisola Es un diamante en bruto
Creo que quedaría así:

Código:
MENU
id
idmenup
descripcion

ID  IDMENUP DESCRIPCION
 1     0    PRINCIPAL
 2     1    SUBMENU PRINCIPAL 1
 3     1    SUBMENU PRINCIPAL 2
 4     1    SUBMENU PRINCIPAL 3
 5     0    SECUNDARIO
 6     5    SUBMENU SECUNDARIO 1
 7     5    SUBMENU SECUNDARIO 2
 8     5    SUBMENU SECUNDARIO 3
Código SQL [-]
/*
Alias m  = Menu
Alias sm = SubMenu
*/
select m.id, m.titulo, sm.id, sm.titulo
from menu m
join menu sm on sm.idmenup = m.id
where
m.idmenup = 0
Devolvería:
Código:
ID  DESCRIPCION ID  DESCRIPCION
 1  PRINCIPAL    2  SUBMENU PRINCIPAL 1
 1  PRINCIPAL    3  SUBMENU PRINCIPAL 2
 1  PRINCIPAL    4  SUBMENU PRINCIPAL 3
 5  SECUNDARIO   6  SUBMENU SECUNDARIO 1
 5  SECUNDARIO   7  SUBMENU SECUNDARIO 2
 5  SECUNDARIO   8  SUBMENU SECUNDARIO 3
Responder Con Cita
  #2  
Antiguo 07-09-2022
Avatar de mamcx
mamcx mamcx is offline
Moderador
 
Registrado: sep 2004
Ubicación: Medellín - Colombia
Posts: 3.941
Poder: 28
mamcx Tiene un aura espectacularmamcx Tiene un aura espectacularmamcx Tiene un aura espectacular
Si tienes un motor moderno, se puede hacer con un CTE:

https://learnsql.com/blog/do-it-in-s...ree-traversal/
https://learnsql.com/blog/query-parent-child-tree/
__________________
El malabarista.
Responder Con Cita
  #3  
Antiguo 08-09-2022
Avatar de duilioisola
[duilioisola] duilioisola is offline
Miembro Premium
 
Registrado: ago 2007
Ubicación: Barcelona, España
Posts: 1.806
Poder: 23
duilioisola Es un diamante en brutoduilioisola Es un diamante en brutoduilioisola Es un diamante en bruto
Gracias a mamcx quisiera modificar mi respuesta.
Esto lo he probado en Firebird 2.5

Código:
MENU
id
idmenup
orden        -- Orden de los items de menu
usuario      -- Usuario para definir diferentes menus/ordenaciones por usuario
descripcion

Indexado por (usuario, idmenup)

ID  IDMENUP  ORDEN  USUARIO  DESCRIPCION
 1     0        1       1    PRINCIPAL
 2     1        1       1    SUBMENU PRINCIPAL 1
 3     1        2       1    SUBMENU PRINCIPAL 2
 4     1        3       1    SUBMENU PRINCIPAL 3
 5     0        2       1    SECUNDARIO
 6     5        1       1    SUBMENU SECUNDARIO 1
 7     5        2       1    SUBMENU SECUNDARIO 2
 8     5        3       1    SUBMENU SECUNDARIO 3
Código SQL [-]
WITH RECURSIVE menu_tree
as (
    -- Menu ROOT es el que tiene "IDMENUP = 0"
    select idmenup, id, orden, usuario, descripcion
    from menu
    where
    idmenup = 0
    UNION ALL
    -- CHILD se relacionan con el padre por "PADRE.IDMENUP = ID"
    select ch.idmenup, ch.id, ch.orden, ch.usuario, ch.descripcion
    from menu ch
    join menu_tree mt on ch.idmenup = mt.id and ch.usuario = mt.usuario)
select *
from menu_tree
where
usuario = 1
order by idmenup, orden

Última edición por duilioisola fecha: 08-09-2022 a las 08:53:34.
Responder Con Cita
  #4  
Antiguo 08-09-2022
steelha steelha is offline
Miembro
 
Registrado: mar 2012
Posts: 159
Poder: 15
steelha Va por buen camino
Gracias duilioisola

Gracias duilioisola, as dado en el clavo de lo que queria ahora probare a ver si me funciona. Perdon por no colocar la configuracion de la tabla.
dbo.Menu
Código SQL [-]
Idmenu  int  Unchecked
Mmenu  char(25)  Checked
Mcaption  char(25)  Checked
Mdescripcion  char(50)  Checked
Mlink  nchar(30)  Checked
Mestado  bit  Checked
Mvisible  bit  Checked
Midmenup  int  Checked
Morden  int  Checked
Mhotkey  nchar(10)  Checked

Donde mmenu es el id y midmenup es el id al que pertenece cuando es una opcion o submenu. Deberia ser 1 to N pero se me complicaria ya que el ejemplo de Neftali aparte de darlo como un texto organizado Menu/submenu en mi tabla lo podras crear sin ningun orden. o agregar opciones despues. implementare tu respuesta y te dejo saber.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Consulta doble sobre una tabla amerika111 SQL 1 24-06-2013 18:33:31
consulta con campos adicionales a tabla en la misma fila jasmad SQL 3 16-04-2013 17:13:56
Consulta usando query en delphi 7 Yensis22 SQL 3 25-08-2008 12:29:55
Consulta usando query en delphi 7 Yensis22 SQL 4 25-08-2008 07:03:05
Consulta con dos relaciones a la misma tabla mcrz2 SQL 4 23-05-2006 13:15:25


La franja horaria es GMT +2. Ahora son las 05:01:16.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi