Ir para conteúdo

Arquivado

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

wneo

UPDATE reorganizando ordem numérica, como fazer?

Recommended Posts

Olá!!!

Pessoal preciso fazer com q o update reorganize uma ordem numérica.

- Imaginem que possuo vários registros em uma tabela, e o que define sua ordem de exibição é uma coluna chamada 'ordem'.

- Quando vou exibir, faço o select com o 'order by ordem'. Até aí tudo ok.

- Mas agora, na tela de gestão que criei, preciso oferecer a possibilidade de atualizar essa ordem.

- Então imaginem que tenho 10 registros. Dessa forma a coluna ordem estará 1,2,3,4,5,6,7,8,9,10.

- Agora se o usuário escolher que que o registro 2 deve ser o 1 a ser exibido. então ele fará o update no 2 para 1.

- Então nesse momento teremos dois registros com numero 1. A 'ordem' ficaria 1,1,3,4,5,6,7,8,9,10. Eis o problema...

- Como posso fazer para que o update ocorra de forma progressiva, atualizando a coluna 'ordem' sequencialmente, reorganizando os numeros da forma certa e não duplicá-los, fazendo com q aquele q era 1 virar 2 e assim por diante?

- E se eu precisasse inserir um novo registro nessa situação.. como ficaria o insert?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você envia todos os dados novamente para update? Ou apenas quele que mudou de ordem?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Envio somente aquele que mudou de ordem.

- Por exemplo, digamos q a tabela tem as colunas 'produto','categoria,'ordem'.

- Se quero que o 'Produto1' fique na 'ordem3', faço update nele... mas nesse caso, para corrigir meu caso, precisaria ser feito uma operação em todos os registros com base na coluna 'ordem'...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Envie todos já com a nova ordem. Vai te facilitar muito o trabalho.

Compartilhar este post


Link para o post
Compartilhar em outros sites

A ideia é boa, poderia ser algo com jquery...

imagino q atraves de campos form option, atualizando onchange...

como poderia ser isso em js, tem noção?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Isso vai depender de como você realiza a edição da ordem.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Imaginei em carregar todos da coluna ordem em form select, cada registro em seu select. De 1 a 10 por exemplo.

Então quando quando mudar '.change()' o que tá em 2 pra 3, todos mudarem sua ordem automatica. E quando salvar, realizar o update em todos já ordenados.

Saberia fazer isso em jquery?

...ou pensa em alguma outra forma, diz aí..?

Compartilhar este post


Link para o post
Compartilhar em outros sites

O digitar a ordem é muito subjetivo, faça algo para mover as linhas.

Pronto tem este: https://jqueryui.com/sortable/

Ou construa algo próprio somente com javascript.

Compartilhar este post


Link para o post
Compartilhar em outros sites

O digitar a ordem é muito subjetivo, faça algo para mover as linhas.

Pronto tem este: https://jqueryui.com/sortable/

Ou construa algo próprio somente com javascript.

Oi,

gostei desse:

<ul id="sortable">
<li class="ui-state-default"><span class="ui-icon ui-icon-arrowthick-2-n-s"></span>Item 1</li>
<li class="ui-state-default"><span class="ui-icon ui-icon-arrowthick-2-n-s"></span>Item 2</li>
<li class="ui-state-default"><span class="ui-icon ui-icon-arrowthick-2-n-s"></span>Item 3</li>
<li class="ui-state-default"><span class="ui-icon ui-icon-arrowthick-2-n-s"></span>Item 4</li>
<li class="ui-state-default"><span class="ui-icon ui-icon-arrowthick-2-n-s"></span>Item 5</li>
<li class="ui-state-default"><span class="ui-icon ui-icon-arrowthick-2-n-s"></span>Item 6</li>
<li class="ui-state-default"><span class="ui-icon ui-icon-arrowthick-2-n-s"></span>Item 7</li>
</ul>

Mas como poderia fazer para que o fosse registrado no banco de dados a posição que escolhi..?

por exemplo, arrastei o item1 pra segunda posição, então clico em salvar..

Compartilhar este post


Link para o post
Compartilhar em outros sites

Coloque dentro de um formulário com input hidden e utilize os inputs como array, conforme o exemplo no link abaixo:

http://forum.imasters.com.br/topic/462549-resolvidoretornar-array-de-inputs-com-mesmo-nome/?p=1832412

O PHP receberá conforme a ordem que você definiu.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Coloque dentro de um formulário com input hidden e utilize os inputs como array, conforme o exemplo no link abaixo:

http://forum.imasters.com.br/topic/462549-resolvidoretornar-array-de-inputs-com-mesmo-nome/?p=1832412

O PHP receberá conforme a ordem que você definiu.

To tentando montar:

<meta charset="utf-8">
<?php  
require("oraculo/conecta/conecta.php");
//require "../oraculo/sessions/session.php";

require "oraculo/sql/sql_global.php";
?>	

<html lang="en">
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>jQuery UI Sortable - Default functionality</title>
  <link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
  <link rel="stylesheet" href="/resources/demos/style.css">
  <style>
  #sortable { list-style-type: none; margin: 0; padding: 0; width: 60%; }
  #sortable li { margin: 0 3px 3px 3px; padding: 0.4em; padding-left: 1.5em; font-size: 1.4em; height: 18px; }
  #sortable li span { position: absolute; ; }
  </style>
  <script src="https://code.jquery.com/jquery-1.12.4.js"></script>
  <script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
  <script>
  $( function() {
    $( "#sortable" ).sortable();
    $( "#sortable" ).disableSelection();
  } );
  </script>
</head>
<body>
 
<ul id="sortable">

<?php	
	while($row = mysql_fetch_array($rs_ordenador)){
	$id = $row['id'];
	$titulo = $row['titulo']; 
	$ordem = $row['ordem'];
?>
  <li class="ui-state-default"> 
  <form>
  <input type="hidden" name="ordem[]" value="<?php echo $ordem; ?>"> 
  </form>
  <span class="ui-icon ui-icon-arrowthick-2-n-s"></span>
  <?php echo $titulo; ?>
  </li>
 
<?php
}//end while
?>  
<button type="submit">Salvar</button>
</ul>
 
 
</body>
</html>

To no caminho certo?

caso sim..agora preciso fazer o script de update... ajuda?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Uma vez eu fiz assim, mas faz tempo

Criei o atributo date-id que é id auto-increment

<tr data-id="9"></tr>

<tr data-id="10"></tr>

<tr data-id="11"></tr>

Conforme atualiza as posições pego sequencia conforme arvore DOM.

 $(this.elemento_nome)[i].getAttribute('data-id')

Depois envio as posições separado por virgula que são as IDs, já no php dou explode na virgula, criando o array, depois percorro com foreach e uso o indice "$key" para gerar as novas posições de 0 a *, na coluna order sempre vai ser default 0, fiz isso para ordenar imagem de produto.

Exemplos tem de KG na internet, o esquema ae é só o php mesmo, que é usar a ID e o indice do array que se inicia com a posição zero.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Uma vez eu fiz assim, mas faz tempo

Criei o atributo date-id que é id auto-increment

<tr data-id="9"></tr>

<tr data-id="10"></tr>

<tr data-id="11"></tr>

Conforme atualiza as posições pego sequencia conforme arvore DOM.

 $(this.elemento_nome)[i].getAttribute('data-id')

Depois envio as posições separado por virgula que são as IDs, já no php dou explode na virgula, criando o array, depois percorro com foreach e uso o indice "$key" para gerar as novas posições de 0 a *, na coluna order sempre vai ser default 0, fiz isso para ordenar imagem de produto.

Exemplos tem de KG na internet, o esquema ae é só o php mesmo, que é usar a ID e o indice do array que se inicia com a posição zero.

Gostei da ideia.. mas ainda fiquei perdido...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Imagino uma forma de fazer que seria mais simples, assim:

- Atualmente o Produto x está na posição 7, e decido q ele deve ficar na 3.

- Então o update deveria ocorrer incrementando +1 naquele que era antigamente o 3 até o 6.

vou tentar iniciar o codigo:

<?php

require "conecta.php";

$id_produto_escolhido = $_POST['id'];
$ordem_escolhida = $_POST['ordem'];//essa é a ordem q o usuario escolheu para determinado produto

$up_escolhido = "UPDATE produtos SET ordem = '$ordem_escolhida' WHERE id = '$id_escolhido'";
$rs_escolhido = mysql_query($up_escolhido);

$seleciona_ordem_igual = "SELECT * FROM tabela WHERE ordem='$ordem_escolhida'";
$rs_ordem_igual = mysql_query($seleciona_ordem_igual );

	
	while($row = mysql_fetch_array($rs_ordem_igual)){
	$ordem = $row['ordem'];
        }


###########Agora nessa parte teria que fazer um update com +1,
###########começando por aquele que tem a ordem igual a escolhida até o produto($id_produto_escolhido) 
###########que foi selecionado para mudar de posição. Imagino que seja necessário um for aqui para isso,
###########peço ajuda aí..  




?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

...Enquanto isso, olha como to tentando:

- adicionei 3 registros no banco e estou exibindo assim:

<meta charset="utf-8">
<?php  
require("oraculo/conecta/conecta.php");
//require "../oraculo/sessions/session.php";

require "oraculo/sql/sql_global.php";
?>	

<html lang="en">
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>Ordenar</title>
  <link rel="stylesheet" href="css/global.css">
 
  
</head>
<body>
 

<?php	
	while($row = mysql_fetch_array($rs_ordenador)){
	$id = $row['id'];
	$titulo = $row['titulo']; 
	$ordem = $row['ordem'];
?>
<li>
<?php echo $titulo; ?>
<form method="post" action="oraculo/form-operation/update/up-ordem.php">
<label></label>
<select name="ordem">
<option value="<?php echo $ordem; ?>" ><?php echo $ordem; ?></option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
</select>
<button>Salvar</button>
<input type="hidden" name="id" value="<?php echo $id; ?>">
</form> 
</li> 
<?php
}//end while
?>  
 
</body>
</html> 

- E o update estou fazendo assim:

<meta charset="utf-8">
<?php

require "../../conecta/conecta.php";

$id = $_POST['id'];
$ordem_escolhida = $_POST['ordem'];


$up_igual = "UPDATE ordenador SET ordem = ordem+1 WHERE id != '$id'";
$rs_igual = mysql_query($up_igual);	


$up_escolhido = "UPDATE ordenador SET ordem = '$ordem_escolhida' WHERE id = '$id'";
$rs_escolhido = mysql_query($up_escolhido);	

header("location:../../../index.php");


?> 

- Quando mudo o 3 pra 1, tudo certo, mas quando mudo de 2 pra 1, acaba ficando 1,2,4... =/

e agora...??? como resolver...

Compartilhar este post


Link para o post
Compartilhar em outros sites

- Quando mudo o 3 pra 1, tudo certo, mas quando mudo de 2 pra 1, acaba ficando 1,2,4... =/

e agora...??? como resolver...

Fazendo da forma correta e evitando Gambiarras, assista o vídeo que passei.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fazendo da forma correta e evitando Gambiarras, assista o vídeo que passei.

hshs.. sim, quero fazer da forma certa sem gambiarra... estou pensando no código pra isso..

vou assistir...

Compartilhar este post


Link para o post
Compartilhar em outros sites

assisti o video, mas ainda não me resolveu...

com esse codigo tá quase.. se alguem conseguir complementar me avisa aí:

<meta charset="utf-8">
<?php

require "../../conecta/conecta.php";

$id = $_POST['id'];
$ordem_escolhida = $_POST['ordem'];


$up_igual = "UPDATE ordenador SET ordem = ordem+1 WHERE id != '$id'";
$rs_igual = mysql_query($up_igual);	


$up_escolhido = "UPDATE ordenador SET ordem = '$ordem_escolhida' WHERE id = '$id'";
$rs_escolhido = mysql_query($up_escolhido);	

header("location:../../../index.php");


?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por ILR master
      Fala galera, tudo bem?
       
      Tenho o seguinte codigo:
       
       class Data {
      public static function ExibirTempoDecorrido($date)
      {
          if(empty($date))
          {
              return "Informe a data";
          }
          $periodos = array("segundo", "minuto", "hora", "dia", "semana", "mês", "ano", "década");
          $duracao = array("60","60","24","7","4.35","12","10");
          $agora = time();
          $unix_data = strtotime($date);
          // check validity of date
          if(empty($unix_data))
          {  
              return "Bad date";
          }
          // is it future date or past date
          if($agora > $unix_data) 
          {  
              $diferenca     = $agora - $unix_data;
              $tempo         = "atrás";
          } 
          else 
          {
              $diferenca     = $unix_data - $agora;
              $tempo         = "agora";
          }
          for($j = 0; $diferenca >= $duracao[$j] && $j < count($duracao)-1; $j++) 
          {
              $diferenca /= $duracao[$j];
          }
          $diferenca = round($diferenca);
          if($diferenca != 1) 
          {
              $periodos[$j].= "s";
          }
          return "$diferenca $periodos[$j] {$tempo}";
      }
      }
       
      Funciona redondinho se o valor retornado for de algumas horas, mas...
      Quando passa de dois meses, ele retorna a palavra mess. Deve ser por conta dessa linha
      if($diferenca != 1) 
          {
              $periodos[$j].= "s";
          }
       
      Quero que modre:
       
      2 meses atrás
      e não
      2 mess atrás.
       
      Espero que tenham entendido.
       
      Valeu
    • Por Carlos Web Soluções Web
      Olá...
      Estou tentando fazer o seguinte !!
      Listando dados em tabela !!
      Gostaria que....se na listagem houver 4 linhas...indepedente de seu número de ID, faça a listagem em ID ser em ordem 1 2 3 4 !!
      Exemplo...se tiver uma listagem de dados que está em ID 1 3 3...faça ficar 1 2 3 !!

       
      echo "<table class='tabela_dados' border='1'> <tr> <td>ID</td> <td>Nome Empresa</td> <td>Responsável</td> <td>Telefone 1</td> <td>Telefone 2</td> <td>E-mail 1</td> <td>E-mail 2</td> <td>Endereço</td> <td>CEP</td> <td>Bairro</td> <td>AÇÃO 1</td> <td>AÇÃO 2</td> </tr> "; $sql = "SELECT ID FROM usuarios_dados WHERE Usuario='$usuario'"; $result = $conn->query($sql); $num_rows = $result->num_rows; $Novo_ID = 1; for ($i = 0; $i < $num_rows; $i++) { $registro = $result -> fetch_row(); $sql2 = "UPDATE usuarios_dados SET ID='$Novo_ID' WHERE ID='$Novo_ID'"; $result2 = $conn->query($sql2); $Novo_ID++; } $sql = "SELECT * FROM usuarios_dados"; $result = $conn->query($sql); if ($result->num_rows > 0) { // output data of each row while($row = $result->fetch_assoc()) { echo "<tr> <td>$row[ID]</td> <td>$row[Nome_Empresa]</td> <td>$row[Responsavel]</td> <td>$row[Telefone_1]</td> <td>$row[Telefone_2]</td> <td>$row[Email_1]</td> <td>$row[Email_2]</td> <td>$row[Endereço]</td> <td>$row[CEP]</td> <td>$row[Bairro]</td> <td> <form method='post' action='Editar_Dados.php'> <input type='hidden' name='usuario' value='$usuario'> <input type='hidden' name='senha' value='$senha'> <input type='hidden' name='ID' value='$row[ID]'> <input type='submit' style='padding: 10px;' value='EDITAR'> </form> </td> <td> <form method='post' action='Deletar_Dados.php'> <input type='hidden' name='usuario' value='$usuario'> <input type='hidden' name='senha' value='$senha'> <input type='hidden' name='ID' value='$row[ID]'> <input type='submit' style='padding: 10px;' value='DELETAR'> </form> </td> </tr> "; } } else { echo "0 results"; } $conn->close();  
    • Por ILR master
      Boa tarde pessoal, tudo bem ?
       
      Eu uso o tinymce para cadastro de textos no meu siite, porém, quero fazer um sistema para que os colunistas possam fazer o próprio post.
      O problema do tinymce, é que ele mantém a formatação do texto copiado, como tamanho de fonts, negritos, etc... Quero que o usuário cole o texto e a própria textarea limpe a formatação para que ele formate como quiser.
       
      A pergunta é:
       
      O tinymce tem uma opção para desabilitar a formatação quando um texto é colocado?
      Tem alguma função via java ou php para retirar a formatação assim que o texto é colado?
      Ou é melhor usar um outro editor?
       
      Agradeço deste já.
    • Por Giovanird
      Olá a todos!
      Tenho uma pagina que possui uma DIV onde coloquei uma pagina PHP.
      Uso a função setInterval para atualizar a pagina inclusa dentro da DIV.
      O problema é que ao acessar o site , a DIV só me mostra a pagina inclusa somente quando completo o primeiro minuto.
      Preciso que a pagina inclusa já inicie carregada
       
      Meu código JavaScript e a DIV com a pagina PHP
       
      <script> function atualiza(){ var url = 'direita.php'; $.get(url, function(dataReturn) { $('#direita').html(dataReturn); }); } setInterval("atualiza()",60000); </script> <div> <span id="direita"></span> </div>  
    • Por ILR master
      Fala pessoal.
       
      Seguinte:
       
      Quero selecionar duas tabelas e mostrar com resultados intercalados. Abaixo segue um código explicando para vcs terem uma ideia.
       
      $consulta = "SELECT A.*, B.* FROM tabela1 A, tabela2 B'";
      $resultado = mysqli_query($conexao, $consulta) or die ("erro");
      while($busca = mysqli_fetch_array($resultado)){
       
      print $busca['cod_evento']; --> traz o código da tabela1 
      print $busca['titulo_evento']; -->  traz o titulo da tabela1
      print $busca['cod_noticia']; --> traz o código da tabela2
      print $busca['titulo_noticia']; --> traz o tituloda tabela2
       
      }
       
      Espero que entendam. Grato
       
×

Informação importante

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