Ir para conteúdo

POWERED BY:

Arquivado

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

sNniffer

Consulta 3 tabelas

Recommended Posts

Tenho o seguinte código:

$last_category = '';

while($resultado = mysql_fetch_array($query)) {
	if($last_category !== $resultado['nome_categoria']) {
		echo '<h4>'. $resultado['nome_categoria'] .'</h4>';
		$last_category = $resultado['nome_categoria'];
	}
	
 
					 	echo "<div class='checkbox' style='display:inline; margin-left:10px'>
						<label> 
						<input type='checkbox' name='servicos[]' value=".$resultado['id']." />". $resultado['nome'] ."<br>
						</label>
						</div>";
					 
}	

Está exibindo normalmente as subcategorias e categorias como tópico, mas, gostaria de adicionar uma condição de verificação com outra tabela chamada Clientes_sub_categoria, mas, não sei como começar, preciso que no momento em que é criado o checkbox, seja verificado na tabela clientes_sub_categoria (id,id_cliente,id_sub_categoria), se existe a relação entre o id do cliente e o id da subcategoria que no caso é $resultado['id']. E caso haja esta relaçao na tabela,o checkbox seja marcado.

Como posso fazer isso?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Simples, você fazer uma consulta pegando as informações na tabela clientes_sub_categoria que vai ficar na variável $cliente, depois você compara o campo dos id's, se forem os mesmos o botão ira conter o atributo checked, que faz ele vir selecionado como padrão.

$last_category = '';
 
$cliente = mysql_fetch_row($query2);
 
while($resultado = mysql_fetch_array($query)) {
    if($last_category !== $resultado['nome_categoria']) {
        echo '<h4>'. $resultado['nome_categoria'] .'</h4>';
        $last_category = $resultado['nome_categoria'];
    }
    
    $checked = ($cliente['id_sub_categoria'] == $resultado['id']) ? 'checked' : '' ;
 
    echo "
        <div class='checkbox' style='display:inline; margin-left:10px'>
            <label> 
                <input type='checkbox' name='servicos[]' ".$checked." value=".$resultado['id']." />". $resultado['nome'] ."<br>
            </label>
        </div>";
 
}

Espero ter ajudado, Abraço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Opa, ainda estou tentando resolver este problema, seguindo a sugestão do Willian Avelar, ao usar a linha com 'mysql_fetch_row' me retorna 'Undefined index: id_sub_categoria', ao trocar pelo 'mysql_fetch_assoc', os dados são exibidos, mas, o fundamento do projeto é:

 

Nas tabelas:

 

empresa_sub_categoria:id, id_empresa, id_sub_categoria

sub_categoria: id, id_categoria, nome

categoria: id, nome

Uma empresa pode ter várias subcategorias, com o código que estou usando, me passado pelo Willian, são exibidos todas, mas, é checkado apenas um checkbox.

$last_category = '';$query = mysql_query("SELECT categoria.*, sub_categoria.* FROM categoria INNER JOIN sub_categoria ON categoria.id = sub_categoria.id_categoria");while($resultado = mysql_fetch_array($query)) {    if($last_category !== $resultado['nome_categoria']) {        echo '<h4>'. $resultado['nome_categoria'] .'</h4>';        $last_category = $resultado['nome_categoria'];    }    	$query2= mysql_query("SELECT * from empresa_sub_categoria where id_empresa=$empresa");		$empresa_sub = mysql_fetch_assoc($query2);   		$checked = ($empresa_sub['id_sub_categoria'] == $resultado['id']) ? 'checked' : '' ;     echo "        <div class='checkbox' style='display:inline; margin-left:10px'>            <label>                 <input type='checkbox' name='servicos[]' ".$checked." value=".$resultado['id']." />". $resultado['nome'] ."<br>            </label>        </div>        "; }

Alguem :cry:

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

$sql = "SELECT * FROM tabela1 um, tabela2 dois, tabela3 tres WHERE um.id=dois.catId AND tres.id=um.userId";

 

Segue o exemplo ai, pode ir dando WHERE entre tabelas...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vai ser bem mais fácil você fazer tudo na mesma query. Mostra pra gente como está a $query atual e como está a tabela que você quer relacionar.

 

Você provavelmente vai ter que fazer ou uma subquery ou um JOIN.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom, inicialmente a $query principal está:

$last_category = '';
$query = mysql_query("SELECT categoria.*, sub_categoria.* FROM categoria INNER JOIN sub_categoria ON categoria.id = sub_categoria.id_categoria");

while($resultado = mysql_fetch_array($query)) {
    if($last_category !== $resultado['nome_categoria']) {
        echo '<h4>'. $resultado['nome_categoria'] .'</h4>';
        $last_category = $resultado['nome_categoria'];
    }

    	$query2= mysql_query("SELECT * from empresa_sub_categoria where id_empresa=$empresa");
		$empresa_sub = mysql_fetch_assoc($query2);
   		$checked = ($empresa_sub['id_sub_categoria'] == $resultado['id']) ? 'checked' : '' ;
 
    echo "
        <div class='checkbox' style='display:inline; margin-left:10px'>
            <label> 
                <input type='checkbox' name='servicos[]' ".$checked." value=".$resultado['id']." />". $resultado['nome'] ."<br>
            </label>
        </div>
        ";
} 

Tenho 3 tabelas, a tabela 'categoria', 'sub_categoria' e 'empresa_sub_categoria'.

 

Tabelas:

Categoria: id, nome

Sub_categoria: id, id_categoria, nome

Empresa_sub_categoria: id, id_empresa, id_sub_categoria

 

Um empresa pode ter várias sub_categorias. Nesta tela são exibidos todas as categorias com suas sub_categorias, e deve checar o input caso o id_sub_categoria for igual a sub_categoria.

 

Ficou meio confuso?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se eu entendi bem, basta modificar a primeira query para checar se o registro relacionado EXISTE na tabela empresa_sub_categoria, algo assim:

SELECT
 categoria.*,
 sub_categoria.*,
 (EXISTS(SELECT id FROM empresa_sub_categoria WHERE id_empresa=$empresa AND id_sub_categoria = sub_categoria.id)) AS registroExiste
FROM....

Agora você pode acessar o valor através da chave $resultado['registroExiste']

Compartilhar este post


Link para o post
Compartilhar em outros sites

lucaswxp, eu fiz o sql do jeitinho que voce disse, o código ficou assim

$last_category = '';
$query = mysql_query("
 SELECT
 categoria.*,
 sub_categoria.*,
 (EXISTS(SELECT id FROM empresa_sub_categoria WHERE id_empresa=$empresa AND id_sub_categoria = sub_categoria.id)) AS registroExiste
FROM categoria INNER JOIN sub_categoria ON categoria.id = sub_categoria.id_categoria");

while($resultado = mysql_fetch_array($query)) {
    if($last_category !== $resultado['nome_categoria']) {
        echo '<h4>'. $resultado['nome_categoria'] .'</h4>';
        $last_category = $resultado['nome_categoria'];
    }
 
   		$checked = ($resultado['registroExiste'] == $resultado['id']) ? 'checked' : '' ;

    	echo "
        <div class='checkbox col-lg-3 col-md-3 col-sm-3 col-xs-12' style='display:inline; '>
            <label> 
                <input type='checkbox' name='servicos[]' ".$checked." value=".$resultado['id']." />". $resultado['nome'] ."<br>
            </label>
        </div>
        ";

}	 

Mas, está ocorrendo a mesma coisa, ou seja, está checando apenas o primeiro registro.

 

Vlw mesmo

Compartilhar este post


Link para o post
Compartilhar em outros sites


$query = mysql_query("SELECT

categoria.*,

sub_categoria.*,

# retorna string 'checked' caso exista registro, caso contrário NULL

IF(empresa_sub_categoria.id IS NULL, NULL, 'checked') AS isChecked

FROM categoria

INNER JOIN sub_categoria ON categoria.id = sub_categoria.id_categoria

# verifica se conincide ou não os id empresa e sub_cat.

LEFT JOIN empresa_sub_categoria ON sub_categoria.id = empresa_sub_categoria.id_sub_categoria");

 

while($resultado = mysql_fetch_array($query)) {

...

// no input checkbox, imprime direto o resultado

echo "<input type='checkbox' name='servicos[]' ".$resultado['isChecked']." value=".$resultado['id']." />";

...

}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Show Hugo, funcionou, mas, trouxe checado todos os itens da tabela, tem como fazer mais uma restrição no sql, para trazer todas subcategorias e checar as que são apenas de determinada empresa:

empresa_sub_categoria.id_empresa

Vlw

Compartilhar este post


Link para o post
Compartilhar em outros sites

Resolvido:

$query = mysql_query("SELECT
categoria.*,
sub_categoria.*,
# retorna string 'checked' caso exista registro, caso contrário NULL
IF(empresa_sub_categoria.id IS NULL, NULL, 'checked') AS isChecked
FROM categoria
INNER JOIN sub_categoria ON categoria.id = sub_categoria.id_categoria
# verifica se conincide ou não os id empresa e sub_cat.
LEFT JOIN empresa_sub_categoria ON sub_categoria.id = empresa_sub_categoria.id_sub_categoria and empresa_sub_categoria.id_empresa = $empresa");

Vlw Hugo

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.