Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> sql сортировка данных, сортировка в две стороны 
V
    Опции темы
YuraKo
Дата 27.1.2009, 12:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 111
Регистрация: 10.3.2008
Где: Украина г.Хмельни цкий

Репутация: нет
Всего: нет



Здраствуйте. База 4 поля ID,FIO,TN,Adress. написал сортировку:
Код

<?
if (isset($_GET['param']))
{
$paramm=$_GET['param'];
$result=mysql_query("select * from user ORDER BY $paramm",$DB);
$myrow=mysql_fetch_assoc($result);
$N=mysql_num_rows($result);
echo "<table border=1>";
echo "<tr><td><a href='ViewData.php?param=ID'>ID</a></td><td><a href='ViewData.php?param=FIO'>FIO</a></td><td><a href='ViewData.php?param=TN'>TN</a></td><td><a href='ViewData.php?param=Adress'>Adress</a></td></tr>";
do
  {
  echo "<tr><td>".$myrow['ID']."</td><td>".$myrow['FIO']."</td><td>".$myrow['TN']."</td><td>".$myrow['Adress']."</td></tr>";
  }
  while ($myrow=mysql_fetch_assoc($result));
echo "</table>";
}
else
{
$result=mysql_query("select * from user",$DB);
$myrow=mysql_fetch_assoc($result);
$N=mysql_num_rows($result);
echo "<table border=1>";
echo "<tr><td><a href='ViewData.php?param=ID'>ID</a></td><td><a href='ViewData.php?param=FIO'>FIO</a></td><td><a href='ViewData.php?param=TN'>TN</a></td><td><a href='ViewData.php?param=Adress'>Adress</a></td></tr>";
do
  {
  echo "<tr><td>".$myrow['ID']."</td><td>".$myrow['FIO']."</td><td>".$myrow['TN']."</td><td>".$myrow['Adress']."</td></tr>";
  }
  while ($myrow=mysql_fetch_assoc($result));
echo "</table>";
}
?>

Сортировка  работает только по возрастанию, мене нужно что бы при переходе на ту же ссылку сортировало поочередно по возрастанию и по убыванию-1 клик сортировка по возрастанию, 2-й клик по убыванию и.т.д. Знаю что в запросе можно заюзать  DESC для обратной сортировки...
Как правельно организовуется такая сортировка?

Добавлено через 3 минуты и 37 секунд
И есчо вопросик: как правельно организовать постраничный вывод данных базы? я то зделал но там не доконца правельно да и каша в коде полная. Если можете скиньте Алгоритм что типа стандартного для такой задачи)
PM MAIL   Вверх
enof
Дата 27.1.2009, 12:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 837
Регистрация: 23.1.2009
Где: Санкт-Петербург

Репутация: 30
Всего: 35



Цитата(YuraKo @  27.1.2009,  12:19 Найти цитируемый пост)

И есчо вопросик: как правельно организовать постраничный вывод данных базы? я то зделал но там не доконца правельно да и каша в коде полная. Если можете скиньте Алгоритм что типа стандартного для такой задачи) 

1.Узнаем количество записей.
2.Вычисляем количество страниц.
3.Устанавливаем запрошенную страницу.
4.Вычисляем с какой записи и сколько выводить.
5.Достаем из базы и выводим
Сейчас пример напишу.
PM MAIL ICQ Skype   Вверх
YuraKo
Дата 27.1.2009, 12:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 111
Регистрация: 10.3.2008
Где: Украина г.Хмельни цкий

Репутация: нет
Всего: нет



Цитата(enof @  27.1.2009,  12:34 Найти цитируемый пост)
1.Узнаем количество записей.2.Вычисляем количество страниц.3.Устанавливаем запрошенную страницу.4.Вычисляем с какой записи и сколько выводить.5.Достаем из базы и выводим

По этим пунктам делал, но мало опыта в php потому и правельно организовать алгоритм несмог-вышла каша которая недоконца коректно работает, вот за примерчик буду благодарен )
PM MAIL   Вверх
enof
Дата 27.1.2009, 12:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 837
Регистрация: 23.1.2009
Где: Санкт-Петербург

Репутация: 30
Всего: 35



Код

<?php
$num_msg = 5; //Количество записей на одной странице.

$result = mysql_query("SELECT COUNT(*) as cnt FROM table_name"); //Количество записей в таблице.
$cnt_row = mysql_result($result,0,'cnt');

$num_page = ceil($cnt_row/$num_msg);  //Количество страниц.

$current_page=!empty($_GET['page']) ? intval($_GET['page']) : 1; //Текущая страница.Предполагается,что номер страницы передается в $_GET['page']


if($current_page>$num_page || $current_page<1)        //Проверяем номер запрошенной страницы,если он больше,чем всего страниц или меньше 1,то устанавливаем 1
    $current_page = 1;
    
$start = $current_page*$num_msg-$num_msg;        //$start - номер записи,с которой будут извлекаться данные

$result=mysql_query("SELECT * FROM msg ORDER BY id DESC LIMIT $start,$num_msg"); //Делаем запрос к базе.Сортируем по id в обратном порядке.

while($row=mysql_fetch_assoc($result))        //В цикле выводим данные.
{
    echo "id:".$row['id']."<br>";
    echo "name:".$row['name']."<br>";
    echo "<hr>";
}

echo "Страницы: ";
for($i=1;$i<=$num_page;$i++)        //В цикле выводим номера страниц.
{
    if($i==$current_page)
        echo " $i ";
    else
        echo " <a href='index.php?page=$i'>$i</a> ";
}
?>

Если что не понятно,спрашивайте.

Это сообщение отредактировал(а) enof - 3.2.2009, 16:09
PM MAIL ICQ Skype   Вверх
YuraKo
Дата 27.1.2009, 13:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 111
Регистрация: 10.3.2008
Где: Украина г.Хмельни цкий

Репутация: нет
Всего: нет



Спасибо, по коду вроде все понятно, это попробую совместить с сортировкой, вобщем поиграюсь и отпишу результат...
PM MAIL   Вверх
enof
Дата 27.1.2009, 13:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 837
Регистрация: 23.1.2009
Где: Санкт-Петербург

Репутация: 30
Всего: 35



По поводу сортировки.
По убыванию:
Код

SELECT * FROM user ORDER BY $paramm DESC

Можно писать в сессию,как сортировались данные в предыдущий раз.
Код

if (isset($_GET['param']))
{
    $paramm=$_GET['param'];
    if($_SESSION['orderby'])
    {
        $result=mysql_query("SELECT * FROM user ORDER BY $paramm DESC");
        $_SESSION['orderby'] = false;
    }else{
        $result=mysql_query("SELECT * FROM user ORDER BY $paramm");
        $_SESSION['orderby'] = true;
    }
    $myrow=mysql_fetch_assoc($result);
    //Далее все как обычно

p.s.
Обычно пишут ключевые слова прописными буквами,а названия полей строчными.
И еще,Читать обязательно!
PM MAIL ICQ Skype   Вверх
YuraKo
Дата 27.1.2009, 18:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 111
Регистрация: 10.3.2008
Где: Украина г.Хмельни цкий

Репутация: нет
Всего: нет



enof, Спасибо за помощь, вроде получилось все)
PM MAIL   Вверх
BOY
Дата 1.2.2009, 00:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 7.1.2009
Где: 127.0.0.1

Репутация: нет
Всего: нет



Код

$num_msg = 5; //Количество записей на одной странице.
$result = mysql_query("SELECT COUNT(*) as cnt FROM fotoshop_lessons"); //Количество записей в таблице.
$cnt_row = mysql_result($result,0,'cnt');

$num_page = ceil($cnt_row/$num_msg);  //Количество страниц.

$current_page=!empty($_GET['page']) ? intval($_GET['page']) : 1; //Текущая страница.Предполагается,что номер страницы передается в $_GET['page']

if($current_page>$num_page && $current_page<1)        //Проверяем номер запрошенной страницы,если он больше,чем всего страниц или меньше 1,то устанавливаем 1
    $current_page = 1;
    
$start = $current_page*$num_msg-$num_msg;        //$start - номер записи,с которой будут извлекаться данные

$result=mysql_query("SELECT * FROM fotoshop_lessons ORDER BY id DESC LIMIT $start,$num_msg"); //Делаем запрос к базе.Сортируем по id в обратном порядке.

while($row=mysql_fetch_assoc($result))        //В цикле выводим данные.
{
    echo "$row[id]";
    echo "$row[title]";
    echo "<hr>";
}

echo "Страницы: ";
for($i=1;$i<=$num_page;$i++)        //В цикле выводим номера страниц.
{
    if($i==$current_page)
        echo " $i ";
    else
        echo " <a href='lessonsFoto.php?page=$i'>$i</a> ";
}

В том коде были ошибки при запросе к mysql_query. Почему у меня при вставке этого скрипта в файл,не сортируются страницы.Тоесть,строка " 1 2 3 4 5 6 7 8 9 "и т.д. выводится,но на каждой из этих страниц так и остаётся кол-во сообщений.Выводятся просто цифры.
Скриншот:

user posted image
PM MAIL ICQ   Вверх
enof
Дата 1.2.2009, 12:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 837
Регистрация: 23.1.2009
Где: Санкт-Петербург

Репутация: 30
Всего: 35



Код

В том коде были ошибки при запросе к mysql_query

Где?
Цитата(BOY @  1.2.2009,  00:33 Найти цитируемый пост)
Почему у меня при вставке этого скрипта в файл,не сортируются страницы.

Код писал не для копипаста,а чтобы объяснить примерно,как и что работает.
PM MAIL ICQ Skype   Вверх
BOY
Дата 1.2.2009, 12:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 7.1.2009
Где: 127.0.0.1

Репутация: нет
Всего: нет



Код

$result = mysql("SELECT COUNT(*) as cnt FROM table_name"); //Количество записей в таблице.
$result=mysqlq("SELECT * FROM msg ORDER BY id DESC LIMIT $start,$num_msg"); //Делаем запрос к базе.Сортируем по id в обратном порядке.

Нужно написать mysql_query,запрос ведь smile 
Цитата

Код писал не для копипаста,а чтобы объяснить примерно,как и что работает.

Можешь подсказать,как сделать нормальный вывод сообщений?Если что,в аське можноsmile
PM MAIL ICQ   Вверх
enof
Дата 1.2.2009, 12:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 837
Регистрация: 23.1.2009
Где: Санкт-Петербург

Репутация: 30
Всего: 35



Цитата(BOY @  1.2.2009,  12:30 Найти цитируемый пост)
Нужно написать mysql_query,запрос ведь smile 

точно smile у меня просто свои функции написаны,вот и забылся маленько
PM MAIL ICQ Skype   Вверх
Teleport
Дата 3.2.2009, 16:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 557
Регистрация: 5.7.2008
Где: Прибалтика

Репутация: нет
Всего: 6



enof - в твоем коде есть такие строки
Код

if($current_page>$num_page && $current_page<1)        //Проверяем номер запрошенной страницы,если он больше,чем всего страниц или меньше 1,то устанавливаем 1
    $current_page = 1;


я вот понять не могу в коде у тебя оператор AND а в комментарии пишешь ИЛИ. Вот не совсем понятен момент... Я думаю, что && меняем на ||. Или нет?


--------------------
user posted image
user posted image 
PM MAIL   Вверх
enof
Дата 3.2.2009, 16:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 837
Регистрация: 23.1.2009
Где: Санкт-Петербург

Репутация: 30
Всего: 35



Цитата(Teleport @  3.2.2009,  16:00 Найти цитируемый пост)
я вот понять не могу в коде у тебя оператор AND а в комментарии пишешь ИЛИ. Вот не совсем понятен момент... Я думаю, что && меняем на ||. Или нет? 

ага,косяк,надо ||  smile 
PM MAIL ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0868 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.