Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Сортировка по столбцу таблицы базы данных

Сообщения:  [1-9] 

 
 автор: alexander95   (13.03.2011 в 20:13)   письмо автору
 
   для: cheops   (13.03.2011 в 20:12)
 

Самое то. Спасибо!

  Ответить  
 
 автор: cheops   (13.03.2011 в 20:12)   письмо автору
 
   для: alexander95   (13.03.2011 в 20:06)
 

Можно отталкиваться от следующего скрипта
<?php
  $query 
"SELECT * FROM tbl ORDER BY num";
  
$res mysql_query($query);
  if(!
$res) exit("Ошибка - ".mysql_error());
  if(
mysql_num_rows($res))
  {
    while(
$result mysql_fetch_array($res))
    {
       echo 
$result['num']."<br />";
       echo 
$result['date']."<br />";
       echo 
$result['article']."<br />";
       echo 
$result['text']."<br />";
       echo 
"<br />";
    }
  }
?>

  Ответить  
 
 автор: alexander95   (13.03.2011 в 20:06)   письмо автору
 
   для: cheops   (13.03.2011 в 19:57)
 

Можете привести пример цикла?

  Ответить  
 
 автор: cheops   (13.03.2011 в 19:57)   письмо автору
 
   для: alexander95   (13.03.2011 в 19:52)
 

Хм... в этом случае лучше не ориентироваться на цикл for, которому нужен числовой индекс и регулярный механизм мего приращения, используйте while() - в этом случае можно ориентироваться на то, есть ли еще записи в результирующей таблицы или нет. Как они закончаться, цикл сам прекратит работу.

  Ответить  
 
 автор: alexander95   (13.03.2011 в 19:52)   письмо автору
 
   для: cheops   (13.03.2011 в 19:33)
 

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

Еще раз спасибо!

  Ответить  
 
 автор: cheops   (13.03.2011 в 19:33)   письмо автору
 
   для: alexander95   (13.03.2011 в 19:19)
 

Есть, делается это через оператор ALTER TABLE
ALTER TABLE tbl ORDER BY num
Однако, "навсегда" тут достаточно условно. Дело в том, что порядок строк в реляционных таблицах никогда не бывает определен, он задается во время выборки SELECT. Более того, операторы UPDATE, DELETE и INSERT будут нарушать его, так как первая задача СУБД - это скорость работы, удаляя записи она оставляет "дыры", которые потом могут заполняться при новых вставках, нарушая порядок строк. Профессионалы вообще никогда не надеются на естественный порядок в таблицах, так как в некоторых СУБД на него вообще влиять невозможно, кроме как через ORDER BY в SELECT-запросах.

  Ответить  
 
 автор: alexander95   (13.03.2011 в 19:19)   письмо автору
 
   для: cheops   (13.03.2011 в 19:07)
 

Огромное спасибо!

Но есть способ чтобы "навсегда" отсортировать?
Ну то есть вот как я пытался с UPDATE

  Ответить  
 
 автор: cheops   (13.03.2011 в 19:07)   письмо автору
 
   для: alexander95   (13.03.2011 в 18:57)
 

>Таблица: num || date || article || text
>Надо отсортировать по num, так как значения почему - то перемешаны. Пробовал сделать с
>UPDATE но не понял синтаксис.
При выводе используйте ключевое слово ORDER BY
SELECT * FROM tbl
ORDER BY num

В обратном порядке следует добавить так же DESC
SELECT * FROM tbl
ORDER BY num DESC


>И еще - как в phpMyAdmin установить текущее значение autoincrement для таблицы?
>Просто последний пост был 4, я все удалил, а новый добавляется все же с номером 5.
Это значение можно исправить в меню "Операции", группа "Параметры таблицы", без phpMyAdmin для этого можно использовать ALTER TABLE
ALTER TABLE tbl AUTO_INCREMENT=0;

А вообще, чтобы удалить данные из таблицы с обнулением атрибута AUTO_INCREMENT необходимо использовать оператор TRUNCATE TABLE.

  Ответить  
 
 автор: alexander95   (13.03.2011 в 18:57)   письмо автору
 
 

Таблица: num || date || article || text
Надо отсортировать по num, так как значения почему - то перемешаны. Пробовал сделать с UPDATE но не понял синтаксис.

И еще - как в phpMyAdmin установить текущее значение autoincrement для таблицы?
Просто последний пост был 4, я все удалил, а новый добавляется все же с номером 5.

  Ответить  

Сообщения:  [1-9] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования