下面是我要使用的代码:
<?php
function get_silver_time()
{
$goldquery = mysql_query("SELECT *
FROM (
SELECT
@row := @row +1 AS rownum, time,metal
FROM (
SELECT @row :=0) r, metal_price
) ranked
WHERE rownum % 16 = 1
WHERE metal= 'GOLD'
");
while($result = mysql_fetch_array( $goldquery ))
{
echo "'" . date('g A', strToTime($result['time'])) . "'" . ", " ;
}
}
?>
This return This Error:
警告:mysql_fetch_array():所提供的参数不是一个有效的MySQL结果资源,在/home/bellsnet/public_html/chart.php的第125行
不尝试过滤掉METAL类型,我的代码似乎工作:
<?php
function get_silver_time()
{
$goldquery = mysql_query("SELECT *
FROM (
SELECT
@row := @row +1 AS rownum, time,metal
FROM (
SELECT @row :=0) r, metal_price
) ranked
WHERE rownum % 16 = 1
");
while($result = mysql_fetch_array( $goldquery ))
{
echo "'" . date('g A', strToTime($result['time'])) . "'" . ", " ;
}
}
?>
它返回这个:
1点,11点,1点,3点,6点,早上8点,10点,12点,下午2点,下午4点,6点,晚上8点,10点,12点,2点,4点,6点,早上8点,10点,12点,下午2点,下午4点,6点,晚上8点,10点,12点,2点,4点,6点,早上8点,10点,12点,下午2点,下午4点,
任何帮助将不胜感激!谢谢:)
调用mysql_query
后,您应该始终检查查询是否成功:
if(!$goldquery){
die(mysql_error());
}
这将打印您的SQL语句中有错误。在您的情况下,它是双倍的WHERE
关键字,条件中的子句应该由AND
或OR
分开,这取决于您想要检查的内容。
但是如果您只想从GOLD
中选择每16行,那么您的第二个WHERE条件应该移动到ranked
临时表中,因此它应该看起来像这样:
$goldquery = mysql_query("SELECT *
FROM (
SELECT
@row := @row +1 AS rownum, time, metal
FROM
(SELECT @row :=0) r,
metal_price
WHERE
metal= 'GOLD'
) ranked
WHERE rownum % 16 = 1
");
那么,在您想要的金属上过滤FROM子查询不是很有意义吗?
SELECT * FROM (
SELECT
@row := @row +1 AS rownum, time,metal
FROM (
SELECT @row :=0) r, metal_price
WHERE metal = 'GOLD'
) ranked
WHERE rownum % 16 = 1
那么"排名"表应该返回一个只包含GOLD行的结果集,并且行数应该只计算这些行,允许您使用模数过滤器选择每16个GOLD行。
您的WHERE
子句有语法错误。
$goldquery = mysql_query("SELECT *
FROM (
SELECT
@row := @row +1 AS rownum, time,metal
FROM (
SELECT @row :=0) r, metal_price
) ranked
WHERE rownum % 16 = 1
AND metal= 'GOLD'
");
请注意在包含'GOLD'的行中使用AND
而不是WHERE
。