Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

janick

Ler array e agrupar ítens

Recommended Posts

Olá bom dia!

 

estou com dúvida sobre como agrupar elementos!

 

tenho duas tabelas, "tb_sites" e "tb_acoes".

em "tb_sites" tenho uma "linha_acoes", onde o conteúdo dela é assim, exemplo (2, 3, 5, 9)

 

estes numeros se referem a id´s da "tb_acoes".

em ações tenho a "linha_item" que se refere ao que está relacionado a ação.

 

a idéia é criar um menu deste tipo

 

Estrutura

<li class="topo do menu">Nome do Item</li>

<li>Montar menu com as ações correspondentes a este item que foram encontradas em "linha_acoes"</li>

 

Exemplo

OBS - como se em "linha_acoes" eu tivesse, (2,3), e em "tb_acoes", o id 2, fosse referente a ação de adicionar, com valor da "linha_item" igual a Noticia, e o 3, fosse referente a ação de editar, também com item igual a Noticia.

 

<li class="topo do menu">NOTICIAS</li>

<li>Adicionar</li>

<li>Editar</li>

Não sei como faço isso funcionar, se pelo próprio SELECT dá pra fazer isso ou algo mais.

Valeu!

Compartilhar este post


Link para o post
Compartilhar em outros sites

posta a estrutura inteira da sua tabela e depois me manda uma mp

Compartilhar este post


Link para o post
Compartilhar em outros sites

A estrutura é essa:

 

Tabela Sites

-----------------------------------

id

acoes (array com id referente as ações)

link

status

 

Tabela Acoes

-----------------------------------

id

acao (adicionar, editar, etc...)

item (noticias, imagens, galerias, etc...)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Janick, eu acho que entendi o você precisa,

me corrija qualquer coisa...

(Exemplo)

na tabela site você teria cadastrado:

 

id: 1

acoes:(1,2) // isso aqui acho que deveria mudar

link: http://dimmuborgir.com.br

status:1

agora na tabela acoes você teria:

 

id:1

acao:adicionar

item:noticias

 

id:2

acao:editar

item:noticias

 

bom se for isso que pensei, quando você utilizar o :ID da tabela de sites no meu caso o 1

como resultado ele irá trazer o link http://dimmuborgir.com.br

e sobre esse ID você poderia utilizar as ações do ID 1 e 2 da tabela acoes...

 

é alguma coisa assim que você precisa ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Publico abaixo um pedaço da interface do que to fazendo.

O site A, apresentará no menu do lado esquerdo determinadas ações (as que estiverem disponíveis na linha_acoes em tabela_sites, como array).

Site B, suas determinadas ações, e por ai vai.

 

O que faço é ler na linha_acoes (array) em tabela_sites,

depois verifico na tabela_acoes os id´s que estão nessa array.

 

a dúvida é como montar este menu abaixo, isto é, identificar que os id´s contidos na array estão se referindo ao mesmo "item" (linha_item).

 

Imagem Postada

 

o que consigo fazer até o momento é: ele le esta array, e identifica tudo ok. só que ele me mostra assim:

 

Imagem Postada

 

ah, e o código está assim:

 

$sql = mysql_query("SELECT * FROM sites, acoes WHERE sites.link = '".$url[1]."' AND sites.status = '1' AND FIND_IN_SET(acoes.id, sites.acoes)");
 
 while($b = mysql_fetch_array($sql)) {
 
	 $acoes .= "<li class=titulo do menu>aqui entra o titulo isto é, o item a que se refere, exemplo: noticia, galeria, arquivos, o que for...</li>";
 
	 $acoes .= "<li>".$b['acao_correspondente']."</li>"; // aqui entra a ação, editar, adicionar, etc.. o que for...
 
 } // Fecha While

valeu!

Compartilhar este post


Link para o post
Compartilhar em outros sites

estou terminando um exemplo para ajuda - lo, gostaria de saber se na sua tabela tem muitas coisas cadastradas ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

provavelmente você terá que fazer algumas adaptações para você, bom como eu não tenho o Mysql, fiz as tabelas no SQL SERVER 2000, mas nada impede que você olhe os campos e crie suas próprias

tabelas bom vamos lá...

 

essa tabela de parceiros é como se fosse os SITES ok

CREATE TABLE [tb_parceiros] (
	[id_parceiro] [int] IDENTITY (1, 1) NOT NULL ,
	[nome] [varchar] (25) COLLATE SQL_Latin1_General_CP1_CI_AI NULL ,
	CONSTRAINT [PK_tb_parceiros] PRIMARY KEY  CLUSTERED 
	(
		[id_parceiro]
	)  ON [PRIMARY] 
) ON [PRIMARY]
GO

onde ficarão os meus parceiros no seu caso os SITES

 

tabela menus

CREATE TABLE [menus] (
	[id_menu] [int] NOT NULL ,
	[nome_menu] [char] (30) COLLATE Latin1_General_CI_AS NULL ,
	CONSTRAINT [PK_menus] PRIMARY KEY  CLUSTERED 
	(
		[id_menu]
	)  ON [PRIMARY] 
) ON [PRIMARY]
GO

Cadastro dos Menus, exemplo NOTICIAS.

 

 

tabela submenus

CREATE TABLE [submenus] (
	[id_submenu] [int] IDENTITY (1, 1) NOT NULL ,
	[id_menufk] [int] NULL ,
	[nome_submenu] [varchar] (30) COLLATE Latin1_General_CI_AS NULL ,
	[link] [varchar] (40) COLLATE Latin1_General_CI_AS NULL ,
	CONSTRAINT [PK_submenus] PRIMARY KEY  CLUSTERED 
	(
		[id_submenu]
	)  ON [PRIMARY] ,
	CONSTRAINT [FK_submenus_menus] FOREIGN KEY 
	(
		[id_menufk]
	) REFERENCES [menus] (
		[id_menu]
	)
) ON [PRIMARY]
GO

Cadastro dos submenus, exemplo, Adicionar Noticias

 

Tabela ctrl_irAcessMenu

CREATE TABLE [ctrl_DirAcessMenu] (
	[id_acessmenu] [int] IDENTITY (1, 1) NOT NULL ,
	[id_parceiro_fk] [int] NULL ,
	[id_menufk] [int] NULL ,
	CONSTRAINT [PK_ctrl_DirAcessModulos] PRIMARY KEY  CLUSTERED 
	(
		[id_acessmenu]
	)  ON [PRIMARY] ,
	CONSTRAINT [FK_ctrl_DirAcessMenu_menus] FOREIGN KEY 
	(
		[id_menufk]
	) REFERENCES [menus] (
		[id_menu]
	),
	CONSTRAINT [FK_ctrl_DirAcessMenu_tb_parceiros] FOREIGN KEY 
	(
		[id_parceiro_fk]
	) REFERENCES [tb_parceiros] (
		[id_parceiro]
	)
) ON [PRIMARY]
GO

dar permissão aos Menus

 

tabela ctrl_DirAcessSubmenu

CREATE TABLE [ctrl_DirAcessSubmenu] (
	[id_AcessSubmenu] [int] IDENTITY (1, 1) NOT NULL ,
	[id_parceiro_fk] [int] NOT NULL ,
	[id_submenu_fk] [int] NULL ,
	CONSTRAINT [PK_ctrl_DirAcessSubmenu] PRIMARY KEY  CLUSTERED 
	(
		[id_AcessSubmenu]
	)  ON [PRIMARY] ,
	CONSTRAINT [FK_ctrl_DirAcessSubmenu_submenus] FOREIGN KEY 
	(
		[id_submenu_fk]
	) REFERENCES [submenus] (
		[id_submenu]
	),
	CONSTRAINT [FK_ctrl_DirAcessSubmenu_tb_parceiros] FOREIGN KEY 
	(
		[id_parceiro_fk]
	) REFERENCES [tb_parceiros] (
		[id_parceiro]
	)
) ON [PRIMARY]
GO

dar permissão aos Submenus

 

 

bom após isso, faça alguns cadastros, acho que os nomes dos campos está fácil..

bom no php você vai fazer algo assim:

 

<?php

$conexao = mssql_connect('localhost', 'sa', '');
mssql_select_db('menus', $conexao);

$idparceiro = 2; //setando o id do parceiro 

$query1 = "
		SELECT 
			NOME_MENU,
			ID_MENU
		FROM 
			CTRL_DIRACESSMENU 
			INNER JOIN MENUS ON (ID_MENU = ID_MENUFK)
		WHERE 
			ID_PARCEIRO_FK = '".$idparceiro."'";

$resutsquery1 = mssql_query($query1);

while($linhaQuery1 = mssql_fetch_array($resutsquery1)){	
	echo '<li>'.$linhaQuery1['NOME_MENU'].'</li>';
	
	$query2 = "
		SELECT 
			NOME_SUBMENU,
			LINK
		FROM
			 CTRL_DIRACESSSUBMENU 
			 INNER JOIN SUBMENUS ON (ID_SUBMENU_FK = ID_SUBMENU AND ID_MENUFK = '".$linhaQuery1['ID_MENU']."')
		WHERE 
			ID_PARCEIRO_FK = '".$idparceiro."'";

	$resutsquery2 = mssql_query($query2);	
	while($linhaQuery2 = mssql_fetch_array($resutsquery2)){	
	echo "<ul><a href='".$linhaQuery2['LINK']."'>".$linhaQuery2['NOME_SUBMENU']."</a></ul>";
	
	}
}
?>

 

OBS: lógico que você deve fazer suas validações, consistencias entre outras coisas isso fiz como base para você saber como começar okay..

tomara que ajude, e não esqueça de postar o que aconteceu, qualquer coisa posta novamente que eu ou o pessoal do fórum vai lhe ajudando..

desculpe a demora, estou sem tempo mesmo..

 

t+

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara, muito obrigado mesmo pela atenção e pela ajuda!

E o mais importante, consegui fazer! Dei uma olhada no seu exemplo e adaptei aqui com algumas coisas que pensei.

Não sei se é a maneira correta, se não for e alguém tiver uma forma reduzida de fazer isso, é só falar.

 

ESTRUTURA MYSQL

Tabela Site

id, acoes, link, status

 

Tabela Acoes

id, acao, item

 

EXEMPLO

Tabela Site

1, (1,2,4,10), meu-site, on

 

Tabela Acoes

1, adicionar, noticia

2, editar, noticia

4, editar, galeria

10, excluir, noticia

 

PHP

// Se existir algo na array acoes
   
 $sqlA = mysql_query("SELECT * FROM sites, acoes WHERE (...) AND FIND_IN_SET(acoes.id, sites.acoes) GROUP by acoes.item");
   
 while($a = mysql_fetch_array($sqlA)) {
   
	 $acoes .= "<li class=\"titulo\">".$a['item']."</li>";
   
	 $sqlB = mysql_query("SELECT * FROM sites, acoes WHERE (...) AND acoes.item = '".$a['item']."' AND FIND_IN_SET(acoes.id, sites.acoes)");
   
	 while($b = mysql_fetch_array($sqlB)) {
   
		 $acoes .= "<li>".$b['acao']."</li>";
   
	 }
   
 }

Valeu, abraço :)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Legal que tenha funcionado, vou olhar que voçê postou, mas não agora, inicio e final de mês fica 127% ocupado

 

abs

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.