Nueva pregunta

Pregunta:

Fecha: 25-07-2019 13:45:45 (En Español)

como mostrar campos de un SELECT que muestre tanto los campos normales y los agrupados por un WHERE[Resuelta]

Hola,

Tengo una duda en cómo mostrar unos campos en una tabla.
A ver, se los explico.

Tengo dentro de una tabla llámese COMPRA varios items, pero dentro de una lista deseo mostrar todos según id y fecha(hasta ahí todo bien).
La duda salta cuando dentro de esos items hay unos que no deseo se vean para el usuario final en forma desglosada, sino más bien como un sólo servicio.

Así por ejemplo, por un servicio X en un auto, en el taller terminan con un "mantenimiento preventivo" en el cual se enumeran muchos trabajos y gastan muchos items, pero en la factura del cliente sólo se debe de mostrar entre otros trabajos "mantenimiento preventivo", además de sumar los costos de cada item con esa marca, que en mi tabla esta con el nombre de "mantenimiento" donde si el item es parte de eso está con un 1, de lo contrario está con un 0.

Así la factura quedaría:

silvin x ------- 100
rectificado de discos de freno ------ 250
mantenimiento preventivo --- 65  <--- aquí se engloban por ejemplo(engrase, limpieza, lavado, aspirado,silicon,aceite,etc"


Ya que para control interno se debe de llevar un control de gasto de aceite y engrase...
Así que no sé como hacerlo dentro de un while. aquí mi código:


$sql = $conn->prepare("SELECT nombre, vendido, ventaUnitaria, descuento, referenciaVenta, mantenimiento
FROM COMPRA WHERE id = :id");
$id = filter_input(INPUT_GET, 'id', FILTER_SANITIZE_STRING);
$sql->bindParam(':id', $id, PDO::PARAM_STR);
$sql->execute();
while($row = $sql->fetch(PDO::FETCH_ASSOC)) {


Espero me puedan ayudar
Etiquetas: MySQL - PHP - PHP PDO Votos: 0 - Respuestas: 6 - Vistas: 14 Compartir en: Google Facebook Twitter LinkedIn Link
 

Respuestas:

  • Fecha: 27-07-2019 07:53:34 Hola...
    En tu caso "Divide y vencerás"

    Has dos selects para presentar, el primero sera con los servicios que no quieres englobar.
    y en el segundo con group by, o un select y los guardas en una variable.

    Podrían quedar asi:

    1er select:
    SELECT nombre, vendido, ventaUnitaria, descuento, referenciaVenta, mantenimiento
    FROM COMPRA WHERE identificador_venta_o_cliente = 'referencia' and mantenimiento = 0
    Presentas

    2do select:
    SELECT nombre, vendido, ventaUnitaria, descuento, referenciaVenta, mantenimiento
    FROM COMPRA WHERE identificador_venta_o_cliente = 'referencia' and mantenimiento = 1
    Recorres y agrupas
    Presentas como uno solo

    o en vez del 2do:
    SELECT nombre, vendido, ventaUnitaria, descuento, referenciaVenta, mantenimiento, sum(preciototal) as totalsumado FROM COMPRA WHERE identificador_venta_o_cliente = 'referencia' and mantenimiento = 0 GROUP BY algoquepuedasagrupar
    Presentas


    Saludos Terricola

    Stryfe™
      Votos: 1 - Link respuesta
     
  • Fecha: 27-07-2019 12:07:54 Gracias!, Eso tendré que hacer... pero pensé que podría haber una forma de sólo hacer una llamada al servidor y no dos...   Votos: 0 - Link respuesta
     
  • Fecha: 29-07-2019 09:48:42 Buscas algo como un SubQuery? también podrías hacer uso de LEFT JOIN, estás utilizando MYSQL?   Votos: 1 - Link respuesta
     
  • Fecha: 29-07-2019 11:20:03 Gracias, al final utilice UNION y con WHERE en cada SELECT controlé lo que deseaba mostrar.   Votos: 0 - Link respuesta
     
  • Fecha: 29-07-2019 11:55:04 @Joaquín Vides

    Me alegro, saludos! sería bueno qué compartieras la solución a la comunidad!
      Votos: 0 - Link respuesta
     
  • Fecha: 29-07-2019 16:21:50 Claro, aquí dejo para futuro:
    
    $noAgrupar = '0';
    $siAgrupar = '1';
    $sql = $conn->prepare("SELECT nombre, vendido, ventaUnitaria, descuento, referenciaVenta
    FROM COMPRA WHERE id = :id AND mantenimiento = :noAgrupar
    UNION
    SELECT 'Mantenimiento de rutina' AS nombre, '1' AS vendido, SUM(ventaUnitaria) AS ventaUnitaria, descuento, referenciaVenta
    FROM COMPRA WHERE id = :id AND mantenimiento = :siAgrupar");
    $id = filter_input(INPUT_GET, 'id', FILTER_SANITIZE_STRING);
    $sql->bindParam(':id', $id, PDO::PARAM_STR);
    $sql->bindParam(':noAgrupar', $noAgrupar, PDO::PARAM_INT);
    $sql->bindParam(':siAgrupar', $siAgrupar, PDO::PARAM_INT);
    $sql->execute();
    while($row = $sql->fetch(PDO::FETCH_ASSOC)) {
    
      Votos: 1 - Link respuesta
     
Para participar activamente de la comunidad primero debes autenticarte, ingresa al sistema.Iniciar Sesión
 
frjcbbae garagebible.com