Регистрация
Регистрируясь, вы подтверждаете свое согласие с соглашением об использовании персональных данных.
Восстановление пароля

Сохранить в базу текущий номер объекта на странице (нумерация)

24.09.2013, 17:37
dekart
DaHost.Ru

Зарегистрирован:
2005-03-26
Сообщений: 81

Здравствуйте.

Делаю каталог участников выставки.
Пока идут плавающие номера (вывожу их через php - порядковый номер записи на странице ".(!$curPos ? $f_RowNum + 1 : $f_RowNum + 1 + $curPos)." ), т.к. каталог еще формируется, при добавлении новых участников, нумерация сдвигается согласно установленной сортировке.
Когда каталог будет сформирован (закончен прием новых участников) нужно закрепить номера за каждым участником.
Должна быть кнопочка "Закрыть каталог", после нажатия на которую сохраняются номера в спец.поле "NumCat" (т.е. отпраляется запрос к БД для записи в поле NumCat).

<?=listQuery("SELECT GROUP_CONCAT(Message_ID SEPARATOR ', ') as MesNum FROM Message2008 WHERE Subdivision_ID = $sub ORDER BY BreedGroup, CatBreed, Color, ClassFirst, ClassSecond, Sex","\$data[MesNum]")?>
C помощью этого запроса я получила список Message_ID в нужном порядке:
63, 142, 121, 109, 124, 62, 140, 113, 61, 60, 77, 94, 70, 47, 141,... и т.д.
Т.е. запись с ID 63 = 1, 142 = 2 и т.д.

Подскажите, пожалуйста, как теперь сделать соответствие этих номеров и записать в базу в поле NumCat, как передать в запрос текущий номер позиции на странице?

dekart
24.09.2013, 18:14
Руслан Густокашин
Студия Вэлпис

Зарегистрирован:
2012-02-06
Сообщений: 962

Попробуйте примеры нумерации строк в MySQL - кажется там есть то, что вам нужно. улыбка
25.09.2013, 00:39
dekart
DaHost.Ru

Зарегистрирован:
2005-03-26
Сообщений: 81

Спасибо, Руслан, за ссылку.
Разбираюсь, но сложно...

Техподдержка посоветовала так:

Цитата:
С помощью этого запроса можно будет получить массив значений Message_ID в нужном вам порядке, например 3, 24, 45, 47.
Затем этот массив можно последовательно перебирать в цикле примерно так:
$i = 0;
foreach ($messages AS $vol) {
$i++;
$db->query("UPDATE `Message2008` SET `NumCat`=`$i` WHERE `Message_ID`=$vol");
}

Но я не пойму, как это последовательно перебирать в цикле?
Цитата:
Массив можно получить функцией $db->get_col().

Как эту функцию здесь использовать? Можно пример?

Тут еще "засада"...
Это основной список участников. А будет еще дополнительный...
Как его лучше реализовать?
Думаю, добавить доп.поле (лог.перем-я) "В доп.список". И использовать в системных настройках выборку по этому полю, типа:
$query_where = "a.DopList='1'";

Для доп.списка нужна своя нумерация, начинающаяся после последнего номера основного каталога. Типа в основном каталоге 135 участников, значит доп.список начинается с 136 номера.

dekart
25.09.2013, 19:22
Руслан Густокашин
Студия Вэлпис

Зарегистрирован:
2012-02-06
Сообщений: 962

Цитата:

Цитата:
С помощью этого запроса можно будет получить массив значений Message_ID в нужном вам порядке, например 3, 24, 45, 47.
Затем этот массив можно последовательно перебирать в цикле примерно так:
$i = 0;
foreach ($messages AS $vol) {
$i++;
$db->query("UPDATE `Message2008` SET `NumCat`=`$i` WHERE `Message_ID`=$vol");
}

Но я не пойму, как это последовательно перебирать в цикле?
Цитата:
Массив можно получить функцией $db->get_col().

Как эту функцию здесь использовать? Можно пример?

Но Вам ведь привели пример перебора в цикле (оператор foreach).
Сначала получаете массив при помощи get_col, потом обрабатываете его с помощью приведенного Вами же примера от техподдержки.
Вот Описание $db->get_col

Цитата:

Тут еще "засада"...
Это основной список участников. А будет еще дополнительный...
Как его лучше реализовать?
Думаю, добавить доп.поле (лог.перем-я) "В доп.список". И использовать в системных настройках выборку по этому полю, типа:
$query_where = "a.DopList='1'";
Для доп.списка нужна своя нумерация, начинающаяся после последнего номера основного каталога. Типа в основном каталоге 135 участников, значит доп.список начинается с 136 номера.

Я тоже думаю, что лучше ввести дополнительный признак - к какому списку относится участник. И видимо придется еще сделать также поле с порядковым номером участника в этом втором списке. Заполнить это поле таким же алгоритмом, как в первом списке.

Руслан
198 196 2013-09-25 19:22:16 13316
Описание проекта