使用php和从mySQL调用值,我试图调用每16行包含金属金


Using php and calling values from mySQL I am trying to call every 16 rows that contain the METAL GOLD

下面是我要使用的代码:

<?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关键字,条件中的子句应该由ANDOR分开,这取决于您想要检查的内容。

但是如果您只想从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