diesel10 Posted March 6, 2014 at 10:42 AM Report #547704 Posted March 6, 2014 at 10:42 AM Boas pessoal, é possível criar uma árvore com categorias e subcategorias recorrendo só a uma tabela na base de dados. Será depois possível criar uma espécie de formulário(em árvore recorrendo a tabela criada) e depois no formulário ao seleccionar uma opção, este envia a lista dos produtos especifica para cada (categoria1/categoria2/produto) ou categoria1/categoria2) ou (categoria1)através dearrays? Algo deste género: Rui(diesel10)
HappyHippyHippo Posted March 6, 2014 at 10:46 AM Report #547705 Posted March 6, 2014 at 10:46 AM (edited) é possível criar uma árvore com categorias e subcategorias recorrendo só a uma tabela na base de dados. create table tree ( id int auto_increment primary key, id_parent int, name varchar(64), foreign key fk_parent (id_parent) references tree(id) on update cascade on delete cascade ) Será ainda possível seleccionar a lista dos produtos para cada (categoria1/categoria2/produto) ou categoria1/categoria2) ou (categoria1) através de arrays? hum ? não percebi ... Edited March 6, 2014 at 10:46 AM by HappyHippyHippo IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
diesel10 Posted March 6, 2014 at 11:31 AM Author Report #547720 Posted March 6, 2014 at 11:31 AM create table tree ( id int auto_increment primary key, id_parent int, name varchar(64), foreign key fk_parent (id_parent) references tree(id) on update cascade on delete cascade ) hum ? não percebi ... boas 'HappyHippyHippo' 🙂 muito obrigado pela tua resposta, em relação à parte que não percebeste, deixa-me já pedir desculpa pois a pergunta estava incompleta e é o seguinte: será possivel criar uma espécie de formulário(em árvore recorrendo a tabela criada) e depois no formulário ao seleccionar uma opção, este envia a lista dos produtos especifica para cada (categoria1/categoria2/produto) ou categoria1/categoria2) ou (categoria1)através de arrays?
HappyHippyHippo Posted March 6, 2014 at 11:51 AM Report #547733 Posted March 6, 2014 at 11:51 AM create table product ( id int auto_increment primary key, id_tree int, name varchar(64), foreign key fk_tree (id_tree) references tree(id) on update cascade on delete cascade ) $id_tree_selected; $products = array(); do { $sql = "select name from product where id_tree = {$id_tree_selected}"; $products = array_merge(execute_sql($sql), $products); $sql = "select id_parent from tree where id = {$id_tree_selected}"; $id_tree = execute_sql($sql); } while ($id_tree != null) var_dump($products); IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
diesel10 Posted March 6, 2014 at 12:11 PM Author Report #547739 Posted March 6, 2014 at 12:11 PM create table product ( id int auto_increment primary key, id_tree int, name varchar(64), foreign key fk_tree (id_tree) references tree(id) on update cascade on delete cascade ) $id_tree_selected; $products = array(); do { $sql = "select name from product where id_tree = {$id_tree_selected}"; $products = array_merge(execute_sql($sql), $products); $sql = "select id_parent from tree where id = {$id_tree_selected}"; $id_tree = execute_sql($sql); } while ($id_tree != null) var_dump($products); Desde já um obriga-dão por estares a ajudar-me 'HappyHippyHippo', mas tenho algumas dúvidas no código que me envias-te e não consigo transformar com os meus dados da minha tabela que se designa 'tabletreeproductgroup` , Tabela 'tabletreeproductgroup` contém os seguintes campos: STR_ID | int(11) | Não é nulo | Primário| STR_ID_PARENT | int(11) | Nao é nulo | STR_TYPE | smallint(6) | NULL | STR_LEVEL | smallint(6) | NULL | STR_TEXT | varchar(30) utf8_general_ci | Não é nulo|
HappyHippyHippo Posted March 6, 2014 at 01:08 PM Report #547746 Posted March 6, 2014 at 01:08 PM o que é o STR_TYPE e o STR_LEVEL ? IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
diesel10 Posted March 6, 2014 at 02:31 PM Author Report #547753 Posted March 6, 2014 at 02:31 PM o que é o STR_TYPE e o STR_LEVEL ? O STR_TYPE define o tipo e o STR_LEVEL o nível: exemplo: O tipo 1 define automóveis ligeiros: Automóveis ligeiros: tipo 1; nível 1 Motor: tipo 1 , nível 2; Lubrificação, tipo 1, nível 3; Sistema de luzes, tipo 1, nível 2; O tipo 2 define Camiões: Camiões: tipo 2; nível 1 Motor: tipo 2, nível 2; Lubrificação, tipo 2, nível 3; Sistema de luzes, tipo 2, nível 2; Esta tabela faz parte de um programa para consulta de peças para carros, chamado TECDOC.
bioshock Posted March 6, 2014 at 02:40 PM Report #547756 Posted March 6, 2014 at 02:40 PM Não precisas desses dois campos (a menos que os queiras..) para fazer a tree-view. Basta-te três campos.
diesel10 Posted March 6, 2014 at 02:51 PM Author Report #547758 Posted March 6, 2014 at 02:51 PM (edited) Não precisas desses dois campos (a menos que os queiras..) para fazer a tree-view. Basta-te três campos. Eu necessito do STR_LEVEL porque é o campo que me define juntamente com o STR_ID_PARENT se é uma sub-categoria, exemplo: STR_ID | STR_ID_PARENT | STR_TYPE | STR_LEVEL | STR_TEXT 10001 | 0 | 1 | 1 | Veiculos ligeiros 10101 | 10001 | 1 | 2 | Motor 10103 | 10002 | 1 | 3 | Lubrificação 10343 | 10002 | 1 | 3 | Juntas 10455 | 10343 | 1 | 4 | Juntas de kk 10549 | 10002 | 1 | 3 | Cárter Que vai dar mais isto: Veículos Ligeiros Motor Lubrificação Juntas Juntas de kk Cárter Edited March 6, 2014 at 02:53 PM by diesel10
HappyHippyHippo Posted March 6, 2014 at 03:03 PM Report #547759 Posted March 6, 2014 at 03:03 PM como foi dito, esses dois campos são redundantes ... no entanto olha bem para os dados da tua tabela e verás que as relações STR_ID_PARENT estão incorrectas. isso não acontecia se tivesses usados as foreign key como no código que apresentei IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
diesel10 Posted March 6, 2014 at 03:53 PM Author Report #547771 Posted March 6, 2014 at 03:53 PM como foi dito, esses dois campos são redundantes ... no entanto olha bem para os dados da tua tabela e verás que as relações STR_ID_PARENT estão incorrectas. isso não acontecia se tivesses usados as foreign key como no código que apresentei Talvez estejam, mas como vos disse esta tabela é importada do programa TECDOC, e até fiz uma ligação funcional entre elas usando select list dentro de um form que funciona, mas a minha ideia era troca-las para uma árvore de categorias. Porque neste momento para mostrar as subcategorias de nivel 5(estou a fazer com 4 select list 😞 ). Até vos deixo parte do código para verem. Ps: sou iniciante nisto 😁!! Código do form: <form id="form1" name="form1" method="post"> <label for="campo1"></label> <select name="campo1" size="34" multiple="multiple" id="campo1" onchange="this.form.submit();MM_showHideLayers('campo2','','show')"> <?php do { ?> <option value="<?php echo $row_Recordset1['STR_ID']?>"><?php echo $row_Recordset1['STR_TEXT']?></option> <?php } while ($row_Recordset1 = mysql_fetch_assoc($Recordset1)); $rows = mysql_num_rows($Recordset1); if($rows > 0) { mysql_data_seek($Recordset1, 0); $row_Recordset1 = mysql_fetch_assoc($Recordset1); } ?> </select> <select name="campo2" size="34" multiple="multiple" id="campo2" ondblclick="this.form.submit()"> <?php do { ?> <option value="<?php echo $row_Recordset2['STR_ID']?>"><?php echo $row_Recordset2['STR_TEXT']?></option> <?php } while ($row_Recordset2 = mysql_fetch_assoc($Recordset2)); $rows = mysql_num_rows($Recordset2); if($rows > 0) { mysql_data_seek($Recordset2, 0); $row_Recordset2 = mysql_fetch_assoc($Recordset2); } ?> </select> <select name="campo3" size="34" multiple="multiple" id="campo3" ondblclick="this.form.submit()"> <?php do { ?> <option value="<?php echo $row_Recordset3['STR_ID']?>"><?php echo $row_Recordset3['STR_TEXT']?></option> <?php } while ($row_Recordset3 = mysql_fetch_assoc($Recordset3)); $rows = mysql_num_rows($Recordset3); if($rows > 0) { mysql_data_seek($Recordset3, 0); $row_Recordset3 = mysql_fetch_assoc($Recordset3); } ?> </select> <select name="campo4" size="34" multiple="multiple" id="campo4" ondblclick="this.form.submit()"> <?php do { ?> <option value="<?php echo $row_Recordset4['STR_ID']?>"><?php echo $row_Recordset4['STR_TEXT']?></option> <?php } while ($row_Recordset4 = mysql_fetch_assoc($Recordset4)); $rows = mysql_num_rows($Recordset4); if($rows > 0) { mysql_data_seek($Recordset4, 0); $row_Recordset4 = mysql_fetch_assoc($Recordset4); } ?> </select> <input name="btsearc" type="submit" class="bttsearch" id="btsearc" onclick="MM_goToURL('parent','produtos.php?<?php echo $row_Recordset4['STR_ID']; $row_Recordset3['STR_ID']; $row_Recordset2['STR_ID']; $row_Recordset1['STR_ID']; ?>=');return document.MM_returnValue" value="Pesquisar" align="left" /> </form> Código php: mysql_select_db($database_con_site, $con_site); $query_Recordset1 = "SELECT * FROM tabletreeproductgroup WHERE STR_TYPE=1 AND STR_LEVEL=2 GROUP BY STR_TEXT ASC"; $Recordset1 = mysql_query($query_Recordset1, $con_site) or die(mysql_error()); $row_Recordset1 = mysql_fetch_assoc($Recordset1); $totalRows_Recordset1 = mysql_num_rows($Recordset1); $tipo2 = "-1"; if (isset($_POST['campo1'])) { $tipo2 = $_POST['campo1']; } mysql_select_db($database_con_site, $con_site); $query_Recordset2 = sprintf("SELECT * FROM tabletreeproductgroup WHERE STR_ID_PARENT = %s AND STR_TYPE=1 AND STR_LEVEL=3 ORDER BY STR_TEXT ASC", GetSQLValueString($tipo2, "int")); $Recordset2 = mysql_query($query_Recordset2, $con_site) or die(mysql_error()); $row_Recordset2 = mysql_fetch_assoc($Recordset2); $totalRows_Recordset2 = mysql_num_rows($Recordset2); $tipo3 = "-1"; if (isset($_POST['campo2'])) { $tipo3 = $_POST['campo2']; } mysql_select_db($database_con_site, $con_site); $query_Recordset3 = sprintf("SELECT * FROM tabletreeproductgroup WHERE STR_ID_PARENT = %s AND STR_TYPE=1 AND STR_LEVEL=4 ORDER BY STR_TEXT ASC", GetSQLValueString($tipo3, "int")); $Recordset3 = mysql_query($query_Recordset3, $con_site) or die(mysql_error()); $row_Recordset3 = mysql_fetch_assoc($Recordset3); $totalRows_Recordset3 = mysql_num_rows($Recordset3); $tipo4 = "-1"; if (isset($_POST['campo3'])) { $tipo4 = $_POST['campo3']; } mysql_select_db($database_con_site, $con_site); $query_Recordset4 = sprintf("SELECT * FROM tabletreeproductgroup WHERE STR_ID_PARENT = %s AND STR_TYPE=1 AND STR_LEVEL=5 ORDER BY STR_TEXT ASC", GetSQLValueString($tipo4, "int")); $Recordset4 = mysql_query($query_Recordset4, $con_site) or die(mysql_error()); $row_Recordset4 = mysql_fetch_assoc($Recordset4); $totalRows_Recordset4 = mysql_num_rows($Recordset4); // Ler dados $tipo2 = array($row_Recordset1['STR_ID']); $tipo3 = array($row_Recordset2['STR_ID']); $tipo4 = array($row_Recordset3['STR_ID']); $tipo5 = array($row_Recordset4['STR_ID']); $resultados = array(); // Não existem resultados... if (isset($_POST['campo1'])) { $tipo3 = array('campo2'); // ler nivel 3 $tipo4 = array('campo3'); // ler nivel 4 $tipo5 = array('campo4'); // ler nivel 5 $resultados = array('btsearc'); // obter resultados, de uma base de dados ou XML, etc... } ?>
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now