Ramzil_Nixon
12.04.2014 - 13:40
Как можно на SQL запросе записать аналог PHP функции:
$i = $i++
Спасибо.
_____________
Миллионы приходят, уходят, не в них счастье. Самым важным на свете всегда будут люди в этой комнате, вот здесь, сейчас...
sergeiss
12.04.2014 - 13:50
Для начала поясни, что же ты на самом деле хочешь сделать. Потому что твой код на ПХП не имеет глубокого смысла, поэтому не понятно, что же ты на самом деле хочешь получить.
_____________
*
Хэлп по PHP*
Описалово по JavaScript *
Хэлп и СУБД для PostgreSQL*
Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги. *
"накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)
Ramzil_Nixon
12.04.2014 - 13:55
Цитата (sergeiss @ 12.04.2014 - 09:50) |
Для начала поясни, что же ты на самом деле хочешь сделать. Потому что твой код на ПХП не имеет глубокого смысла, поэтому не понятно, что же ты на самом деле хочешь получить. |
Допусти есть столбец под названием `position` Так естественно позиции выводимых данных.
При создании допусти пользователю захотелось вставить новую строку скажем между 5 и 6 строкой ( при выводе на обозрение имею ввиду). А выбирает он это с помощью выпадающего списка.
После записи строки, надо обновить все нижние строки. То есть добавил строку после 5 записи, надо обновить уже существующие данные (сделать на +1 больше).
То есть добавил после 5, позиция будет уже 6, а существующий 6 увеличить на один и так далее все строки после 6.
По моему понятно теперь объяснил
_______________________________________________________________
То есть мне нужно вынуть цифру, увеличить эту цифру на один и запихнуть обратно на свою ячейку. Думаю можно ли сделать это просто в SQL запросе.
_____________
Миллионы приходят, уходят, не в них счастье. Самым важным на свете всегда будут люди в этой комнате, вот здесь, сейчас...
sergeiss
12.04.2014 - 14:17
Цитата (Ramzil_Nixon @ 12.04.2014 - 13:55) |
Думаю можно ли сделать это просто в SQL запросе. |
Тебе даже не нужно пытаться сделать это в запросе!!! Да, технически возможно. Но если строк в таблице много (десятки-сотни тысяч, миллионы), то увеличение на 1 во многих строках будет делаться очень долго.
Нужно поменять алгоритм. Например, в отдельном поле этой же таблицы указывать, данные с каким айди идут перед данной строкой. Тогда при вставке строки тебе придется обновить всего одну запись.
Можно как-то по-другому сделать. Но не надо обновлять кучу строк только из-за вставки одной новой строки.
_____________
*
Хэлп по PHP*
Описалово по JavaScript *
Хэлп и СУБД для PostgreSQL*
Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги. *
"накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)
Ramzil_Nixon
12.04.2014 - 14:20
sergeiss, балин, придется сносить все что написал..
_____________
Миллионы приходят, уходят, не в них счастье. Самым важным на свете всегда будут люди в этой комнате, вот здесь, сейчас...
sergeiss
12.04.2014 - 14:21
Ну.... Я не знаю, и никто не форуме не знает, что ты там написал
Только ты знаешь. Может, и не надо "всё сносить"? А так, скорректировать только?
_____________
*
Хэлп по PHP*
Описалово по JavaScript *
Хэлп и СУБД для PostgreSQL*
Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги. *
"накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)
Ramzil_Nixon
12.04.2014 - 14:32
Я написал следующим образом:
$nums = 'позиция записанное только что в таблицу';
$QU = mysql_query("SELECT * FROM `name-table` WHERE `del` = '0' AND `position` > ''.$nums.") or die(mysql_error());
while($Q = mysql_fetch_assoc($QU)
{
$i = $Q['position'] + 1;
$Up = mysql_query("UPDATE `name-table` SET `position` = '".$i."' WHILE `del` = '0' AND `position` = '$Q['position']'") or die(mysq_error());
})
Но не обновляет так как надо.
1
2
3
4
5
В позиций при добавлении по порядку. (Если не выбрать на выпадающем списке категорию, пишет по порядку)
Но стоит выбрать 1, 2 и так далее, то позиция получается следующим образом:
1
2
3
4
6
4
А должен быть
1
2
3
5
6
4
Вот ума не приложу что я пишу не так.
_____________
Миллионы приходят, уходят, не в них счастье. Самым важным на свете всегда будут люди в этой комнате, вот здесь, сейчас...
sergeiss
12.04.2014 - 14:35
Ты еще и в цикле это всё делаешь?????? Это же "смерть сервера"!
PS. Вместо while, я так понимаю, подразумевалось where?
Запрос на такой апдейт делается по-другому (всего один запрос, безо всяких циклов):
update ..... set position = position + 1 where ....условия....
Да и то, как я уже сказал ранее, лучше избегать таких запросов, по крайней мере для больших таблиц.
_____________
*
Хэлп по PHP*
Описалово по JavaScript *
Хэлп и СУБД для PostgreSQL*
Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги. *
"накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)
vagrand
12.04.2014 - 14:37
Ramzil_Nixon
А почему такой малый шаг позиций? Почему бы не сделать его скажем равным 10? И тогда вставка между скажем 20 и 30 не будет вызывать никаких проблем: (30 - 20) / 2 = новая позиция
_____________
Senior PHP developer: PHP5, MySQL, JavaScript, CakePHP, Yii/Yii2, Zend Framework, Smarty, XML/Xslt, JQuery, Jquery Mobile, Bootstrap, ExtJS, HTML, HTML5, CSS, Linux, SVN, Git, Memcached, Redis, MongoDB, Zend Guard, Ioncube, FFMpeg, PayPal, Webmoney, Qiwi, Facebook API, Vkontakte Api, Google API, Twitter Api, Steam Api.
Junior Android Developer: Android SDK, многопоточность, работа с HTTP запросами, JSON, SQLite, фрагменты.
Ramzil_Nixon
12.04.2014 - 14:40
Цитата (sergeiss @ 12.04.2014 - 10:35) |
по крайней мере для больших таблиц. |
,
Таблица небольшая, несколько категорий всего будет во время эксплуатации.
Цитата (vagrand @ 12.04.2014 - 10:37) |
А почему такой малый шаг позиций? Почему бы не сделать его скажем равным 10? И тогда вставка между скажем 20 и 30 не будет вызывать никаких проблем: (30 - 20) / 2 = новая позиция |
Это создаст сложности при создании возможности потом редактировать список.
_____________
Миллионы приходят, уходят, не в них счастье. Самым важным на свете всегда будут люди в этой комнате, вот здесь, сейчас...
vagrand
12.04.2014 - 14:43
Ramzil_Nixon
Цитата |
Это создаст сложности при создании возможности потом редактировать список. |
Какие например?
_____________
Senior PHP developer: PHP5, MySQL, JavaScript, CakePHP, Yii/Yii2, Zend Framework, Smarty, XML/Xslt, JQuery, Jquery Mobile, Bootstrap, ExtJS, HTML, HTML5, CSS, Linux, SVN, Git, Memcached, Redis, MongoDB, Zend Guard, Ioncube, FFMpeg, PayPal, Webmoney, Qiwi, Facebook API, Vkontakte Api, Google API, Twitter Api, Steam Api.
Junior Android Developer: Android SDK, многопоточность, работа с HTTP запросами, JSON, SQLite, фрагменты.
Ramzil_Nixon
12.04.2014 - 14:44
vagrand, редактирование позиций, еще не дошел до этого пункта, пока точно не могу сказать
_____________
Миллионы приходят, уходят, не в них счастье. Самым важным на свете всегда будут люди в этой комнате, вот здесь, сейчас...
vagrand
12.04.2014 - 14:49
Не вижу никаких возможных проблем при редактировании.
_____________
Senior PHP developer: PHP5, MySQL, JavaScript, CakePHP, Yii/Yii2, Zend Framework, Smarty, XML/Xslt, JQuery, Jquery Mobile, Bootstrap, ExtJS, HTML, HTML5, CSS, Linux, SVN, Git, Memcached, Redis, MongoDB, Zend Guard, Ioncube, FFMpeg, PayPal, Webmoney, Qiwi, Facebook API, Vkontakte Api, Google API, Twitter Api, Steam Api.
Junior Android Developer: Android SDK, многопоточность, работа с HTTP запросами, JSON, SQLite, фрагменты.
Ramzil_Nixon
12.04.2014 - 14:54
Нашел другое решение, и для сервера легкий и по счет данной задумки париться не надо, всем спасибо за помощь!
_____________
Миллионы приходят, уходят, не в них счастье. Самым важным на свете всегда будут люди в этой комнате, вот здесь, сейчас...
glock18
12.04.2014 - 17:23
Только я обратил внимание, что
Цитата (Ramzil_Nixon @ 12.04.2014 - 09:40) |
$i = $i++ |
на самом деле даже инкремент значения $i по факту не сохранит?
Быстрый ответ:
Powered by dgreen
Здесь расположена полная версия этой страницы.