Реверсивный mysql_fetch_array () - PullRequest
3 голосов
/ 30 марта 2009
function outputscores($mysqlquery,$reverse=false)
{
    while($row = mysql_fetch_array($mysqlquery))
    {
        echo '<img src="img/date.png" /> ' . date("j M Y",strtotime($row['timestamp'])) . '
        <img src="img/time.png" /> ' . date("H:i:s",strtotime($row['timestamp'])) . '
        <img src="img/star.png" /> '.$row['score'].$_GET["scoretype"].'<br />';
    }
}

Мне нужно обратить массив, если $ reverse установлен в true, но PHP говорит, что вывод mysql_fetch_array не является допустимым массивом Также не является $ mysqlquery.

Есть ли помощь?

Ух ты, сегодня я задал так много вопросов ._.

EDIT

$result = mysql_query("SELECT * FROM $gid LIMIT 25") or throwerror(mysql_error());

outputscores($result);

EDIT2 Еще один возможный звонок:

$result = mysql_query("SELECT * FROM ".$gid.",users WHERE users.lastcheck < ".$gid.".timestamp") or throwerror(mysql_error());

outputscores($result);

Ответы [ 3 ]

3 голосов
/ 30 марта 2009

Редактировать: измените ваш sql запрос на:

$mysqlquery="SELECT * FROM $gid";

Измените свою функцию следующим образом:

function outputscores($mysqlquery,$reverse=false)
{
    if ($reverse==true)
        $mysqlquery.=" ORDER BY id DESC LIMIT 25";
    else
        $mysqlQuery.=" LIMIT 25";
    $result=mysql_query($mysqlquery);
    while($row = mysql_fetch_array($result))
    {
       //Do output here
    }
}

Здесь, добавив слова ORDER BY id DESC, вы упорядочите записи в порядке убывания столбца 'id' в вашей таблице. Набрав ASC вместо DESC, вы можете упорядочить их в порядке возрастания. Также вы можете заменить 'id' любым другим столбцом из вашей таблицы, например timestamp, score и т. Д.

Редактировать: В качестве альтернативы, вы также можете сделать другую функцию для добавления предложения LIMIT и ORDER BY к запросу. Тогда вы могли бы сделать что-то вроде этого:

$reverse=false;//or true
$mysqlquery=addOrderBy("SELECT * FROM $gid",$reverse);
outputScores($mysqlquery);
3 голосов
/ 30 марта 2009

Вы, вероятно, пытаетесь полностью изменить набор результатов, попробуйте что-то вроде этого:

<code>function outputscores($mysqlres,$reverse=false)
{
   $results = array();
   while($row = mysql_fetch_array($mysqlres)){
    print('I found a result: <pre>'.print_r($row, false).'
'); // цели отладки $ results [] = $ row; } if ($ reverse) {$ results = array_reverse ($ results); } foreach ($ результаты в виде $ строки) { echo 'image'. date ("J M Y", strtotime ($ row ['timestamp'])). ' image '. date ("H: i: s", strtotime ($ row ['timestamp'])). ' image '. $ row [' score ']. $ _ GET ["scoretype"].'
'; } }

О, да, действительно, как говорит soulmerge, вы должны передать функции ресурс mysql, а не реальный запрос. Таким образом, как это:

$query = "SELECT field FROM table";
$res = mysql_query($query);
output_scores($res, true);

Что касается вашего комментария, убедитесь, что ваш запрос действительно возвращает результаты, протестируйте его в phpMyAdmin или что-то в этом роде или добавьте простую печать в цикл while, как я делал выше.

1 голос
/ 30 марта 2009

Если я правильно понял, $ mysqlquery должен быть результатом запроса mysql, а не массивом. В двух случаях mysql_fetch_array() действительно не возвращает массив:

  1. Либо параметр не является ресурсом результата запроса (проверьте с помощью var_dump($mysqlquery)) или
  2. Результата просто нет (mysql_fetch_array() возвращает FALSE).

Я надеюсь, что вы не передаете сам запрос на mysql_fetch_array(), как следует из названия переменной. Вы должны позвонить mysql_query(), прежде чем вы сможете получить что-нибудь.

Само обращение может быть выполнено путем извлечения всех строк и вызова array_reverse () . Пример: * +1021 *

$rows = array();
while ($row = mysql_fetch_array($result)) {
    $rows[] = $row;
}
array_reverse($rows);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...