Gracias amigo
zerpico_01 por los comentarios, lo tomare en cuenta, también tienes razón debo aclarar eso
Cita: Pero solo sirve para aprender como base ...
pero igual te comento que esta no es la forma en la que acostumbro a programar de hecho no programo así la razón es porque no quiero confundir al amigo
elsaylala lo único que trato es de intentar hacer el código similar a como lo tiene solo darle el primer paso a que se adentre a las
Clases por completo a la
MVC que eso sería la forma más correcta de programar según mi punto de vista, igual las Consultas a la
BD y así como las ruta a las imágenes no son correctas lo sé pero todo es con el fin de No confundirlo, pero para los demás lo que dice
zerpico_01 es muy cierto y hay que considerarlo.
Ahora a lo consiguiente:
Vamos solucionando la Primera “
si le vuelvo a dar clic no me lo ordena en DESC” vamos con esta primero ya que es más fácil de explicar.
Lo único que voy a hacer es un SWITCH (1,0) como si de apagar la luz se tratara lo que tengo que enviar por URL es un valor más por parámetro por ejemplo tipo=1 y así condiciono cuando sea 1 ordeno de una forma y cuando sea diferente de 1 ósea 2 ordeno de otra forma y así defino una variable para irle pasando el valor según corresponda mírate aquí:
el siguiente codigo ira en el
acciones.php Código PHP:
if(isset($_REQUEST['tipo']))
{
if($_REQUEST['tipo']==1)
{
$tipo_orden = 'ASC';
$orden = 2;
}
else
{
$tipo_orden = 'DESC';
$orden = 1;
}
}
else
{
$orden = 1;
}
Ahora hay que modificar la consulta quedando de esta forma:
tambien tiene que ir en el
acciones.php
Código PHP:
if(isset($_REQUEST['ordena_por']))
{
$sql = "SELECT * FROM ava_games order by ".$_REQUEST['ordena_por']." ".$tipo_orden;
}
else{
$sql = "SELECT * FROM ava_games";
}
Eso quedaria en el
acciones.php así:
Código PHP:
<?
$baseDatos = 'pruebas';
$servidor = 'localhost';
$usuario = 'root';
$contrasena = '1475369';
require_once('BD_SQL.php');
$conn = new BD_SQL;
$conn->conectar($baseDatos,$servidor,$usuario,$contrasena);
$conn->execute("SET NAMES 'latin1'");
if(isset($_REQUEST['tipo'])){
if($_REQUEST['tipo']==1){
$tipo_orden = 'ASC';
$orden = 2;
}else{
$tipo_orden = 'DESC';
$orden = 1;}
}
else{
$orden = 1;
}
if(isset($_REQUEST['ordena_por'])){
$sql = "SELECT * FROM ava_games order by ".$_REQUEST['ordena_por']." ".$tipo_orden;
}else{
$sql = "SELECT * FROM ava_games";
}
$conn->execute($sql);
$row = $conn->getRows();
?>
Ahora hay que hacer una ligera modificación al index.php en los link enviarlos con 2 parámetros así:
Código PHP:
<a href="index.php?ordena_por=name&tipo=<?=$orden?>">Nombre</a>
el archivo index.php quedaria asi:
Código PHP:
<? require_once("acciones.php"); ?>
<? require_once("function.php"); ?>
<!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>Ordenar por Columnas</title>
<link rel="stylesheet" type="text/css" href="estilos.css" />
</head>
<body>
<h1 align="center">Ordenar registros de una tabla con Ajax y PHP </h1>
<div id="listado">
<table>
<tr class='encabezado'><td><a href="index.php?ordena_por=name&tipo=<?=$orden?>">Nombre</a></td><td><a href="index.php?ordena_por=hits&tipo=<?=$orden?>">Jugadas</a></td><td><a href="index.php?ordena_por=rating&tipo=<?=$orden?>">Puntuacion</a></td><td><a href="index.php?ordena_por=highscores&tipo=<?=$orden?>">Ranking</a></td><td><a href="index.php?ordena_por=advert_id&tipo=<?=$orden?>">Guia</a></td><td><a href="index.php?ordena_por=category_id&tipo=<?=$orden?>">Categoria</a></td></tr>
<?
for($i=0;$i<count($row);$i++)
{
echo "<tr><td>".$row[$i]['name']."</td><td>".$row[$i]['hits']."</td><td>".numEstrellas($row[$i]['rating'])."</td><td>".ranking($row[$i]['highscores'])."</td><td>".guia($row[$i]['advert_id'])."</td><td>".categoria($row[$i]['category_id'])."</td></tr>";
}
?>
</table>
</div>
</body>
</html>
SOLUCIONADA LA OPCION UNO
Ahora bien vamos con la
Solución 2 “
cuando ordeno por la categoría, la de Habilidad y De mesa aparecen antes que Acción” ¿porque?:
Es que hay veo algunas cuestiones más lo que según veía en tu código lo que estabas asiendo para el campo de categoría es esto:
Código PHP:
if ($row['category_id'] == 103) {
$game['categoria'] = "<center><a style='text-decoration:none; color:grey' href='http://www.mjuegos.net/index.php?task=category&id=103&sortby=newest&page=1'>Acción</a></center>";
}..........
Donde Yo lo reduje a llamarlo mediante una función creada en el
function.php “categoría($num)”, ahora que pasa aquí, pues que lo estas manejando como un campo numérico ósea al momento de ordenarlo lo que se está ordenando es el valor “category_id” que es un Numero mas no un Texto:
Por ejemplo ahí defines que el valor de Acción es 103 , el valor de Aventuras es 2 y así sucesivamente, pues eso realmente no podría ordenarse por Texto ya que no toma el valor del texto si no el valor del campo: “
SELECT * FROM ava_games order by NOMBRE_CAMPO desc”;
Bien hay soluciones a esto varias,

La más optima y recomendable seria que Exista la tabla Categorías como esta podría ser:
Ya mediante esta tabla se genera un JOIN con la tabla
Hacer una consulta entre las dos como esto:
Código HTML:
SELECT ag.id, ag.name, ag.hits, ag.rating, ag.highscores, ag.advert_id, c.nombre category_id FROM ava_games ag, categorias c WHERE ag.category_id = c.category_id
daria esto:
Ahora bien si se hace lo Anterior estaría solucionado el problema de ordenar por Categoría, ahora voy a darte esta solución sin modificar nada de lo anterior en el código y solo generando esta nueva Tabla para que funcione correctamente Solo ten en cuenta que una vez lo entiendas no es necesario obtener un campo de mas en la consulta que voy a realizar es solo para que Funcione y sin afectar mucho el código ya Actualizado:
Bien lo primero es el
acciones.php quedaría así:
Una vez teniendo la tabla categorias modifico la consulta y creo el JOIN entre ellas.
Código PHP:
<?
$baseDatos = 'pruebas';
$servidor = 'localhost';
$usuario = 'root';
$contrasena = '1475369';
require_once('BD_SQL.php');
$conn = new BD_SQL;
$conn->conectar($baseDatos,$servidor,$usuario,$contrasena);
$conn->execute("SET NAMES 'latin1'");
if(isset($_REQUEST['tipo'])) {
if($_REQUEST['tipo']==1) {
$tipo_orden = 'ASC';
$orden = 2;
}else{
$tipo_orden = 'DESC';
$orden = 1;
}
}
else{
$orden = 1;
}
if(isset($_REQUEST['ordena_por'])){
//$sql = "SELECT * FROM ava_games order by ".$_REQUEST['ordena_por']." ".$tipo_orden;
$sql = "select ag.id, ag.name, ag.hits, ag.rating, ag.highscores, c.nombre category_id , c.category_id category_id_id, ag.advert_id from ava_games ag, categorias c where ag.category_id = c.category_id order by ".$_REQUEST['ordena_por']." ".$tipo_orden;
}else{
$sql = "SELECT * FROM ava_games";
}
$conn->execute($sql);
$row = $conn->getRows();
?>
ahora un ligero cambio al
index.php en ya que ahora tenemos un campo nombre obtenido de la tabla categorias:
Código PHP:
categoria($row[$i]['category_id_id'])
quedando de esta forma el index.php
Código PHP:
<? require_once("acciones.php"); ?>
<? require_once("function.php"); ?>
<!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>Ordenar por Columnas</title>
<link rel="stylesheet" type="text/css" href="estilos.css" />
</head>
<body>
<h1 align="center">Ordenar registros de una tabla con Ajax y PHP </h1>
<div id="listado">
<table>
<tr class='encabezado'><td><a href="index.php?ordena_por=name&tipo=<?=$orden?>">Nombre</a></td><td><a href="index.php?ordena_por=hits&tipo=<?=$orden?>">Jugadas</a></td><td><a href="index.php?ordena_por=rating&tipo=<?=$orden?>">Puntuacion</a></td><td><a href="index.php?ordena_por=highscores&tipo=<?=$orden?>">Ranking</a></td><td><a href="index.php?ordena_por=advert_id&tipo=<?=$orden?>">Guia</a></td><td><a href="index.php?ordena_por=category_id&tipo=<?=$orden?>">Categoria</a></td></tr>
<?
for($i=0;$i<count($row);$i++)
{
echo "<tr><td>".$row[$i]['name']."</td><td>".$row[$i]['hits']."</td><td>".numEstrellas($row[$i]['rating'])."</td><td>".ranking($row[$i]['highscores'])."</td><td>".guia($row[$i]['advert_id'])."</td><td>".categoria($row[$i]['category_id_id'])."</td></tr>";
}
?>
</table>
</div>
</body>
</html>
FIN ahora ya funciona tot el codigo lo he metido ahi ya que no me da oportunidad este foro de colocar una liga a los archivos a descargar pero garantizo que todo funciona correctamente ya que primero lo hago local y si valido que funcione y lo coloco ahi.......
Espero esto te ayude un poco amigo
elsaylala