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

Форум MySQL

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

 

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

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

тема: Установка сортировки

Сообщения:  [1-10]   [11-13] 

 
 автор: elenaki   (24.02.2006 в 13:33)   письмо автору
 
   для: Ученик   (24.02.2006 в 13:20)
 

Fatal error: [] operator not supported for strings in e:\www\php\tests\sorting\some.php on line 20

   
 
 автор: Ученик   (24.02.2006 в 13:20)   письмо автору
 
   для: cheops   (24.02.2006 в 13:08)
 

Спасибо сейчас почитаю. Хеопс, а в фотогалерее можно было задать один и тот же порядковый номер разным изображениям. Это так и должно быть?


P.S. Пришлось немонго повозиться, но все-таки сделал рабочий вариант. Еленаки если вам интересно см. аттач. Правда он тоже далеко не идеален, но сам принцип понятен, а главное работает ;-)

   
 
 автор: cheops   (24.02.2006 в 13:08)   письмо автору
 
   для: Ученик   (24.02.2006 в 11:43)
 

> Мне хотелось бы слегка упростить эту процедуру, без ввода порядкового номера, а просто
>нажимая несколько раз ссылку "поднять" или "опустить" мы меняем положение отой строки по
>отношению к остальным.
Хм... помоему уже перешли к обсуждению другого вопроса. Посмотрите 293 страницу, начиная с неё обсуждается реализация такого алгоритма.

   
 
 автор: Ученик   (24.02.2006 в 11:43)   письмо автору
 
   для: elenaki   (23.02.2006 в 20:11)
 

Да вы правы, можно сделать 2 запроса и выбирать сначала строку на которой нажал пользователь а потом уже все остальные значения из БД. Но в это совсем не то что меня интересует. При таком методе можно лишь добиться того, чтобы любая выделенная строка поднялась на самый верх или же опустилась вниз, при всем этом все изменения которые были сделаны обнулятся при следующем заходе на сайт :-(.

В книге "Практика создания web-сайтов на PHP5" есть похожая схема. Возьмем ту же фотогалерею. В ней можно задать порядок сортировки изображений путем принудительной установки порядкового номера. Например мне нужно чтобы эта фотка была 3-я по счету при выводе на экран, ставишь ей 3 и все ок. Мне хотелось бы слегка упростить эту процедуру, без ввода порядкового номера, а просто нажимая несколько раз ссылку "поднять" или "опустить" мы меняем положение отой строки по отношению к остальным. И самое главное чтобы все изменения сохранились в бд, и при следующем заходе на сайт сортировка была как при последнем посещении.

Хеопс может быть вы мне поможете разобраться?


>мне не очень понятно, почему работает. после нескольких
>кликов поле sorting принимает нулевое значение и потом можно
>добиться, чтобы строка поднялась наверх, только опуская все
>остальные.
Поле "сортинг" может принимать отрицательное значение при этом это все учитываеться при выборке из БД запросом

SELECT * FROM $table ORDER BY sorting

;-)

   
 
 автор: elenaki   (23.02.2006 в 20:11)   письмо автору
 
   для: Ученик   (23.02.2006 в 16:21)
 

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

значит так, я всю дорогу думала. придумала сделать 2 запроса. один выбирает ОДНУ строку по id, второй - все остальные, КРОМЕ этого id. как выводить остальные строки - вам решать, сортировать их по их id, или по полю sorting. только тогда надо оставить один линк - наверх. по клику на нем выбирать строку с выбранным id, выбирать ее из базы, выводить первой. потом делать запрос на выборку всех остальных строк.

   
 
 автор: Ученик   (23.02.2006 в 16:21)   письмо автору
 
   для: elenaki   (23.02.2006 в 16:03)
 

Дамп таблицы

CREATE TABLE 'test' (
  'id' int(11) NOT NULL auto_increment,
  'text' text NOT NULL,
  'data' datetime NOT NULL default '0000-00-00 00:00:00',
  'sorting' int(11) NOT NULL default '0',
  PRIMARY KEY  ('id')
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=5 ;


INSERT INTO 'test' VALUES (1, 'Описание чего-то там 1', '2006-02-23 14:13:54', 100);
INSERT INTO 'test' VALUES (2, 'Описание чего-то там 2', '2006-02-23 14:14:21', 200);
INSERT INTO 'test' VALUES (3, 'Описание чего-то там 3', '2006-02-23 14:14:30', 300);
INSERT INTO 'test' VALUES (4, '4', '2006-02-23 14:14:37', 400);


Файл index.php

<?
require_once "config.php";

$sql="SELECT * FROM $table ORDER BY sorting";
$result=mysql_query($sql);
if(!
$result) {
echo 
"Ошибка выполнения запроса<BR>".mysql_error();
echo 
"<br>".$sql;
exit();
}

while(++
$i<=mysql_num_rows($result))
{
    
$r=mysql_fetch_array($result);
          echo 
$r[text]." <A href=some.php?up=1&id=".$r[id].">вверх</A><br>";
          echo 
$r[text]." <A href=some.php?up=0&id=".$r[id].">вниз</A><br>";
          echo 
"<br><br>";
}
?>

Файл some.php

<?
require_once "config.php";

if(
$_GET[up]==1){

$sql="UPDATE $table SET sorting =sorting-101 WHERE id =$_GET[id]";
mysql_query($sql);
?>
<HTML><HEAD> 
<META HTTP-EQUIV='Refresh' CONTENT='0; URL="index.php"'> 
</HEAD></HTML>
<?
}

elseif(
$_GET[up]==0){

$sql="UPDATE $table SET sorting =sorting+101 WHERE id =$_GET[id]";
mysql_query($sql);
?>
<HTML><HEAD> 
<META HTTP-EQUIV='Refresh' CONTENT='0; URL="index.php"'> 
</HEAD></HTML>
<?
}
?>


Все работает, но немного криво и через одно место :) Вот мне и интересно как это вообще реализуеться.

   
 
 автор: Ученик   (23.02.2006 в 16:14)   письмо автору
 
   для: elenaki   (23.02.2006 в 16:03)
 

Хммм.... Сейчас напишу так как это вижу я. Вы меня немного не верно понимаете

   
 
 автор: elenaki   (23.02.2006 в 16:03)   письмо автору
 
   для: Ученик   (23.02.2006 в 15:55)
 

тогда надо делать GROUP BY "выделенная строка"

   
 
 автор: Ученик   (23.02.2006 в 16:03)   письмо автору
 
   для: Ученик   (23.02.2006 в 15:55)
 

З.Ы. Там в скрипте малехо ошибся
echo $r[text]." <A href=some.php?up=1&id=".$r[id].">вниз</A><br>";

поменять на
echo $r[text]." <A href=some.php?up=0&id=".$r[id].">вниз</A><br>";

З.З.Ы. Тему я не дублировал чесслово. Только зарегистрировался а тут и она выскочила...

   
 
 автор: Ученик   (23.02.2006 в 15:55)
 
   для: Ученик   (23.02.2006 в 15:30)
 

Спасибо за скорые ответы ;-), но вы меня немного неправильно поняли. Мне нужно чтобы эти 4 значения выводились не просто, по порядку и в обратном порядке. Мне интересно как реализовываеться сортировка одной строки по отношению ко всем остальным. Например если пользователь нажмет на эту ссылку
Описание чего-то там 3 вверх
то только эта строка поднимится вверх и порядок их отображения и хранения в БД будет таким

 Описание чего-то там 1 вверх
Описание чего-то там 1 вниз

Описание чего-то там 3 вверх
Описание чего-то там 3 вниз

Описание чего-то там 2 вверх
Описание чего-то там 2 вниз

4 вверх
4 вниз

Если еще раз нажать на
Описание чего-то там 3 вверх
то она подниметься на самый верх. Порядок же остальных строк не должен меняться.

   

Сообщения:  [1-10]   [11-13] 

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

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