php - sumar - lista con valores unicos excel
seleccionando valores Ășnicos de una columna (9)
Tengo una tabla MySQL que contiene el siguiente tipo de información:
Date product
2011-12-12 azd
2011-12-12 yxm
2011-12-10 sdx
2011-12-10 ssdd
Aquí hay un ejemplo de un script que uso para obtener datos de esta tabla:
<?php
$con = mysql_connect("localhost","username","password");
if (!$con)
{
die(''Could not connect: '' . mysql_error());
}
mysql_select_db("db", $con);
$sql=mysql_query("SELECT * FROM buy ORDER BY Date");
while($row = mysql_fetch_array($sql))
{
echo "<li><a href=''http://www.website/". $row[''Date''].".html''>buy ". date("j, M Y", strtotime($row["Date"]))."</a></li>";
}
mysql_close($con);
?>
Este script muestra cada fecha de la tabla, por ejemplo
12.dec 2011
12.dec.2011
10.dec.2011
10.dec.2011
Me gustaría mostrar solo fechas únicas, por ejemplo
12.dec.2011
10.dec.2011
Depende de lo que necesites.
En este caso sugiero:
SELECT DISTINCT(Date) AS Date FROM buy ORDER BY Date DESC;
porque hay pocos campos y el tiempo de ejecución de DISTINCT
es menor que la ejecución de GROUP BY
.
En otros casos, por ejemplo, donde hay muchos campos, prefiero:
SELECT * FROM buy GROUP BY date ORDER BY date DESC;
El resto es casi correcto, excepto que deben ordenar por Fecha DESC
SELECT DISTINCT(Date) AS Date FROM buy ORDER BY Date DESC;
Hay una palabra clave específica para lograr lo mismo.
SELECT DISTINCT( Date ) AS Date
FROM buy
ORDER BY Date DESC;
Otra respuesta DISTINCT
, pero con valores múltiples:
SELECT DISTINCT `field1`, `field2`, `field3` FROM `some_table` WHERE `some_field` > 5000 ORDER BY `some_field`
Use algo como esto en caso de que también desee dar salida a los detalles de los productos por fecha como JSON.
SELECT `date`,
CONCAT(''{'',GROUP_CONCAT(''{/"id/": /"'',`product_id`,''/",/"name/": /"'',`product_name`,''/"}''),''}'') as `productsJSON`
FROM `buy` group by `date`
order by `date` DESC
product_id product_name date
| 1 | azd | 2011-12-12 |
| 2 | xyz | 2011-12-12 |
| 3 | ase | 2011-12-11 |
| 4 | azwed | 2011-12-11 |
| 5 | wed | 2011-12-10 |
| 6 | cvg | 2011-12-10 |
| 7 | cvig | 2011-12-09 |
RESULT
date productsJSON
2011-12-12T00:00:00Z {{"id": "1","name": "azd"},{"id": "2","name": "xyz"}}
2011-12-11T00:00:00Z {{"id": "3","name": "ase"},{"id": "4","name": "azwed"}}
2011-12-10T00:00:00Z {{"id": "5","name": "wed"},{"id": "6","name": "cvg"}}
2011-12-09T00:00:00Z {{"id": "7","name": "cvig"}}
Pruébalo en SQL Fiddle
Use el operador DISTINCT en MySQL:
SELECT DISTINCT(Date) AS Date FROM buy ORDER BY Date DESC;
Use esta consulta para obtener valores
SELECT * FROM `buy` group by date order by date DESC
utilizar
SELECT DISTINCT Date FROM buy ORDER BY Date
entonces MySQL elimina duplicados
Por cierto: el uso de nombres de columna explícitos en SELECT
utiliza menos recursos en PHP cuando obtiene un gran resultado de MySQL
DISTINCT
es siempre una elección correcta para obtener valores únicos. También puedes hacerlo alternativamente sin usarlo. Eso es GROUP BY
. Que simplemente tiene que agregar al final de la consulta y seguido por el nombre de la columna.
SELECT * FROM buy GROUP BY date,description