Ver Mensaje Individual
  #6 (permalink)  
Antiguo 30/11/2008, 23:11
diazhh
 
Fecha de Ingreso: septiembre-2007
Mensajes: 139
Antigüedad: 16 años, 8 meses
Puntos: 1
Respuesta: ordenar por pesos en registros.

Hola estimados Foreros, preferi dedicarle un poco mas de tiempo para lograr hacer mi propio script y ya lo tengo funcionando.
asi que lo muestro con una explicacion para que ais puedan entenderlo, si es de mejorarlo que lo mejoren y como por lo visto nohay ningun script que haga lo mismo entonces seria bueno colocarlo en la seccion de contribuciones en las faq.

bien aca le explico paso a paso.

primero la base de datos donde van los datos.
en este caso mi aplicacion sera una en la que muestres soluciones y como explique en el mensaje anterior el administrador puede escojer el peso de las soluciones, asi que mi tabla se llama 'soluciones'.
Código PHP:
CREATE TABLE IF NOT EXISTS `soluciones` (
  `
idint(100NOT NULL auto_increment,
  `
id_problemaint(10NOT NULL,
  `
soluciontext NOT NULL,
  `
nivelint(3NOT NULL default '0',
  
PRIMARY KEY  (`id`),
  
UNIQUE KEY `id` (`id`)
ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=
luego hago mi formulario para agregar registros en la base de datos pero primero averiguo cual es el peso del proximo registro a insertar.
para esto averiguo primero cuantos registros hay en mi base de datos.
dado que en esta oportunidad uso dreamweaver coloco el codigo tal cual como lo coloca dreamweaver

Código PHP:
$maxRows_soluciones 100;
$pageNum_soluciones 0;
if (isset(
$_GET['pageNum_soluciones'])) {
  
$pageNum_soluciones $_GET['pageNum_soluciones'];
}
$startRow_soluciones $pageNum_soluciones $maxRows_soluciones;

$colname_soluciones "-1";
if (isset(
$_GET['problema'])) {
  
$colname_soluciones $_GET['problema'];
}
mysql_select_db($database_conexion$conexion);
$query_soluciones sprintf("SELECT * FROM soluciones WHERE id_problema = %s ORDER BY nivel ASC"GetSQLValueString($colname_soluciones"int"));
$query_limit_soluciones sprintf("%s LIMIT %d, %d"$query_soluciones$startRow_soluciones$maxRows_soluciones);
$soluciones mysql_query($query_limit_soluciones$conexion) or die(mysql_error());
$row_soluciones mysql_fetch_assoc($soluciones);

if (isset(
$_GET['totalRows_soluciones'])) {
  
$totalRows_soluciones $_GET['totalRows_soluciones'];
} else {
  
$all_soluciones mysql_query($query_soluciones);
  
$totalRows_soluciones mysql_num_rows($all_soluciones);
}
$totalPages_soluciones ceil($totalRows_soluciones/$maxRows_soluciones)-1
de todo el codigo por los moemntos lo que me interesa es
Código PHP:
$totalPages_soluciones ceil($totalRows_soluciones/$maxRows_soluciones)-1
ya que es el que me dira cuantos registros hay en la db.
luego hago lo sguiente:
Código PHP:
    if ($totalRows_soluciones == 0){
    
$prox 1;
    }else{
    
$prox $totalRows_soluciones 1;
    } 
si en la base de datos no hay registros entonces inicializo una variable que se llama $prox con el dato '1', en caso que exista la inicializo con el numero de registros mas uno.
esto lo hago con la finalidade de:
si no existe registros en esa tabla entonces el primer registro tendra como peso '1', pero en tal caso que ya existan registros, imaginemos que halla un registros entonces la proxima entrada sera 1 + 1, osea que el peso sera '2' y asi en cada registro nuevo.

luego hagomi formulario:
Código HTML:
<h4 align="center">Administrador de soluciones</h4>
      <p align="left">Parte: <?php echo $_GET['partes']; ?></p>
      <p align="left">Problema: <?php echo $row_problema['problema']; ?></p>
      <p align="center">Soluciones:</p>
      <form action="<?php echo $editFormAction; ?>" method="post" name="form1" id="form1">
        <table align="center">
          <tr valign="baseline">
            <td nowrap="nowrap" align="right" valign="top">Solucion:</td>
            <td><textarea name="solucion" cols="50" rows="5"></textarea>
            </td>
          </tr>
          <tr valign="baseline">
            <td nowrap="nowrap" align="right">&nbsp;</td>
            <td><input type="submit" value="Agregar" /></td>
          </tr>
        </table>
        <input type="hidden" name="id_problema" value="<?php echo $row_problema['id']; ?>" />
        <input type="hidden" name="nivel" value="<?php echo $prox; ?>" />
        <input type="hidden" name="MM_insert" value="form1" />
      </form> 
noten que uno de los campos ocultos con el nombre 'nivel' esta cargado con la variable $prox
Código HTML:
<input type="hidden" name="nivel" value="<?php echo $prox; ?>" /> 
luego ese formulario se envia a ese mismo archivo y lo agrega a la db mediante el siguiente script:
Código PHP:
if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "form1")) {
  
$insertSQL sprintf("INSERT INTO soluciones (id_problema, solucion, nivel) VALUES (%s, %s, %s)",
                       
GetSQLValueString($_POST['id_problema'], "int"),
                       
GetSQLValueString($_POST['solucion'], "text"),
                       
GetSQLValueString($_POST['nivel'], "text"));

  
mysql_select_db($database_conexion$conexion);
  
$Result1 mysql_query($insertSQL$conexion) or die(mysql_error());

  
$insertGoTo "modulos.php?nombre=soluciones&partes=$_GET[partes]&problema=$_GET[problema]";
  
header(sprintf("Location: %s"$insertGoTo));

de esta forma esta agregando las posibles soluciones con pesos en orden.


luego voy a hacer la tabla que va a mostrar mis datos con el menu para administrar los pesos:
Código PHP:
      <table width="80%" border="0" align="center">
        <tr>
          <td>solucion</td>
          <td>nivel</td>
          <td><div align="center">Peso</div></td>
          <td><div align="center">Editar</div></td>
          <td><div align="center">Borrar</div></td>
        </tr>
        <?php 
        
do { 
        if (
$row_soluciones['nivel'] == 1){
        
$p 1;
        }elseif (
$totalRows_soluciones == $row_soluciones['nivel']){
        
$p 2;
        }else{
        
$p 3;
        }
        
$b_bajar $row_soluciones['nivel'] + 1;
        
$s_bajar $row_soluciones['nivel'] - 1;
        
$s_id_a $row_soluciones['id'];
        
?>
          <tr>
            <td><?php echo $row_soluciones['solucion']; ?></td>
            <td><?php echo $row_soluciones['nivel']; ?></td>
            <td><div align="center"><?php 
            
if ($p == 1){
            
?>
            <a href="modulos.php?nombre=soluciones&partes=<?php echo $_GET['partes']; ?>&problema=<?php echo $_GET['problema']; ?>&b_bajar=<?php echo $b_bajar?>&b_subir=<?php echo $row_soluciones['nivel']; ?>&id2=<?php echo $row_soluciones['id']; ?>"><img border="0" src="img/down.gif" /></a>
            <?php 
            
}
            if (
$p == 2){
            
?>
            <a href="modulos.php?nombre=soluciones&partes=<?php echo $_GET['partes']; ?>&problema=<?php echo $_GET['problema']; ?>&s_bajar=<?php echo $s_bajar?>&s_subir=<?php echo $row_soluciones['nivel']; ?>&id2=<?php echo $row_soluciones['id']; ?>"><img border="0" src="img/up.gif" /></a>
            <?php 
            
}
            if (
$p == 3){
            
?>
            <a href="modulos.php?nombre=soluciones&partes=<?php echo $_GET['partes']; ?>&problema=<?php echo $_GET['problema']; ?>&s_bajar=<?php echo $s_bajar?>&s_subir=<?php echo $row_soluciones['nivel']; ?>&id2=<?php echo $row_soluciones['id']; ?>"><img border="0" src="img/up.gif" /></a>
            <?php
            ?>
            <a href="modulos.php?nombre=soluciones&partes=<?php echo $_GET['partes']; ?>&problema=<?php echo $_GET['problema']; ?>&b_bajar=<?php echo $b_bajar?>&b_subir=<?php echo $row_soluciones['nivel']; ?>&id2=<?php echo $row_soluciones['id']; ?>"><img border="0" src="img/down.gif" /></a>
            <?php 
            
}
            
?></div></td>
            <td><div align="center"><a href="modulos.php?nombre=editar_soluciones&amp;id=<?php echo $row_soluciones['id']; ?>&amp;partes=<?php echo $_GET[partes]; ?>&amp;problema=<?php echo $_GET[problema]; ?>"><img src="img/b_edit.png" alt="" width="16" height="16" border="0" /></a></div></td>
            <td><div align="center"><img src="img/b_drop.png" width="16" height="16" border="0" /></div></td>
          </tr>
          <?php 

          
          
} while ($row_soluciones mysql_fetch_assoc($soluciones)); ?>
      </table>