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 landerbadi
      Boa tarde pessoal. Estou tentado fazer uma consulta no banco de dados porém estou tendo dificuldades. Tenho uma tabela chamada "itens" com os seguintes campos: id, item, ativo. Nela tem cadastrado vários itens. No campo ativo eu coloco a letra "S" para informar que este item está ativo no sistema. Por exemplo: 1, casa, S 2, mesa, S 3, cama, S 4, moto S 5, rádio O quinto registro "radio" não está ativo no sistema pois não tem um "S" no campo ativo. E outra tabela chamada "produtos" com os seguintes campos (id, item1, item2, item3) com os seguintes registros: 1, casa, mesa, moto 2, mesa, casa, cama 3, rádio, cama, mesa Eu preciso fazer uma busca na tabela produtos da seguinte maneira: Eu escolho um registro na tabela "itens", por exemplo "mesa". Preciso fazer com que o php me liste todos os registros da tabela "produtos" que contenham a palavra "mesa". Até aqui tudo bem eu consigo listar. Estou fazendo assim: <?php $item = "mesa" $sql = mysqli_query($conn, "SELECT * FROM produtos WHERE item1 LIKE '$item' OR item2 LIKE '$item' OR item3 LIKE '$item' LIMIT 10"); while($aux = mysqli_fetch_assoc($sql)) { $id = $aux["id"]; $item1 = $aux["item1"]; $item2 = $aux["item2"]; $item3 = $aux["item3"]; echo $id . " - " . $item1 . ", " . $item2 . ", " $item3 . "<br>"; } ?> O problema é que está listando todos os registros que contém o item mesa. Eu preciso que o php verifique os demais item e me liste somente os registro em que todos os registros estejam ativos no sistema. No exemplo acima ele não deveria listar o registro 3. pois nesse registro contém o item "radio" e este item não está ativo no sistema. Ou seja, o registro "radio" na tabela itens não possui um "S" na coluna "ativo". Alguém sabe como resolver isso?
    • 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.
×

Informação importante

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