Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Ola. Tenho uma tabela no 3 campos que sao "**LIVRO, POS, PAGINA**" ao qual a logica e a seguinte: cada livro tem 100 paginas cada pagina tem 30 posiçoes tenho 8,364 registros pra inserir chegando a 100 paginas com 30 posiçoes cada passa para o livro 2 e como fazer o update na tabela inserindo nos campos LIVRO = 1, POS de 0 a 30 e PAGINA 1 para cada 30 registros logos apos pagina 2 ?
estou tentando fazer assim:
<?php
> ini_set('max_execution_time', 2000); $pdo = new
> DO(DB_SERVER.":host=".DB_HOST.";dbname=".DB_BASE,DB_USER,DB_PASSWORD);
> $sql = $pdo->prepare("SELECT count(*) FROM tabela2018");
> $sql->execute();
> $livro = 1;
> foreach($sql as $obj){
> $variavel = $obj[0];
> ceil((float)$variavel/100);
> $qtdlaco = ceil((float)$variavel/100);
> for ($id = 1; $id <= 35; $id++) {
> for($L=1; $L < $qtdlaco; $L++) {
> for ($P = 0; $P <= 30; $P++) {
> $sql = $pdo->prepare("UPDATE tabela2018 SET LIVRO = :LIVRO, POS = :POS, PAGINA = :PAGINA WHERE idtabela2018 = $id");
> $sql->bindValue(':LIVRO', $livro);
> $sql->bindValue(':POS', $P);
> $sql->bindValue(':PAGINA', $L);
> $sql->execute();
> }
> }
> }
>}
?>
mas na tebela so aparece:
LIVRO POS PAGINA
1 30 83
1 30 83
1 30 83
e nao como deveria :
LIVRO POS PAGINA
1 0 1
1 1 1
1 2 1
SET @pos := 0;
SET @pagina := 1;
UPDATE tabela
SET LIVRO = FLOOR((ID - 1) / 3000) + 1,
POS = (@pos := (@pos + 1) % 30),
PAGINA = (@pagina := @pagina + FLOOR((@pos + 1) / 30))
WHERE ID BETWEEN 1 AND 8364;
isso resolveu meu problema. obrigado pela atençao.Eu estava imaginando em criar uma nova tabela, assim:
CREATE DEFINER=root@localhost PROCEDURE new_procedure()
BEGIN
Drop table if exists tabela;
CREATE TABLE `tabela` (
`livro` int DEFAULT NULL,
`pos` int DEFAULT NULL,
`pagina` int DEFAULT NULL,
`id` int NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
set @pos:=0;
set @pagina:=1;
set @livro:=1; insert into tabela (livro,pos,pagina) values (@livro,@pos,@pagina);
set @pos:=@pos+1;
if @pos=31 then set @pos=0;leave first_loop; end if;
end loop first_loop;
set @pagina=@pagina+1;
if @pagina=101 then set @pagina=1; leave second_loop; end if;
end loop second_loop;
set @livro=@livro+1;
if @livro=3 then leave third_loop; end if;
end loop third_loop;
END
Isso iria demorar um pouco. Aqui, eu gastei cinco segundos para criar uma tabela com 6.200 registros (2 livros com 100 páginas, cada uma com 31 posições). Parece que o banco de dados foi feito para emular uma matriz, eu só não sei como usar esse tipo de banco de dados.