我有一个返回3个字段的查询,其中一个是两个数字的月份。
我想基本拥有它,如果月份== 1输出1月,如果月份== 02输出费用等等
这就是我正在尝试的,但这根本不起作用,并阻止整个列在PHP中显示。
while ($row = mysql_fetch_array($sqlstr)) {
if ($row['theMonth']=="6") {
echo "<td>{June}</td>";}
echo "<td>{$row['sumSales']}</td>";
echo "<td>{$row['sumPurchases']}</td>";
echo "</tr>";
}
}
做我想做的事的正确方法是什么,为什么我做错了?
我正在使用的SQL查询是:
SELECT theMonth, sum(Sales) as sumSales, sum(Purchases) as sumPurchases
FROM
( SELECT date_format(saledate, '%Y-%m') AS theMonth, sales.cost as Sales, 0 AS Purchases
FROM sales, products
WHERE sales.product=products.name AND category='Food' OR category='Bocas'
OR category='Bebidas' OR category='Flor de cana por botellas'
OR category='Vino por botella' OR category='hora feliz'
UNION ALL
SELECT date_format(purchasedate, '%Y-%m') AS theMonth, 0 as Sales, purchases.cost as Purchases
FROM purchases
) AS all_costs
group by theMonth
我认为我不能替换
SELECT date_format(purchasedate, '%Y-%m') AS theMonth
与
SELECT MONTHNAME(purchasedate) AS theMonth
那么在SQL中将月份名称作为文本返回的最佳方法是什么?
答案 0 :(得分:3)
在SQL中,您可以使用DATE_FORMAT
将日期转换为月份名称:
SELECT DATE_FORMAT(NOW(), '%M')
July
可以在MySQL文档中找到允许的说明符列表。
(MONTHNAME也应该有用。)
您当前方法不起作用的原因是因为您当前正在输出年份和月份(例如“2010-06”),并且此字符串不会等于字符串“6”。
答案 1 :(得分:1)
第一个选项是修改SQL查询以将月份作为名称而不是(或同样)返回数字。见MONTHNAME
第二个选项是使用PHP的日期函数为你生成名称
$monthName = date('F',mktime(1,1,1,$row['theMonth'],1,2010));
第三种方法是使用monthnames数组,类似于zebediah的建议
答案 2 :(得分:1)
function month_name($int) {
return date( 'F' , mktime(1, 1, 1, (int)$int, 1) );
}
echo month_name(2); // February
答案 3 :(得分:0)
可能有一个内置的PHP,但没有使用类似的东西
$monthNames = array(1 => "January", 2 => "Febuary", 3 => "March", .... 12 => "December");
while ($row = mysql_fetch_array($sqlstr)) {
echo "<td>{$monthNames[$row['theMonth']]}</td>";
echo "<td>{$row['sumSales']}</td>";
echo "<td>{$row['sumPurchases']}</td>";
echo "</tr>";
}
答案 4 :(得分:0)
你在第一个echo
语句的行尾有一个结束大括号。这导致PHP过早地终止条件块,然后当它碰到你最后一个结束大括号时它有一个解析错误,因为它没有开始匹配。
您可以使用日期函数从时间戳(如果有的话)获取月份名称。 date('F', $timestamp);
see the php date function reference
在SQL语句中执行此操作可能是处理此特定情况的最简单且最易于使用的方式。