Используя php и вызывая значения из MySQL, я пытаюсь вызвать каждые 16 строк, которые содержат METAL GOLD - PullRequest
1 голос
/ 12 августа 2011

Вот код, который я пытаюсь использовать:

<?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'])) . "'" . ", " ;  
 } 

         }
?>

Это возвращает эту ошибку:

Предупреждение: 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:00», «11:00», «1:00», «3:00», «6:00», «8:00», «10:00», «12:00», «14:00», «4 PM ',' 6 PM ',' 8 PM ', '10 PM', '12 AM ',' 2 AM ',' 4 AM ',' 6 AM ',' 8 AM ', '10 AM', '12 PM ',' 14:00 ',' 16:00 ',' 18:00 ',' 8:00 ',' 10:00 ', '12 AM', '2 AM', '4 AM', '6 AM', '8 AM ',' 10 AM ', '12 PM', '2 PM', '16:00',

Любая помощь будет оценена! Спасибо:)

Ответы [ 3 ]

1 голос
/ 12 августа 2011

После вызова mysql_query вы всегда должны проверять, был ли запрос успешным:

if(!$goldquery){
    die(mysql_error());
}

Это напечатает вам, что у вас есть ошибка в вашем операторе SQL. В вашем случае это двойное ключевое слово WHERE, условия в котором разделение должно быть разделено на AND или OR, в зависимости от того, что вы хотите проверить.

Но если вы хотите выбрать каждую 16-ю строку только из GOLD, ваше второе условие 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
");
0 голосов
/ 12 августа 2011

Разве не имеет смысла фильтровать подзапрос 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,и rownum должен считать только эти строки, что позволяет вам выбирать каждую шестнадцатую строку GOLD с помощью фильтра модулей.

0 голосов
/ 12 августа 2011

В вашем предложении 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.

...