Ordenar productos que tienen dos precios

3 views
Skip to first unread message

"Nacho F. Carreño"

unread,
Dec 10, 2010, 6:12:29 AM12/10/10
to php-o...@googlegroups.com
Hola a tod@s,

Tengo una tabla de productos que para gestionar los precios tiene 3
campos: precio (decimal), esoferta(0 � 1), preciooferta(decimal). Cuando
un usuario quiere poner el precio en oferta pulsa un check que pone
esoferta con valor 1 y preciooferta donde mete el precio de oferta. El
problema que me encuentro es como ordenar los art�culos por precio
cuando en unos el precio vendr� dado por el campo precio y en otros el
campo preciooferta �se puede hacer?

Un saludo,

Nacho

Victoria Gracia

unread,
Dec 10, 2010, 6:15:51 AM12/10/10
to php-o...@googlegroups.com
Se me ocurre que se puede hacer creando una comprobación en el bucle de ordenación que primero compruebe si esoferta == 1

2010/12/10 "Nacho F. Carreño" <na...@stvisual.com>
Hola a tod@s,

Tengo una tabla de productos que para gestionar los precios tiene 3 campos: precio (decimal), esoferta(0 ó 1), preciooferta(decimal). Cuando un usuario quiere poner el precio en oferta pulsa un check que pone esoferta con valor 1 y preciooferta donde mete el precio de oferta. El problema que me encuentro es como ordenar los artículos por precio cuando en unos el precio vendrá dado por el campo precio y en otros el campo preciooferta ¿se puede hacer?

Un saludo,

Nacho

--
Has recibido este mensaje porque estás suscrito al grupo "PHP-Ovillo" de Grupos de Google.
Para publicar una entrada en este grupo, envía un correo electrónico a php-o...@googlegroups.com.
Para anular tu suscripción a este grupo, envía un correo electrónico a php-ovillo+...@googlegroups.com
Para tener acceso a más opciones, visita el grupo en http://groups.google.com/group/php-ovillo?hl=es.


"Nacho F. Carreño"

unread,
Dec 10, 2010, 6:20:27 AM12/10/10
to php-o...@googlegroups.com
Hola Victoria,

Entiendo que lo que me dices es que haga un bucle para mostrar primera los productos en oferta y después los que no están en oferta? Es una buena opción pero el problema con el que me puedo encontrar es que a lo mejor un producto tiene un precio de 300€ y otro de 350€ en oferta, entonces saldría primero el de 350€.

Saludos y gracias!

Nacho Fdez. Carreño

Victoria Gracia

unread,
Dec 10, 2010, 6:23:21 AM12/10/10
to php-o...@googlegroups.com
Más bien estaba pensando en construir un array producto-precio donde el precio se toma según si tiene oferta o no, y a partir de ahí los ordenas.

Rodrigo Álvarez Virgós

unread,
Dec 10, 2010, 6:23:23 AM12/10/10
to php-o...@googlegroups.com
¿No puedes sacarlos de la base haciendo "order by precio, preciooferta"?


El vie, 10-12-2010 a las 12:12 +0100, "Nacho F. Carreño" escribió:
Hola a tod@s,

Tengo una tabla de productos que para gestionar los precios tiene 3 
campos: precio (decimal), esoferta(0 ó 1), preciooferta(decimal). Cuando 
un usuario quiere poner el precio en oferta pulsa un check que pone 
esoferta con valor 1 y preciooferta donde mete el precio de oferta. El 
problema que me encuentro es como ordenar los artículos por precio 
cuando en unos el precio vendrá dado por el campo precio y en otros el 
campo preciooferta ¿se puede hacer?

Un saludo,

Nacho


carlos campderrós

unread,
Dec 10, 2010, 6:35:39 AM12/10/10
to php-o...@googlegroups.com
Hola,

puedes mirar de hacer ordenación en la base de datos con un case en medio del select. En mysql algo similar a esto:

SELECT 
  CASE esoferta
    WHEN 1 THEN preciooferta
    WHEN 0 THEN precio
  END AS precio_mostrar
FROM productos
ORDER BY precio_mostrar

Hace mucho tiempo que no hago estas cosas en la base de datos, así que no estoy muy seguro que puedas indicar en el ORDER BY el campo del CASE, pero todo es probar.

Y si no, usando la función usort de php:

function compara_precios($uno, $otro)
{
  $precio_uno = $uno['esoferta'] ? $uno['preciooferta'] : $uno['precio'];
  $precio_otro = $otro['esoferta'] ? $otro['preciooferta'] : $otro['precio'];

  return $precio_uno - $precio_otro;
}

$sql = 'SELECT precio, esoferta, preciooferta FROM productos';
$stmt = $pdo->query($sql);
$productos = $stmt->fetch_all(PDO::FETCH_ASSOC);

usort($productos, "compara_precios");

// el array ya está ordenado ascendentemente por precios, según si es oferta o no

saludos,
carlos.

2010/12/10 "Nacho F. Carreño" <na...@stvisual.com>
Hola a tod@s,

Tengo una tabla de productos que para gestionar los precios tiene 3 campos: precio (decimal), esoferta(0 ó 1), preciooferta(decimal). Cuando un usuario quiere poner el precio en oferta pulsa un check que pone esoferta con valor 1 y preciooferta donde mete el precio de oferta. El problema que me encuentro es como ordenar los artículos por precio cuando en unos el precio vendrá dado por el campo precio y en otros el campo preciooferta ¿se puede hacer?

Un saludo,

Nacho

--
Has recibido este mensaje porque estás suscrito al grupo "PHP-Ovillo" de Grupos de Google.
Para publicar una entrada en este grupo, envía un correo electrónico a php-o...@googlegroups.com.
Para anular tu suscripción a este grupo, envía un correo electrónico a php-ovillo+...@googlegroups.com
Para tener acceso a más opciones, visita el grupo en http://groups.google.com/group/php-ovillo?hl=es.




--
Si no puedes deslumbrar con tu sabiduría,
desconcierta con tus gilipolleces

"Nacho F. Carreño"

unread,
Dec 10, 2010, 7:00:27 AM12/10/10
to php-o...@googlegroups.com
Hola,

Gracias a tod@s por vuestras respuestas. Con las pistas que me habéis aportado ya voy a estar entretenido un buen rato en busca de la solución. Probaré todo lo que me habéis aconsejado.

Muchas gracias de nuevo.

Saludos,

Nacho
Reply all
Reply to author
Forward
0 new messages