[mysql] как автоматом менять записи на основе других записей?

slonishka

можно ли как-то для строки: "1 | blabla | blabla" сделать строку "2 | blabla | blabla" в той же таблице такую, что при любом изменении первой строки (кроме изменения записи в первом столбце вторая строка изменялась бы аналогичным образом?

skvoria

Хммм. Ботай триггера и хранимые процедуры. Вроде в последних версиях была поддержка.

slonishka

нормально, только у меня 4.1
переставлять пока лень, попробую чего-нибудь еще придумать. пасибо

skvoria

Опиши задачу. Странная постановка, если честно.

slonishka

задача как всегда дурацкая.
например, майский номер журнала — 116-117. в базе майский хранится под номером 117.
надо чтоб если пользователь захочет увидеть номер 116, ему показали номер 117.
способов то много, мне просто показалось, что проще всего устроить такую "подмену" прямо в базе.
опять же, мне-то проще и логичней сделать обработчик ошибки, тем более, что номера 116 как бы не существует.
но начальство настаивает на том, что 116 номер все-таки есть в природе и его как бы тоже можно посмотреть.
такие дела

alexkravchuk

опять же, мне-то проще и логичней сделать обработчик ошибки, тем более, что номера 116 как бы не существует.
но начальство настаивает на том, что 116 номер все-таки есть в природе и его как бы тоже можно посмотреть.
Тот способ, который ты хочешь реализовать, откровенно крив. Сделай иначе, через ссылки, когда есть внутренние идентификаторы у журналов, есть таблица обычных номеров, в которой и прописано соответствие между номером журнала и ссылкой на данные номера журнала. Это типовое решение, и imho, единственно верное в данной ситуации.

slonishka

я наверное таблицу соответствий какую-нибудь сделаю.
116 | 117
110 | 111
109 | 111
...
и буду проверять номер из GET сначала на наличие в ней, а уж потом переходить от нее к главной.

slonishka

ну я написал ниже. так?)

alexkravchuk

да. Странно, что ты не написал это раньше...

slonishka

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

0000

А нафига таблица, если судя по всему у тебя простой способ определения - то тебе надо просто найти в таблице минимальный номер, который больше или равен введеному - ну что то типа того

SELECT MIN (столбец_номер_журнала) FROM таблица_журналов WHERE столбец_номер_журнала >= значение_запрашиваемое_пользователем

slonishka

гениально!
надо будет наверное так и сделать. спасибо.

slonishka

хотя нет. это придется два раза дёргать "большую" базу.
а в предыдущем способе — один раз маленькую и один раз большую.
впрочем, база не такая уж и большая, зато идея забавная и сразу в голову не пришла.

skvoria

Через mod_rewrite не хочешь сделать? вообще базу дергать не придется

0000

Почему это два? Ну сохрани это значение куда нибудь и из него дергай.

slonishka

так вот я и предлагал изначально "такие значения" в базе хранить.
если его "куда-то сохранить", то вся гениальность твоего способа пропадает.

slonishka

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

skvoria

Во-первых, надо один раз собрать нормально - и не париться, к тому же тебе когда-то придется это сделать в угоду продвижению
Во-вторых, если ты считаешь, что постоянный лишний перезапрос базы (при каждом реквесте! ктока бишь у тебя там посетителей-то в день?) - это лучше, чем раз в полгода дописать одно правило в htaccess - то... думаю, ты ошибаешься
В конце концов - сделай веб-админку htaccess

slonishka

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

skvoria

тебе какого плана пример? типа вот так без него, а вот так с ним?
ну почитай правила индексации на рамблере, к примеру. У них в свое время был дивный отрывок на тему индексации динамических урлов.

slonishka

нормальный пример, соберу нормально пожалуй.
Оставить комментарий
Имя или ник:
Комментарий: