[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Арифмитические функции на mysql
Страницы: 1, 2
Ramzil_Nixon
Как можно на SQL запросе записать аналог PHP функции:

$i = $i++


Спасибо.

_____________
Миллионы приходят, уходят, не в них счастье. Самым важным на свете всегда будут люди в этой комнате, вот здесь, сейчас...

user posted image
sergeiss
Для начала поясни, что же ты на самом деле хочешь сделать. Потому что твой код на ПХП не имеет глубокого смысла, поэтому не понятно, что же ты на самом деле хочешь получить.

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
Ramzil_Nixon
Цитата (sergeiss @ 12.04.2014 - 09:50)
Для начала поясни, что же ты на самом деле хочешь сделать. Потому что твой код на ПХП не имеет глубокого смысла, поэтому не понятно, что же ты на самом деле хочешь получить.


Допусти есть столбец под названием `position` Так естественно позиции выводимых данных.

При создании допусти пользователю захотелось вставить новую строку скажем между 5 и 6 строкой ( при выводе на обозрение имею ввиду). А выбирает он это с помощью выпадающего списка.

После записи строки, надо обновить все нижние строки. То есть добавил строку после 5 записи, надо обновить уже существующие данные (сделать на +1 больше).

То есть добавил после 5, позиция будет уже 6, а существующий 6 увеличить на один и так далее все строки после 6.

По моему понятно теперь объяснил huh.gif smile.gif

_______________________________________________________________

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

_____________
Миллионы приходят, уходят, не в них счастье. Самым важным на свете всегда будут люди в этой комнате, вот здесь, сейчас...

user posted image
sergeiss
Цитата (Ramzil_Nixon @ 12.04.2014 - 13:55)
Думаю можно ли сделать это просто в SQL запросе.

Тебе даже не нужно пытаться сделать это в запросе!!! Да, технически возможно. Но если строк в таблице много (десятки-сотни тысяч, миллионы), то увеличение на 1 во многих строках будет делаться очень долго.

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

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
Ramzil_Nixon
sergeiss, балин, придется сносить все что написал..

_____________
Миллионы приходят, уходят, не в них счастье. Самым важным на свете всегда будут люди в этой комнате, вот здесь, сейчас...

user posted image
sergeiss
Ну.... Я не знаю, и никто не форуме не знает, что ты там написал smile.gif Только ты знаешь. Может, и не надо "всё сносить"? А так, скорректировать только?

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
Ramzil_Nixon
Я написал следующим образом:

// До этих функцией производится запись запись данных в базу
$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

Вот ума не приложу что я пишу не так.

_____________
Миллионы приходят, уходят, не в них счастье. Самым важным на свете всегда будут люди в этой комнате, вот здесь, сейчас...

user posted image
sergeiss
Ты еще и в цикле это всё делаешь?????? Это же "смерть сервера"!

PS. Вместо while, я так понимаю, подразумевалось where?

Запрос на такой апдейт делается по-другому (всего один запрос, безо всяких циклов):
update ..... set position = position + 1 where ....условия....


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

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
vagrand
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
Цитата (sergeiss @ 12.04.2014 - 10:35)
по крайней мере для больших таблиц.
,
Таблица небольшая, несколько категорий всего будет во время эксплуатации.

Цитата (vagrand @ 12.04.2014 - 10:37)
А почему такой малый шаг позиций? Почему бы не сделать его скажем равным 10? И тогда вставка между скажем 20 и 30 не будет вызывать никаких проблем: (30 - 20) / 2 = новая позиция

Это создаст сложности при создании возможности потом редактировать список.

_____________
Миллионы приходят, уходят, не в них счастье. Самым важным на свете всегда будут люди в этой комнате, вот здесь, сейчас...

user posted image
vagrand
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
vagrand, редактирование позиций, еще не дошел до этого пункта, пока точно не могу сказать

_____________
Миллионы приходят, уходят, не в них счастье. Самым важным на свете всегда будут люди в этой комнате, вот здесь, сейчас...

user posted image
vagrand
Не вижу никаких возможных проблем при редактировании.

_____________
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
Нашел другое решение, и для сервера легкий и по счет данной задумки париться не надо, всем спасибо за помощь!

_____________
Миллионы приходят, уходят, не в них счастье. Самым важным на свете всегда будут люди в этой комнате, вот здесь, сейчас...

user posted image
glock18
Только я обратил внимание, что

Цитата (Ramzil_Nixon @ 12.04.2014 - 09:40)
$i = $i++


на самом деле даже инкремент значения $i по факту не сохранит? laugh.gif
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.