EOMY.NET
Хостинг EOMY.NET: Форум поддержки
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 
RSS Feed  

Обмен местами записей в MySQL

 
Начать новую тему   Ответить на тему    Список форумов EOMY.NET -> Программирование для WEB
Обмен местами записей в MySQL

Как пишете скрипты для работы с БД?
только для работы с MySQL, Postgre, MSSQL и т.д.
75%
 75%  [ 3 ]
только для работы с SQLite
0%
 0%  [ 0 ]
абстрагированно с помощью PEAR DB или другого класса
25%
 25%  [ 1 ]
Всего голосов : 4

Автор Сообщение
vohomov
Хостинг — это наше всё!
Хостинг — это наше всё!


Зарегистрирован: 17.07.2009
Сообщения: 183

20631 Монеты

СообщениеДобавлено: Чт, 20 Авг, 2009 13:13    Заголовок сообщения: Обмен местами записей в MySQL Ответить с цитатой

Добрый день, друзья.
Хотел бы узнать мнение знающих по-поводу того, как лучше сделать на уровне php-скрипта возможность обмена местами записей в таблице. Поясняю: это необходимо, например, когда нужно предоставить пользователю выбирать порядок следования записей в меню на сайте и т.д. и т.п. Это можно сделать, присваивая буквенные или цифровые идентификаторы записей в отведённых для этого полях, соответственно - для последующей сортировки. Но администратору нужно предоставить возможность изменения этих указателей - "обмена местами" - как, по вашему мнению, это лучше реализовать?

P.S. У меня, конечно есть варианты, но ввиду того, что делаю это на PEAR DB, хотелось бы услышать мнение других людей.
_________________
Любителям и знатокам географии | Помощь по химии онлайн
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
noLove
Два пингвина
Два пингвина


Зарегистрирован: 25.04.2007
Сообщения: 352

18114 Монеты

СообщениеДобавлено: Чт, 20 Авг, 2009 15:11    Заголовок сообщения: Ответить с цитатой

я очень хочу научиться абстрагировано писать работу с БД, но я до конца еще не осмыслил как это будет работать.... Sad
_________________
Друзья, уважайте труд других Wink
http://xternalx.com - моя хомпага
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
vohomov
Хостинг — это наше всё!
Хостинг — это наше всё!


Зарегистрирован: 17.07.2009
Сообщения: 183

20631 Монеты

СообщениеДобавлено: Чт, 20 Авг, 2009 18:35    Заголовок сообщения: Ответить с цитатой

noLove писал(а):
я очень хочу научиться абстрагировано писать работу с БД, но я до конца еще не осмыслил как это будет работать.... Sad

Значит свой человек Smile
А не могли бы рассказать, что конкретно не осмыслено? Может, наоборот, я могу чем-то помочь? Какую литературу или мануалы по этому вопросу читаете?
Я лично заинтересовался кроссбазностью, когда увидел установку phpBB3 - там можно даже SQLite выбрать и форум будет работать... вот решил поэтому написать некое подобие движка для сайта на основе PEAR DB - пишется легко, ясно, но вот возник вопрос описанный в начале темы...
_________________
Любителям и знатокам географии | Помощь по химии онлайн
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Веденин
Красные глаза
Красные глаза


Зарегистрирован: 17.05.2007
Сообщения: 2066
Откуда: Самара
11733 Монеты

СообщениеДобавлено: Пт, 21 Авг, 2009 06:49    Заголовок сообщения: Re: Обмен местами записей в MySQL Ответить с цитатой

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

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

vohomov писал(а):

Поясняю: это необходимо, например, когда нужно предоставить пользователю выбирать порядок следования записей в меню на сайте и т.д. и т.п. Это можно сделать, присваивая буквенные или цифровые идентификаторы записей в отведённых для этого полях, соответственно - для последующей сортировки. Но администратору нужно предоставить возможность изменения этих указателей - "обмена местами" - как, по вашему мнению, это лучше реализовать?

Опять таки не понял, ну введите в таблицу два поля порядок записи заданный пользователем и порядок записи заданный администратором в чем проблема? Не понятно следующие: если администартор поменял местами записи, то юзер уже не сможет поменять эти (и другие) записи, или сможет? Если сможет, то как вы сумеете предотварить, что после смены порядка админом, пользователь снова обратно все поменяет?

vohomov писал(а):

P.S. У меня, конечно есть варианты, но ввиду того, что делаю это на PEAR DB, хотелось бы услышать мнение других людей.

Мое мнение SQL язык сам по себе переносимый и 99% конструкций переносятся без всяких изменений на другую бд, а пытаться сделать ваш скрипт работающий например под Oracl'ом хотя у вас нет и не будет возможности его проверить с этой СУБД не стоит, лучше сделать работающий скрипт под один MySQL, чем условно работающий скрипт под десятком БД, но проверенный на одном MySQL.
Вообще эти классы
абстрагирования это зло, так как вы пытаетесь отвязаться от БД, однако привязываетесь к классу PEAR DB, который совсем не обязательно каждый хостер поставит. Вообще учите стандарт SQL, зная его можно и так писать переносимые скрипты.

P.S. Да, ошибся с php 4.2 PEAR стоит по умолчанию (если его специально не выключили что тоже возможно), в общем то класс не плохой, но все равно, пока не проверили работоспособность на всех БД нельзя говорить, что он работает везде, хотя бы потому что не факт например что русская кодировка или длинное название полей в таблице будет работать везде одинаково, советую если вам это не надо используйте обычный mysql класс потом перепишите на PEAR, все равно без тестирования это бессмысленно. Twisted Evil
_________________
Написание конвекторов, парсеров, интеграции нескольких сайтов (в личку)

Тематические поисковые системы Рунета: Танцевальная, программиста, поиск книг
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
vohomov
Хостинг — это наше всё!
Хостинг — это наше всё!


Зарегистрирован: 17.07.2009
Сообщения: 183

20631 Монеты

СообщениеДобавлено: Пт, 21 Авг, 2009 09:16    Заголовок сообщения: Re: Обмен местами записей в MySQL Ответить с цитатой

Веденин писал(а):
vohomov писал(а):
Добрый день, друзья.
Хотел бы узнать мнение знающих по-поводу того, как лучше сделать на уровне php-скрипта возможность обмена местами записей в таблице.

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

vohomov писал(а):

Поясняю: это необходимо, например, когда нужно предоставить пользователю выбирать порядок следования записей в меню на сайте и т.д. и т.п. Это можно сделать, присваивая буквенные или цифровые идентификаторы записей в отведённых для этого полях, соответственно - для последующей сортировки. Но администратору нужно предоставить возможность изменения этих указателей - "обмена местами" - как, по вашему мнению, это лучше реализовать?

Опять таки не понял, ну введите в таблицу два поля порядок записи заданный пользователем и порядок записи заданный администратором в чем проблема? Не понятно следующие: если администартор поменял местами записи, то юзер уже не сможет поменять эти (и другие) записи, или сможет? Если сможет, то как вы сумеете предотварить, что после смены порядка админом, пользователь снова обратно все поменяет?

vohomov писал(а):

P.S. У меня, конечно есть варианты, но ввиду того, что делаю это на PEAR DB, хотелось бы услышать мнение других людей.

Мое мнение SQL язык сам по себе переносимый и 99% конструкций переносятся без всяких изменений на другую бд, а пытаться сделать ваш скрипт работающий например под Oracl'ом хотя у вас нет и не будет возможности его проверить с этой СУБД не стоит, лучше сделать работающий скрипт под один MySQL, чем условно работающий скрипт под десятком БД, но проверенный на одном MySQL.
Вообще эти классы
абстрагирования это зло, так как вы пытаетесь отвязаться от БД, однако привязываетесь к классу PEAR DB, который совсем не обязательно каждый хостер поставит. Вообще учите стандарт SQL, зная его можно и так писать переносимые скрипты.

P.S. Да, ошибся с php 4.2 PEAR стоит по умолчанию (если его специально не выключили что тоже возможно), в общем то класс не плохой, но все равно, пока не проверили работоспособность на всех БД нельзя говорить, что он работает везде, хотя бы потому что не факт например что русская кодировка или длинное название полей в таблице будет работать везде одинаково, советую если вам это не надо используйте обычный mysql класс потом перепишите на PEAR, все равно без тестирования это бессмысленно. Twisted Evil

Да-да, совершенно верно - друг, вы ничего не поняли Smile
Насчёт класса Pear DB - всё, что нужно, чтобы он работал - поместить рядом со скриптами его использующими класс PEAR.php , PEAR5.php , DB.php и папку DB с драйверами баз для класса (скачать можно с сайта PEAR) - и всё прекрасно работает. Может вы не знали - я это проверил, работает. И вовсе необязательно, чтобы на хостинге где-то PEAR был поставлен.

Что касается перемещений - вы меня не поняли совершенно. Никаких юзеров и администраторов, только один администратор и сайт. Сортировка - дело понятное, но она будет на _выводе_ записей меню, а я говорю про их запись. То есть смотрите пример: у админа есть админка, он добавил на сайт 5 разделов:
A, B, C, D, E - сортировка на _выводе_ их выводит именно в этом порядке, скажем по цифровым идентификаторам
name | id
A_____1
B_____2
C_____3
D_____4
E_____5
Они в админке добавляются автоматически, инкремент так сказать. А админу в силу тех или иных причин хочется, чтобы в самом начале шла запись B, а "A" шла второй. Т.е. в интерфейсе админки нужна функция обмена местами записей. Так , чтобы в A идентификатору присвоить "2", а B присвоить идентификатор "1" и в результате набор записей остался тем же, но B теперь на первом месте, а A на втором. Вот меня и интересует - как это сделать в SQL наиболее просто?

Если всё же не поняли о чём речь, возьмём конкретный пример - вот, в форумах есть возможность администратора поднимать разделы форумов выше или ниже в общем списке. Вот это как раз ещё один пример того что я описываю.
--
Есть конечно такие движки, в которых просто при добавлении новой записи даётся текстовое или цифровое поле. И по нему сортировка. Админ тупо вписывает в нужную запись цифру 1 например, а в другую "2" чтобы они именно в этом порядке выводились. Есть такие движки, видел. Но нужно, чтобы автоматически была возможность перемены мест записей.
----
По-поводу совместимости:
Начнём с того, что в данном примере только SQLite и MySQL, остальные базы я не затрагиваю. Во-вторых, PEAR DB штука хитрая - там есть режимы совместимости.
Например, как раз автоматическое увеличение идентификаторов записей не поддерживается в некоторых базах, а к нему привыкли пользователи MySQL, поэтому, чотобы была переносимость, класс PEAR DB скрыто от вас создаёт вспомогательную таблицу, где сам вручную и реализовывает sequence для записей в том, случае если это не поддерживается используемой базой. Так что код можно сделать _полностью" абстрактным - PEAR DB признан многими разработчиками как очень мощное решение. Вы зря сомневаетесь в нём.
_________________
Любителям и знатокам географии | Помощь по химии онлайн
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Веденин
Красные глаза
Красные глаза


Зарегистрирован: 17.05.2007
Сообщения: 2066
Откуда: Самара
11733 Монеты

СообщениеДобавлено: Пт, 21 Авг, 2009 10:00    Заголовок сообщения: Re: Обмен местами записей в MySQL Ответить с цитатой

vohomov писал(а):
Никаких юзеров и администраторов, только один администратор и сайт. Сортировка - дело понятное, но она будет на _выводе_ записей меню, а я говорю про их запись. То есть смотрите пример: у админа есть админка, он добавил на сайт 5 разделов:
A, B, C, D, E - сортировка на _выводе_ их выводит именно в этом порядке, скажем по цифровым идентификаторам
name | id
A_____1
B_____2
C_____3
D_____4
E_____5
Они в админке добавляются автоматически, инкремент так сказать. А админу в силу тех или иных причин хочется, чтобы в самом начале шла запись B, а "A" шла второй. Т.е. в интерфейсе админки нужна функция обмена местами записей. Так , чтобы в A идентификатору присвоить "2", а B присвоить идентификатор "1" и в результате набор записей остался тем же, но B теперь на первом месте, а A на втором. Вот меня и интересует - как это сделать в SQL наиболее просто?


Не думал, что это настолько простой вопрос:
1) В таблице должно быть минимум три поля id,name,order, так менять первичный ключ неправильно:
Код:
name | id| order
A_____1_____1
B_____2_____2
C_____3_____3
D_____4_____4
E_____5_____5

2) А дальше все делается двумя запросами
Код:
update nc_directory
set order = 1
where id = 2;
update nc_directory
set order = 2
where id = 1;

_________________
Написание конвекторов, парсеров, интеграции нескольких сайтов (в личку)

Тематические поисковые системы Рунета: Танцевальная, программиста, поиск книг
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
vohomov
Хостинг — это наше всё!
Хостинг — это наше всё!


Зарегистрирован: 17.07.2009
Сообщения: 183

20631 Монеты

СообщениеДобавлено: Пт, 21 Авг, 2009 10:04    Заголовок сообщения: Re: Обмен местами записей в MySQL Ответить с цитатой

Веденин писал(а):

Не думал, что это настолько простой вопрос:
1) В таблице должно быть минимум три поля id,name,order, так менять первичный ключ неправильно:
Код:
name | id| order
A_____1_____1
B_____2_____2
C_____3_____3
D_____4_____4
E_____5_____5

2) А дальше все делается двумя запросами
Код:
update nc_directory
set order = 1
where id = 2;
update nc_directory
set order = 2
where id = 1;

То, что обязательно есть id - это понятно, я вам таблицу из двух полей для простоты привёл.
Спасибо за совет - я со своей стороны не ожидал, что так просто это можно разрешить, у меня была несколько запутанная схема Smile
_________________
Любителям и знатокам географии | Помощь по химии онлайн
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов EOMY.NET -> Программирование для WEB Часовой пояс: GMT
Страница 1 из 1

 


EOMY TOP 100 Rambler's Top100   Рейтинг@Mail.ru    



Powered by phpBB © 2001, 2005 phpBB Group


Рейтинг SIMPLETOP.NET