COMO ATUALIZAR UM SELECT AO SELECIONAR OUTRO SELECT

JavaScript

PHP

JavaScript Web

31/03/2021

boa tarde tenho um cadastro de produtos onde tem 2 select
1 chamado de categorias
e outro sub categorias
queria que ao seleciona-se a categorias as sub categorias carregasse no outro select somente as da categorias selecionada baseado no cadastro do banco de dados

Estrutura da tabela `categorias`
--

CREATE TABLE `categorias` (
`id` int(11) NOT NULL,
`nome` varchar(100) NOT NULL,
`descricao` varchar(100) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
`url` varchar(100) NOT NULL,
`idu` int(11) NOT NULL,
`posicao` int(11) NOT NULL
)

Estrutura da tabela `subcategorias`
--

CREATE TABLE `subcategorias` (
`id` int(11) NOT NULL,
`idu` int(11) NOT NULL,
`nome` varchar(100) NOT NULL,
`descricao` text NOT NULL,
`categoria` varchar(100) NOT NULL,
`foto` varchar(100) NOT NULL
)

segue um exemplo

<div class="col-md-4">
<div class="form-group">
<label class="form-control-label">Categoria: <span class="tx-danger">*</span></label>
<select class="form-control" name="cad_cat" required>
<option value="" disabled selected><b>Selecione...</b></option>
<?php
$selcat = $connect->query("SELECT * FROM categorias WHERE idu = '$cod_id' ORDER BY posicao ASC");
while ($dadossel = $selcat->fetch(PDO::FETCH_OBJ)) {
?>
<option value="<?php print $idca = $dadossel->id;?>"><?php print $nomca = $dadossel->nome;?></option>
<?php } ?>
</select>
</div>
</div><!-- col-4 -->

<div class="col-md-4">
<div class="form-group">
<label class="form-control-label">Sub-Categoria: <span class="tx-danger">*</span></label>
<select class="form-control" name="cad_subcat" required>
<option value="" disabled selected><b>Selecione...</b></option>
<?php
$selcat2 = $connect->query("SELECT * FROM subcategorias WHERE idu = '$cod_id' ORDER BY nome ASC");
while ($dadossel2 = $selcat2->fetch(PDO::FETCH_OBJ)) {
?>
<option value="<?php print $idca = $dadossel2->id;?>"><?php print $nomca = $dadossel2->nome;?></option>
<?php } ?>
</select>
</div>
</div><!-- col-4 -->


como faria funcionar esses dois select interligado retornando os dados em JSON,. E criar o select com javascript
ou se alguem souber outra solucao

fico no aguardo desde ja agradeço
Adriano

Adriano

Curtidas 0

Respostas

Chromusmaster

Chromusmaster

31/03/2021

Para que, um select busque dados com base no retorno do outro é preciso executá-los dentro do where com base no retorno da outra ou fazer joins. Exemplo com WHERE:

SELECT * FROM primeira_tabela WHERE CAMPO IN (SELECT * FROM segunda_tabela where criterios=valor);


Exemplo com join:
SELECT * FROM primeira_tabela 
inner join segunda_tabela on segunda_tabela.campo_de_ligacao=primeira_tabela.campo_de_ligacao
WHERE critérios=valor;


Caso tenha alguma duvida ainda detalhe melhor a necessidade para que possa lhe auxiliar.

GOSTEI 0
Adriano

Adriano

31/03/2021

Para que, um select busque dados com base no retorno do outro é preciso executá-los dentro do where com base no retorno da outra ou fazer joins. Exemplo com WHERE:

SELECT * FROM primeira_tabela WHERE CAMPO IN (SELECT * FROM segunda_tabela where criterios=valor);


Exemplo com join:
SELECT * FROM primeira_tabela 
inner join segunda_tabela on segunda_tabela.campo_de_ligacao=primeira_tabela.campo_de_ligacao
WHERE critérios=valor;


Caso tenha alguma duvida ainda detalhe melhor a necessidade para que possa lhe auxiliar.



obrigado pela ajuda se for pedir muito nao teria como montar pra mim baseado no que vc falou ai estou comecando e nao entendo muito essa parte
pode usar os mesmo campo meus e adaptar a ele teria como mea judar
GOSTEI 0
Chromusmaster

Chromusmaster

31/03/2021

Obrigado pela ajuda! Se for pedir muito, teria como montar baseado na estrutura que enviei e no que vc falou ai? Estou comecando e não entendo muito essa parte,pode usar os mesmo campo meus e adaptar.


Sim, há um grande macete para aprender mais rápido. Em banco de dados temos 3 join (junções). São elas:

->INNER;
->LEFT;
->RIGHT;

INNER JOIN é quando você quer buscar os dados de duas ou mais tabelas e os dados precisam NECESSARIAMENTE existir nas duas tabelas. Ex.:
Select
nome_produto,
nome_empresa
from empresas
inner join produtos on
produtos.id_empresa=empresa.id
where empresas.id=1;

Ou seja todos os dados que estejam na tabela empresas tendo NECESSARIAMENTE todos os dados que também existem na tabela produtos. Isso segundo o critério de junção onde a empresa for a de primeiro cadastro (id_empresa=1).

LEFT JOIN é quando você quer buscar os dados de duas ou mais tabelas e os dados precisam NECESSARIAMENTE existir na PRIMEIRA TABELA, mas NÃO NECESSARIAMENTE existem na SEGUNDA TABELA. Ex.:

Select
nome_produto,
nome_empresa
from empresas
left join produtos on
produtos.id_empresa=empresa.id
where empresas.id=6;

Ou seja todos os dados que estejam na tabela empresas mas NÃO NECESSARIAMENTE tendo os dados de produtos cadastrados.Isso é bastante útil quando se quer saber os produtos que ainda faltam cadastrar por exemplo. Isso segundo o critério de junção onde a empresa for a de primeiro cadastro (id_empresa=6).

RIGHT JOIN é quando você quer buscar os dados de duas ou mais tabelas e os dados precisam NECESSARIAMENTE existir na SEGUNDA TABELA, mas NÃO NECESSARIAMENTE existem na PRIMEIRA TABELA. Ex.:

Select
nome_produto,
nome_empresa
from empresas
right join produtos on
produtos.id_empresa=empresa.id
where produtos.id>2;

Ou seja todos os dados que estejam na tabela produtos mas NÃO NECESSARIAMENTE tendo os dados das empresas cadastradas. Dificilmente será usado o right join, nestes casos é preferível inverter a ordem das tabelas e utilizar um left join.

Logo mais te mando a query com a estrutura que colocou aqui. Esta foi apenas uma explicação para aprender banco de dados mais rápido.
GOSTEI 0
Adriano

Adriano

31/03/2021

obrigado novamente
tentei montar aqui baseado no q me passou mais ainda nao consegui funcionar

segue

<div class="col-md-4">
<div class="form-group">
<label class="form-control-label">Categoria: <span class="tx-danger">*</span></label>
<select class="form-control" name="cad_cat" required>
<option value="" disabled selected><b>Selecione...</b></option>
<?php
$buscacategorias = $connect->query("SELECT * FROM categorias WHERE idu='$cod_id' ORDER BY posicao ASC");
while ($exibircategoria = $buscacategorias->fetch(PDO::FETCH_OBJ)) {

?>
<option value="<?php print $idca = $exibircategoria->id;?>"><?php print $nomca = $exibircategoria->nome;?></option>

<?php } ?>

</select>
</div>

</div><!-- col-4 -->

<div class="col-md-4">
<div class="form-group">
<label class="form-control-label">Categoria: <span class="tx-danger">*</span></label>
<select class="form-control" name="cad_subcat" required>
<option value="" disabled selected><b>Selecione...</b></option>
<?php
$buscasubcategorias = $connect->query("SELECT * FROM subcategorias WHERE categoria = '".$exibircategoria->id."'");
while ($exibirlista = $buscasubcategorias->fetch(PDO::FETCH_OBJ)) {
?>
<option value="<?php print $idca = $exibirlista->id;?>"><?php print $nomca = $exibirlista->nome;?></option>
<?php } ?>
</select>
</div>

</div><!-- col-4 -->


onde ta meu erro sera
GOSTEI 0
Adriano

Adriano

31/03/2021

tentei montar de outra maneira mais ainda nao tive sucesso

minha url ta como subcategorias.php

<?php
ob_start();
session_start();
if((!isset ($_SESSION['cod_id']) == true)) { unset($_SESSION['cod_id']); header('location: ./'); }
$cod_id = $_SESSION['cod_id'];
require_once "../../funcoes/Conexao.php";
require_once "../../funcoes/Key.php";


?>



<div class="form-group">
<label class="form-control-label">Sub-Categoria: <span class="tx-danger">*</span></label>
<select class="form-control" id="sub_cat" name="cad_subcat" required>
<option value="" disabled selected><b>Selecione...</b></option>
<?php
$selcat2 = $connect->query("SELECT * FROM subcategorias WHERE idu = '$cod_id' ORDER BY nome ASC");
while ($dadossel2 = $selcat2->fetch(PDO::FETCH_OBJ)) {
?>
<option value="<?php print $idca = $dadossel2->id;?>"><?php print $nomca = $dadossel2->nome;?></option>
<?php } ?>
</select>
</div>
</div><!-- col-4 -->


ai no produto.php ta a categoria e a funcao

<div class="col-md-4">
<div class="form-group">
<label class="form-control-label">Categoria: <span class="tx-danger">*</span></label>
<select class="form-control" id="id_cat" name="cad_cat" required>
<option value="" disabled selected><b>Selecione...</b></option>
<?php
$selcat = $connect->query("SELECT * FROM categorias WHERE idu = '$cod_id' ORDER BY posicao ASC");
while ($dadossel = $selcat->fetch(PDO::FETCH_OBJ)) {
?>
<option value="<?php print $idca = $dadossel->id;?>"><?php print $nomca = $dadossel->nome;?></option>
<?php } ?>
</select>
</div>


<script>
$(function(){
$('#id_cat').change(function(){
console.log('change');
if( $(this).val() ) {
val = $(this).val();
$('#sub_cat).hide();
$('.carregando').show();
$.getJSON(
'../ajax/subcategorias.php?id='+val,
, function(j){
var options = '<option value=""></option>';
for (var i = 0; i < j.length; i++) {
options += '<option value="' +
j.id_sub_cat+ '">' +
j.nome_sub_cat + '</option>';
}
$('#sub_cat').html(options).show();
$('.carregando').hide();
});
} else {
$('#sub_cat').html(
'<option value="">-- Escolha um Tipo--</option>'
);
}
});
});


</script>


so q nao to conseguindo chamar o que sera q ta faltando sera
GOSTEI 0
POSTAR