Ir para conteúdo

Arquivado

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

Maurocrr

Select em duas tabelas com id diferente

Recommended Posts

Olá,

 

Sou novo aqui no fórum. Estou com uma dúvida e fiz inúmeros testes e ainda não funcionou corretamente.

 

Estou trabalhando em um sistema de controle de eventos com PHP e MySQL. Tenho no banco de dados duas tabelas, a tabela evento e a tabela ambiente.

 

Na tabela evento fica cadastrado a data do evento, o horário de início e fim do evento e o id do ambiente onde será o evento.

 

No sistema tenho um formulário para cadastro de evento. Neste formulário, o usuário deverá informar a data do evento, o horário de início e fim e selecionar o ambiente.

 

Antes de mostrar o combobox com os ambientes disponíveis, faço uma busca no MySQL com a data informada, o horário de início e fim do evento. Caso algum ambiente já esteja ocupado na mesma data e horário, este ambiente não deve ser exibido no combobox.

 

Quando tenho somente um ambiente ocupado funciona, o problema está quando tenho mais de um. Já tentei usar do while, for, session para gravar o id do ambiente ocupado, mas nada funcionou.

 

Segue abaixo o código:

 

<?php

 

$data = "31/08/2015";

$horario_inicio = "09:00";

$horario_fim = "11:00";

 

 

$sql = mysql_query("SELECT * FROM evento WHERE data='$data' AND (('$horario_inicio' <= horario_inicio AND '$horario_fim' > horario_inicio) OR ('$horario_inicio' < horario_fim AND '$horario_fim' > horario_fim) OR ('$horario_inicio' >= horario_inicio AND '$horario_fim' <= horario_fim) OR ('$horario_inicio' <= horario_inicio AND '$horario_fim' >= horario_fim))");

$cont = mysql_num_rows($sql);

 

if($cont > 0){

 

$contador = 0;

while($arr = mysql_fetch_array($sql)){

 

$contador = $contador + 1;

 

//gravar idambiente em uma session

$_SESSION['id'.$contador] = $arr['idambiente'];

 

for($i = 1; $i <= $contador; $i++){

$select = mysql_query("SELECT * FROM ambiente WHERE idambiente <> '".$_SESSION['id'.$i]."' AND idambiente <> '".$_SESSION['id'.$contador]."'");

$arr_select = mysql_fetch_array($select);

 

echo $arr_select['ambiente'];

 

}

 

}

}

?>

 

 

Por exemplo, tenho dois eventos no dia 31/08/2015.

O evento 1 começa às 08:30 e acaba às 10:30 - ocorre no ambiente 1. O evento 2 começa às 09:00 e acaba às 11:00 - ocorre no ambiente 2. O correto seria o código retornar todos os ambientes cadastrado exceto o ambiente 1 e 2. O problema é que o código acima retorna o ambiente 2 e o ambiente 1 nesta ordem.

 

 

Alguma dica ? O que posso fazer para que o código funcione corretamente ?

Compartilhar este post


Link para o post
Compartilhar em outros sites
Olha eu não entendi pq vc está utilizando session, vc pode fazer o seguinte, colocar os valores em uma variavel e buscar tudo exeto aqueles IDs


Tenta isso aqui



<?php
$data = "31/08/2015";
$horario_inicio = "09:00";
$horario_fim = "11:00";

$sql = mysql_query("SELECT * FROM evento WHERE data='$data' AND (('$horario_inicio' <= horario_inicio AND '$horario_fim' > horario_inicio) OR ('$horario_inicio' < horario_fim AND '$horario_fim' > horario_fim) OR ('$horario_inicio' >= horario_inicio AND '$horario_fim' <= horario_fim) OR ('$horario_inicio' <= horario_inicio AND '$horario_fim' >= horario_fim))");

$cont = mysql_num_rows($sql);

if($cont > 0){
$i = 0;
while($arr = mysql_fetch_array($sql)){
if ($i == 0 ) {
$idambiente = $arr['idambiente'];
} else {
$idambiente = $idambiente.",".$arr['idambiente'];
}
}

$select = mysql_query("SELECT * FROM ambiente WHERE idambiente NOT IN (".$idambiente.")");

$arr_select = mysql_fetch_array($select);

echo $arr_select['ambiente'];
}
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

wolfphw,

 

Utilizei session em uma das tentativas que fiz. Rodei o script que você colocou, mas retorna somente um ambiente.

 

Acho que o problema pode estar neste trecho:

 

if($cont > 0){
$i = 0;
while($arr = mysql_fetch_array($sql)){
if ($i == 0 ) {
$idambiente = $arr['idambiente'];
} else {
$idambiente = $idambiente.",".$arr['idambiente'];
}
}

 

 

Neste caso, a $i sempre será == 0.

 

 

Tentei alterar, mas ainda não funcionou corretamente.

 

Já estou testando isso de várias formas. Talvez seja mais simples do que penso.

 

 

Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Resolvido !!

 

Alterei algumas coisas.

 

 

<?php
$data = "02/09/2015";
$horario_inicio = "08:00";
$horario_fim = "09:30";
$sql = mysql_query("SELECT * FROM evento WHERE data='$data' AND (('$horario_inicio' <= horario_inicio AND '$horario_fim' > horario_inicio) OR ('$horario_inicio' < horario_fim AND '$horario_fim' > horario_fim) OR ('$horario_inicio' >= horario_inicio AND '$horario_fim' <= horario_fim) OR ('$horario_inicio' <= horario_inicio AND '$horario_fim' >= horario_fim))");
$cont = mysql_num_rows($sql);
if($cont > 0){
$i = 0;
while($arr = mysql_fetch_array($sql)){
if ($i == 0 ) {
$idambiente = $arr['idambiente'];
} else {
$idambiente = $idambiente.",".$arr['idambiente'];
}
$i = 1;
}
$select = mysql_query("SELECT * FROM ambiente WHERE idambiente NOT IN (".$idambiente.")");
$arr_select = mysql_fetch_array($select);
do{
echo $arr_select['ambiente']."<br>";
}while($arr_select = mysql_fetch_array($select));
}
?>
Adicionei no final do while o $i = 1, para entrar no else.
No final do script, para listar todos os resultados, utilizei o do while.
Obrigado pela ajuda !

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por ILR master
      Fala galera.
      Espero que todos estejam bem.
      Seguinte: Tenho um arquivo xml onde alguns campos estão com : (dois pontos), como o exemplo abaixo:
       
      <item>
      <title>
      d sa dsad sad sadasdas
      </title>
      <link>
      dsadas dsa sad asd as dsada
      </link>
      <pubDate>sadasdasdsa as</pubDate>
      <dc:creator>
      d sad sad sa ad as das
      </dc:creator>
      </item>
       
      Meu código:
       
      $link = "noticias.xml"; 
      $xml = simplexml_load_file($link); 
      foreach($xml -> channel as $ite) {     
           $titulo = $ite -> item->title;
           $urltitulo = $ite -> item->link;
           print $urltitulo = $ite -> item->dc:creator;
      } //fim do foreach
      ?>
       
      Esse campo dc:creator eu não consigo ler. Como faço?
       
      Agradeço quem puder me ajudar.
       
      Abs
       
       
    • Por First
      Olá a todos!
       
      Eu estou criando um sistema do zero mas estou encontnrando algumas dificuldades e não estou sabendo resolver, então vim recorrer ajuda de vocês.
      Aqui está todo o meu código: https://github.com/PauloJagata/aprendizado/
       
      Eu fiz um sistema de rotas mas só mostra o conteúdo da '/' não sei porque, quando eu tento acessar o register nada muda.
      E eu também quero que se não estiver liberado na rota mostra o erro de 404, mas quando eu tento acessar um link inválido, nada acontece.
      Alguém pode me ajudar com isso? E se tiver algumas sugestão para melhoria do código também estou aceitando.
       
       
      Desde já, obrigado.
    • Por landerbadi
      Olá pessoal, boa tarde
       
      Tenho uma tabela chamada "produtos" com os seguintes campos (id, produto) e outra tabela chamada "itens" com os seguintes campos (id, prod_01, prod_02, prod_03, prod_04).
       
      Na tabela produtos eu tenho cadastrado os seguintes produtos: laranja, maçã, uva, goiaba, arroz, feijão, macarrão, etc.
       
      Na tabela itens eu tenho cadastrado os itens da seguinte maneira:
       
      1, laranja, uva, arroz, feijão;
      2, maçã, macarrão, goiaba, uva;
      3, arroz, feijão, maçã, azeite
       
      Meu problema é o seguinte: 
      Eu escolho um produto da tabela "produtos", por exemplo "uva".  Preciso fazer uma consulta na tabela "itens" para ser listado todos os registros que contenham o produto "uva" e que todos os demais produtos estejam cadastrados na tabela "produtos".
       
      No exemplo acima seria listado apenas dois registros, pois o terceiro registro não contém o produto "uva". 
       
      Alguém pode me ajudar? Pois estou quebrando a cabeça a vários dias e não consigo achar uma solução.
×

Informação importante

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