Painel de Noticias.

Как мне отобразить результаты mysql_fetch_array в обратном порядке?

Честно говоря, я новичок в программировании на PHP / SQL. Я, вероятно, закодировал это неправильно, или «длинный путь». Если честно, я не знаю разницы. Я просто пытаюсь сделать простой веб-чат для веселого проекта. В настоящее время сообщения, отображаемые в комнате, сортируются по отметке времени в порядке убывания. Самые новые сообщения отображаются в верхней части страницы. То, что я хотел бы, чтобы иметь новейшие сообщения внизу страницы. Я показываю только 30 сообщений одновременно. Я не могу понять, как «перевернуть» сообщения так, чтобы самые новые показывались внизу. (Я надеюсь это имеет смысл). Вот что я использовал для отображения сообщений:

$query = "SELECT * FROM roomdata ORDER BY timestamp DESC LIMIT 30 "; $result = mysql_query($query); if ($result) < while($row= mysql_fetch_array($result)) < // Check to see if the message was sent by a chatter if ($row['sender'])< $publicmessage= '['.$row['sender'].'] '.$row['message']; >else < // if not, it must have been sent by the server (ie: login message, server announcement, etc) $publicmessage= $row['message']; >echo "$publicmessage "; > > 

Может кто-то указать мне верное направление?

Если я не включил достаточно информации, я прошу прощения — я новичок во всем этом. Заранее спасибо за ваше время!

Решение

Конечно, вы можете поместить все в массив в php и использовать array_reverse() отменить заказ (или взять предметы конца, пока он не опустеет …). Для чистого решения SQL, проверьте этот вопрос .

Альтернативное решение — если ваши требования браузера позволяют это сделать — было бы использовать flexbox для отображения элементов и установить:

Таким образом, вы можете оставить свой PHP-скрипт как есть; порядок в html будет таким же, но на экране он будет обратным.

Вам также нужно будет обернуть ваши элементы в элементы, но в любом случае список будет более уместным, чем простой текст с переносами строк.

Другие решения

Источник

Как мне показать данные MySql в обратном порядке

Обновление: спасибо за помощь всем, весь код находится внизу текста, с бразильско-португальским комментарием.

Как именно я показываю информацию, которую я имею в своих таблицах (используя PHP) в обратном порядке?

Читайте также:  Php разработчик web разработчика

Например, допустим, у меня есть таблица с AUTO_INCREMENT id столбец в качестве первичного ключа и name колонка:

id: 1 Имя: Cris
id: 2 Имя: Elen
id: 3 Имя: Боб
id: 4 Имя: Лиан

Мне нужно показать это на странице, как это:

id: 4 Имя: Лиан
id: 3 Имя: Боб
id: 2 Имя: Elen
id: 1 Имя: Cris

Этот код показывает их только в обычном порядке, пока он работает, но это не совсем то, что мне нужно.

PS: я использовал $result а также $rows посчитать, сколько строк у меня было и пытался использовать его в for функционировать, но это не сработало.

"; while($row = mysql_fetch_array($result)) < echo $row['Titulo']; echo "
"; > for($i=$totalrows;$i>=0;$i-1)< $_Str ="SELECT Titulo FROM titulos WHERE id_Noticia=".$i.""; $show = mysql_query($_Str, $conect); echo $show['Titulo']."
"; > ?>

Хорошо, вы, ребята, решили мою проблему, так что будет честно показать, что я пытался сделать.

Я пытался получить обратный порядок, потому что я хотел создать (в качестве упражнения) страницу, которая сохраняет заголовок блога и его содержание.

Мне нужно было, чтобы сообщения блога отображались в обратном порядке, чтобы пользователь мог видеть их от самых новых до самых старых.

я также должен был сделать каждый заголовок блога для использования в качестве ссылки на пост в блоге (сейчас он дает только ссылку на точно такую ​​же ссылку, я над ней работаю)

он также имеет немного HTML, чтобы создать область, где будут отображаться ссылки на посты, он показывает максимум 12 ссылок на блог (3 поста в той же строке, затем он переходит на следующую строку), и если пост в блоге слишком большой (более 90 пикселей) покрывает остальную часть ссылки (заголовок) точками.

опять же, извините за плохой английский, я не на практике.

  //variaveis para manipular quantas noticias aparecerão $a=0; $b=0; ?>   //cria a area onde os titulos aparecerão .boxed < border: 2px solid green ; width: 300px; >//encobre com pontos qualquer parte do titulo que ultrapasse mais de 90 pixels .espaco90  

".$lista[$i]."

"; $a=$a+1; $b=$b+1; if($b<12)< if($a>=3)< echo "
"; $a=$a-3; > >else< echo"
"; break; > > ?>

Источник

Перевернуть сообщения MySql

http://us1.php.net/manual/ru/function.array-reverse.php сначала соберите данные в массив, а дальше используйте эту функцию. А вообще, используйте MVC.

Ребят, смысл использовать лишнюю функцию для обработки всего массива, если можно собирать данные в массив уже в обратном порядке с помощью [ array_unshift ][1]? [1]: php.net/manual/ru/function.array-unshift.php

query("SELECT `message` FROM `auction_chat` ORDER BY `id` DESC LIMIT 66"); while($d = $db->assoc($q)) < array_unshift($messages, $d['message']); >echo implode('
', $message); ?>

Если у вас не только message собирается, то и ваш пример без переделки работать корректно не будет. Логично? Что такое ваше $db->assoc($q) ? Часть какого-то фреймворка? Что там внутри происходит? Если там происходит непосредственный вызов mysqli_fetch_assoc или подобное, то на его работу, увы, никак не повлиять. Только запрос менять. Либо же сделать, как я предложил: получить весь результат, и проделать с ним необходимую работу.

Читайте также:  Автоматическое нажатие клавиш python

Допустим, есть такая таблица:

+-----------+---+ |date | id| +-----------+---+ |2014-02-15 | 67| |2014-02-17 | 86| |2014-02-18 | 31| |2014-02-15 | 98| |2014-02-17 | 44| |2014-02-15 | 69| +-----------+---+ 

Напишем функцию сортировки по нескольким полям:

function msort() < $params = func_get_args(); $array = array_pop($params); if (!is_array($array)) return false; $multisort_params = array(); foreach ($params as $i =>$param) < if (is_string($param)) < $= array(); foreach ($array as $index => $row) < $[$index] = $row[$param]; > > else $ = $params[$i]; $multisort_params[] = &$; > $multisort_params[] = &$array; call_user_func_array("array_multisort", $multisort_params); return $array; > 

Допустим, мы получили данные из таблицы. Теперь отсортируем, как нам надо.
По полю «date» в порядке убывания и полю «id» в порядке возрастания.

# . получаем данные # данные получены $d = $db->assoc($q) # сортируем. $sorted = (msort('date', SORT_DESC, 'id', SORT_ASC, $d)); # делаем, что хотели с отсортированными данными. 

Вот так выглядят отсортированные данные:

+-----------+---+ |date | id| +-----------+---+ |2014-02-18 | 31| |2014-02-17 | 44| |2014-02-17 | 86| |2014-02-15 | 67| |2014-02-15 | 69| |2014-02-15 | 98| +-----------+---+ 

Источник

Обратный вывод данных из таблици

Помогите сделать вывод данных из таблицы в обратном порядке, сейчас я их вывожу в прямом порядке. Можно ли сделать кнопку для удаления строки, рядом со стройкой которую можно удалить?

    IdМодельПроизводитель"; for ($i = 0 ; $i < $rows ; ++$i) < $row = mysqli_fetch_row($result); echo ""; for ($j = 0 ; $j < 3 ; ++$j) echo "$row[$j]"; echo ""; > echo ""; // очищаем результат mysqli_free_result($result); > mysqli_close($link); ?> 

@teran А по моему красиво смотрится or die , может из перла заимствовали, там это стандартная и можно сказать рекомендуемая практика

@Mike ошибка должна быть нормально обработана, занесена в лог, пользователю должно быть показана какая-то информативная страница. А таким образом либо пустой экран на выходе, либо еще веселее SQL код запроса выводят. Еще если замешают хтмл с пхп вместе, то по середине вывод страниц может оборваться с разъехавшейся версткой.

1 ответ 1

       //Получаем результат запроса if ($result = mysqli_query($connection, "SELECT * FROM phones")) < //Собираем весь вывод в переменную $output =' '; //Для каждого записи с таблицы создаем строку в таблице while ($row = mysqli_fetch_assoc($result)) < $output .= "   "; > $output .= "
id Модель Производитель
"; //Отображаем данные пользователю echo $output; //Освобождаем память mysqli_free_result($result); > //Закрываем соединение mysqli_close($connection); ?>

Пароль и прочие настройки вынесите в отдельный файл «db.php» =>

 'localhost', 'user' => 'root', 'password' => '', 'dbname' => 'testdb', ]; 

Что-то вроде этого сделайте. Забудьте про for $i++. Почти всё начинается с нулевого элемента и перебор лучше через while или foreach. Ловить ошибки для mysqli можно, но они не являются критическими. Их не поймает try-catch, тут нужно переопределять обработчик ошибок.

Источник

Вывод из базы данных в заданном порядке

Мне нужно выводить статьи из базы данных в заданном порядке. Например, есть в базе данных столбец datatype со значениями 0 , 1 , 2 , 3 . Нужно организовать переменную $order так, чтобы выводились данные по порядку 3 , 0 , 1 , 2 или по другому заданному.

4 ответа 4

Добавьте в выводе ещё одну колонку, в которую поместите значение для сортировки, и делайте ORDER BY по этой колонке. Т.е. примерно так:

SELECT *, CASE WHEN datatype=3 THEN 1 WHEN datatype=0 THEN 2 WHEN datatype=1 THEN 3 WHEN datatype=2 THEN 4 END as orderIdx FROM table1 ORDER BY orderIdx 
SELECT * FROM table ORDER BY FIELD(id,2,4,1,5,3); 

Хочу сделать правку, оказалось что запрос работает некорректно, если не указан IN(. ) для чисел которые указаны в порядке сортировки.

SELECT * FROM `table` WHERE status IN(0, 3) ORDER BY FIELD(status, 0, 3) 

С таких запросом все работает. Но, сомневаюсь что такой вариант вам подойдет.

Это не запрос работает некорректно, а вы просто не дочитали документацию. Функция FIELD возвращает индекс (начиная с 1) в списке если значение поля из списка, и 0 если нет. Таким образом, запрос должен выглядеть так: SELECT * FROM table ORDER BY FIELD(id,3,5,1,4,2) desc; . Т.е. в обратном порядке список и общая сортировка тоже.

declare @t table (i int); declare @order int = 3; insert into @t (i) values (0), (1), (2), (3) select * from @t order by case when @order = i then -1 else i end 

для MS SQL Server , можете оформить как ХП с параметром.

$order = '3'; $query = sprintf("select id from mytable order by case when then -1 else id end", $order); $result = mysql_query($query); 

Источник

Оцените статью