Jump to content

Cursores em SQL


MrFilipe
 Share

Recommended Posts

Estou a criar um sistema de reservas de salas de aula, e abri este tópico porque estava com dificuldades em criar uns comandos em sql.

Depois de me fornecerem os horarios das salas, criei uma script em sql que permitia mostrar as salas ocupadas e salas vazias, em diferentes, tempos, Dia da semana e Data. Mas eu fiz isto só para uma semana... Agora gostaria de fazer isto para o ano lectivo inteiro, será que alguém me poderá ajudar?

Obrigado.

Abraço.

Link to comment
Share on other sites

De que ajuda precisas?

Eu só vou ajudar-te em coisas pequenas. Nada de complexo.

"[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31

Life is a genetically transmitted disease, induced by sex, with death rate of 100%.

Link to comment
Share on other sites

Eu também tinha pensado no between, eu criei um dowhile com este código abaixo, mas não sei se o between aqui dará

DELIMITER $$

DROP PROCEDURE IF EXISTS `reserva`.`dowhile` $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `dowhile`()
BEGIN
-- Definição de variáveis utilizadas na Procedure
  DECLARE tempo INTEGER;
  DECLARE diasemana INTEGER;

  DECLARE existe_mais_linhas INT DEFAULT 0;
  DECLARE nsala CHAR(5);

-- Definição do cursor
  DECLARE minhas_salas CURSOR FOR SELECT DISTINCT salaid FROM reserva.sala;

    -- Definição da variável de controle de looping do cursor
  DECLARE CONTINUE HANDLER FOR NOT FOUND SET existe_mais_linhas=1;

  -- Abertura do cursor
  OPEN minhas_salas;

  -- Looping de execução do cursor
  meuLoop: LOOP
  FETCH minhas_salas INTO nsala;

    -- Controle de existir mais registros na tabela
  IF existe_mais_linhas = 1 THEN
  LEAVE meuLoop;
  END IF;

    SET diasemana=1;
    WHILE diasemana<=5 DO BEGIN
      SET tempo=1;
      WHILE tempo<=18 DO
        INSERT INTO reserva.calendario (Ocupado, Data, Dia, Tempo, Sala_SalaId)
          VALUES('0','2011-01-01',diasemana,tempo,nsala);
        SET tempo=tempo+1;
      END WHILE;
      SET diasemana=diasemana+1;
      END;
    END WHILE;
  END LOOP meuLoop;


END $$

DELIMITER ;

eu cria saber de que forma vou alterar esta script para prolongar a data...

Abraço.

Link to comment
Share on other sites

Já agora tenho outra duvida, que é bastante importante para o meu trabalho que consiste em, eu selecciono uma sala verifico o seu horário e onde tem 0 na ocupação clico em reservar. Mas depois de finalizar a reserva essa sala no seu horário não passa para 1, fica sempre a 0  😉. Que poderei fazer para mudar isso de forma a ficar correcto?

Abraço.

Link to comment
Share on other sites

Mas eu suspeito que o sql é que esta mal, posso na mesma fornecer o código php, mas eu estou a fazer em Dreamweaver...

<?php require_once('Connections/ReservaSala.php'); ?>
<?php
if (!function_exists("GetSQLValueString")) {
function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "") 
{
  if (PHP_VERSION < 6) {
    $theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue;
  }

  $theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue);

  switch ($theType) {
    case "text":
      $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
      break;    
    case "long":
    case "int":
      $theValue = ($theValue != "") ? intval($theValue) : "NULL";
      break;
    case "double":
      $theValue = ($theValue != "") ? doubleval($theValue) : "NULL";
      break;
    case "date":
      $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
      break;
    case "defined":
      $theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;
      break;
  }
  return $theValue;
}
}

$maxRows_RecordReserva = 10;
$pageNum_RecordReserva = 0;
if (isset($_GET['pageNum_RecordReserva'])) {
  $pageNum_RecordReserva = $_GET['pageNum_RecordReserva'];
}
$startRow_RecordReserva = $pageNum_RecordReserva * $maxRows_RecordReserva;

$colname_RecordReserva = "-1";
if (isset($_GET['reservaid'])) {
  $colname_RecordReserva = $_GET['reservaid'];
}
mysql_select_db($database_ReservaSala, $ReservaSala);
$query_RecordReserva = sprintf("SELECT professor.professorID,        reserva.*,        professor.Nome,        reserva.reservaID FROM reserva.professor professor INNER JOIN reserva.reserva reserva           ON (professor.professorID = reserva.professor_professorID) WHERE (reserva.reservaID = %s)", GetSQLValueString($colname_RecordReserva, "text"),GetSQLValueString($colname_RecordReserva, "text"));
$query_limit_RecordReserva = sprintf("%s LIMIT %d, %d", $query_RecordReserva, $startRow_RecordReserva, $maxRows_RecordReserva);
$RecordReserva = mysql_query($query_limit_RecordReserva, $ReservaSala) or die(mysql_error());
$row_RecordReserva = mysql_fetch_assoc($RecordReserva);

if (isset($_GET['totalRows_RecordReserva'])) {
  $totalRows_RecordReserva = $_GET['totalRows_RecordReserva'];
} else {
  $all_RecordReserva = mysql_query($query_RecordReserva);
  $totalRows_RecordReserva = mysql_num_rows($all_RecordReserva);
}
$totalPages_RecordReserva = ceil($totalRows_RecordReserva/$maxRows_RecordReserva)-1;
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>

<body>
<table border="1">
  <tr>
    <td>reservaID</td>
    <td>DataInicio</td>
    <td>DataFim</td>
    <td>professor_professorID</td>
    <td>turma_turmaID</td>
  </tr>
  <?php do { ?>
    <tr>
      <td><?php echo $row_RecordReserva['reservaID']; ?></td>
      <td><?php echo $row_RecordReserva['DataInicio']; ?></td>
      <td><?php echo $row_RecordReserva['DataFim']; ?></td>
      <td><?php echo $row_RecordReserva['professor_professorID']; ?></td>
      <td><?php echo $row_RecordReserva['turma_turmaID']; ?></td>
    </tr>
    <?php } while ($row_RecordReserva = mysql_fetch_assoc($RecordReserva)); ?>
</table>
</body>
</html>
<?php
mysql_free_result($RecordReserva);
?>

Abraço.

Link to comment
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.